Mega Code Archive

 
Categories / Java / GWT
 

FlexTable with components

package com.rntsoft.gwt.client; import com.google.gwt.user.client.*; import com.google.gwt.user.client.ui.*; import com.google.gwt.core.client.*; public class GWTClient implements EntryPoint{   private final Object[][] rowData = {   { new DeleteButton("Delete"), "A", "B", "C", "D"},   { new DeleteButton("Delete"), "E", "F",  "G", "H"},   { new DeleteButton("Delete"), "I", "J", "K", "L"},    };      private final ComponentFlexTable table = new ComponentFlexTable(rowData);   private void onCellClicked(SourcesTableEvents sender, final int row, final int cell){      if (row == 0) {        return;      }         final Widget widget = table.getWidget(row, cell);              if (widget instanceof Label == false) {           return;      }       final Label label = (Label)widget;      final TextBox textBox = new TextBox();      textBox.setText(table.getText(row, cell));      table.setWidget(row, cell, textBox);      DeferredCommand.addCommand(new Command() {        public void execute() {          textBox.setFocus(true);          textBox.selectAll();        }      });                                    textBox.addKeyboardListener(          new KeyboardListenerAdapter() {            public void onKeyPress(Widget sender,                 char keyCode, int modifiers) {              if (keyCode == KeyboardListener.KEY_ENTER) {                label.setText(textBox.getText());                  table.setWidget(row, cell, label);              } else if (keyCode ==                KeyboardListener.KEY_ESCAPE) {                table.setWidget(row, cell, label);              }            }      });       textBox.addFocusListener(new FocusListenerAdapter() {        public void onLostFocus(Widget sender) {          label.setText(textBox.getText());          table.setWidget(row, cell, label);        }      });                   }   public void onModuleLoad() {     table.addColumn("");         table.addColumn("Column 1");     table.addColumn("Column 2");     table.addColumn("Column 3");     table.addColumn("Column 4");          RootPanel.get().add(table);          table.addTableListener(new TableListener() {       public void onCellClicked(SourcesTableEvents sender, final int row, final int cell) {         GWTClient.this.onCellClicked(sender, row, cell);       }     });   }   private class DeleteButton extends Button {     public DeleteButton(String text) {       super(text);       addClickListener(new ClickListener() {         public void onClick(Widget sender) {           table.removeRow(getThisRow());           table.updateRowStyle();         }       });     }     private int getThisRow() {       for (int i=1; i < table.getRowCount(); ++i) {         if (table.getWidget(i, 0) == this) {           return i;         }       }       return -1;     }   } } class ComponentFlexTable extends FlexTable {   protected static final int HEADER_ROW = 0;   private int rowIndex = 1;   private Object[][] rowData = null;   public ComponentFlexTable(Object[][] rowData) {     insertRow(HEADER_ROW);     getRowFormatter().addStyleName(HEADER_ROW,"ComponentFlexTable-Header");     setCellSpacing(0);     addStyleName("ComponentFlexTable");             this.rowData = rowData;     createRows(0);     updateRowStyle();   }   public void createRows(int rowIndex) {     if (rowData == null)       return;     for (int row = rowIndex; row < rowData.length; row++) {       addRow(rowData[row]);     }   }   private void addRow(Object[] cellObjects) {     for (int i = 0; i < cellObjects.length; i++) {       addCell(rowIndex, i, cellObjects[i]);     }     rowIndex++;   }   public void addCell(int row, int cell, Object cellObject) {     if (cellObject instanceof Widget)       setWidget(row, cell, (Widget) cellObject);     else       setWidget(row, cell,new Label(cellObject.toString()));     getCellFormatter().addStyleName(row, cell,"ComponentFlexTable-Cell");       }      public void updateRowStyle() {     HTMLTable.RowFormatter rf = getRowFormatter();     for (int row = 1; row < getRowCount(); ++row) {       if ((row % 2) != 0) {         rf.removeStyleName(row,"ComponentFlexTable-EvenRow");         rf.addStyleName(row,"ComponentFlexTable-OddRow");       }else {         rf.removeStyleName(row,"ComponentFlexTable-OddRow");         rf.addStyleName(row,"ComponentFlexTable-EvenRow");       }     }   }   public void addColumn(Object columnHeading) {     Widget widget = new Label(columnHeading.toString());     int columnIndex = getColumnCount();     widget.setWidth("100%");     widget.addStyleName("ComponentFlexTable-ColumnLabel");     setWidget(HEADER_ROW, columnIndex, widget);     getCellFormatter().addStyleName(HEADER_ROW, columnIndex,"ComponentFlexTable-ColumnLabelCell");   }   public int getColumnCount() {     return getCellCount(HEADER_ROW);   } } ///////////// .ComponentFlexTable {   border-top: thin solid #444444;   border-left: thin solid #444444;   border-right: thin solid #111111;   border-bottom: thin solid #111111;   background-color:  #505050; } .ComponentFlexTable-Header { } .ComponentFlexTable-OddRow {   background-color: #cccccc; } .ComponentFlexTable-EvenRow {   background-color:  #505050; } .ComponentFlexTable-ColumnLabel {   color: white;   padding: 3px; } .ComponentFlexTable-ColumnLabelCell {   color: white;   border-width: 0 0 0 1px;   border-style: solid;   border-color: white;   margin: 0;   padding: 0;   text-align: center; } .ComponentFlexTable-Cell {   border-width: 0px 0px 0px 1px;   border-style: solid;   color: white;   border-color: white;   padding: 5px; }                          GWT-componentFlexTable.zip( 4 k)