Class Table

All Implemented Interfaces:
Animation, Editable, StyleListener, Iterable<Component>

public class Table extends Container

The Table class represents a grid of data that can be used for rendering a grid of components/labels. The table reflects and updates the underlying model data. Table relies heavily on the com.codename1.ui.table.TableLayout class and com.codename1.ui.table.TableModel interface to present its UI. Unlike a com.codename1.ui.List a Table doesn't feature a separate renderer and instead allows developers to derive the class.

Form hi = new Form("Table", new BorderLayout());
TableModel model = new DefaultTableModel(new String[] {"Col 1", "Col 2", "Col 3"}, new Object[][] {
    {"Row 1", "Row A", "Row X"},
    {"Row 2", "Row B can now stretch", null},
    {"Row 3", "Row C", "Row Z"},
    {"Row 4", "Row D", "Row K"},
    }) {
        public boolean isCellEditable(int row, int col) {
            return col != 0;
        }
    };
Table table = new Table(model) {
@Override
    protected Component createCell(Object value, int row, int column, boolean editable) { // (1)
        Component cell;
        if(row == 1 && column == 1) { // (2)
            Picker p = new Picker();
            p.setType(Display.PICKER_TYPE_STRINGS);
            p.setStrings("Row B can now stretch", "This is a good value", "So Is This", "Better than text field");
            p.setSelectedString((String)value); // (3)
            p.setUIID("TableCell");
            p.addActionListener((e) -> getModel().setValueAt(row, column, p.getSelectedString())); // (4)
            cell = p;
        } else {
            cell = super.createCell(value, row, column, editable);
        }
        if(row > -1 && row % 2 == 0) { // (5)
            // pinstripe effect
            cell.getAllStyles().setBgColor(0xeeeeee);
            cell.getAllStyles().setBgTransparency(255);
        }
        return cell;
    }
@Override
    protected TableLayout.Constraint createCellConstraint(Object value, int row, int column) {
        TableLayout.Constraint con =  super.createCellConstraint(value, row, column);
        if(row == 1 && column == 1) {
            con.setHorizontalSpan(2);
        }
        con.setWidthPercentage(33);
        return con;
    }
};
hi.add(BorderLayout.CENTER, table);
hi.show();
  • Field Details

    • INNER_BORDERS_NONE

      public static final int INNER_BORDERS_NONE
      Constant denoting that inner borders should not be drawn at all
      See Also:
    • INNER_BORDERS_ROWS

      public static final int INNER_BORDERS_ROWS
      Constant denoting that only inner borders rows should be drawn
      See Also:
    • INNER_BORDERS_COLS

      public static final int INNER_BORDERS_COLS
      Constant denoting that only inner borders columns should be drawn
      See Also:
    • INNER_BORDERS_ALL

      public static final int INNER_BORDERS_ALL
      Constant denoting that inner borders should be drawn fully
      See Also:
  • Constructor Details

    • Table

      public Table()
      Constructor for usage by GUI builder and automated tools, normally one should use the version that accepts the model
    • Table

      public Table(TableModel model)

      Create a table with a new model

      Parameters
      • model: the model underlying this table
    • Table

      public Table(TableModel model, boolean includeHeader)

      Create a table with a new model

      Parameters
      • model: the model underlying this table

      • includeHeader: Indicates whether the table should render a table header as the first row

  • Method Details

    • getSelectedRow

      public int getSelectedRow()

      Returns the selected row in the table

      Returns

      the offset of the selected row in the table if a selection exists

    • includeNullValues

      protected boolean includeNullValues()

      By default createCell/constraint won't be invoked for null values by overriding this method to return true you can replace this behavior

      Returns

      false by default

    • getSelectedColumn

      public int getSelectedColumn()

      Returns the selected column in the table

      Returns

      the offset of the selected column in the table if a selection exists

    • paintGlass

      protected void paintGlass(Graphics g)

      This method can be overriden by a component to draw on top of itself or its children after the component or the children finished drawing in a similar way to the glass pane but more refined per component

      Parameters
      • g: the graphics context
      Overrides:
      paintGlass in class Container
    • createColumnSortComparator

      protected Comparator<Object> createColumnSortComparator(int column)

      Returns a generic comparator that tries to work in a way that will sort columns with similar object types. This method can be overridden to create custom sort orders or return null and thus disable sorting for a specific column

      Parameters
      • column: the column that's sorted
      Returns

      the comparator instance

    • sort

      public void sort(int column, boolean ascending)

      Sorts the given column programmatically

      Parameters
      • column: the column to sort

      • ascending: true to sort in ascending order

    • createCell

      protected Component createCell(Object value, int row, int column, boolean editable)

      Creates a cell based on the given value

      Parameters
      • value: the new value object

      • row: row number, -1 for the header rows

      • column: column number

      • editable: true if the cell is editable

      Returns

      cell component instance

    • initComponent

      public void initComponent()
      Allows subclasses to bind functionality that relies on fully initialized and "ready for action" component state
      Overrides:
      initComponent in class Component
    • deinitialize

      public void deinitialize()
      Invoked to indicate that the component initialization is being reversed since the component was detached from the container hierarchy. This allows the component to deregister animators and cleanup after itself. This method is the opposite of the initComponent() method.
      Overrides:
      deinitialize in class Component
    • getModel

      public TableModel getModel()

      Returns the model instance

      Returns

      the model instance

    • setModel

      public void setModel(TableModel model)

      Replaces the underlying model

      Parameters
      • model: the new model
    • isDrawBorder

      public boolean isDrawBorder()

      Indicates whether the table border should be drawn

      Returns

      the drawBorder

    • setDrawBorder

      public void setDrawBorder(boolean drawBorder)

      Indicates whether the table border should be drawn

      Parameters
      • drawBorder: the drawBorder to set
    • getInnerBorderMode

      public int getInnerBorderMode()

      Returns the current inner border mode

      Returns

      the current inner border mode (one of the INNER_BORDER_* constants)

    • setInnerBorderMode

      public void setInnerBorderMode(int innerBorder)

      Sets how to draw the inner border (All of it, only rows/columns, none, groups) Note that setting to any mode other than NONE/ALL will result in the border drawing as collapsed whether this is a collpased border or not

      Parameters
      • innerBorder: one of the INNER_BORDER_* constants
    • shouldDrawInnerBorderAfterRow

      protected boolean shouldDrawInnerBorderAfterRow(int row)

      Returns whether an inner border should be drawn after the specified row. This allows customization in subclasses to create for example the effects of segments in atable, i.e. instead of a line after each row - lines after "chunks" of rows. Note that this is queried only when the inner border mode is set to INNER_BORDER_ROWS

      Parameters
      • row: The row in question
      Returns

      true to draw inner border, false otherwise

    • setCollapseBorder

      public void setCollapseBorder(boolean collapseBorder)

      Indicates whether the borders of the cells should collapse to form a one line border

      Parameters
      • collapseBorder: true to collapse (default), false for separate borders
    • setDrawEmptyCellsBorder

      public void setDrawEmptyCellsBorder(boolean drawEmptyCellsBorder)

      Indicates whether empty cells should have borders (relevant only for separate borders and not for collapsed)

      Parameters
      • drawEmptyCellsBorder: - true to draw (default), false otherwise
    • setBorderSpacing

      public void setBorderSpacing(int horizontal, int vertical)

      Sets the spacing of cells border (relevant only for separate borders and not for collapsed)

      Parameters
      • horizontal: - The horizontal spacing

      • vertical: - The vertical spacing

    • getTitleAlignment

      public int getTitleAlignment()

      Indicates the alignment of the title see label alignment for details

      Returns

      the title alignment

      See also
      • com.codename1.ui.Label#setAlignment(int)
    • setTitleAlignment

      public void setTitleAlignment(int titleAlignment)

      Indicates the alignment of the title see label alignment for details

      Parameters
      • titleAlignment: the title alignment
      See also
      • com.codename1.ui.Label#setAlignment(int)
    • getCellColumn

      public int getCellColumn(Component cell)

      Returns the column in which the given cell is placed

      Parameters
      • cell: the component representing the cell placed in the table
      Returns

      the column in which the cell was placed in the table

    • getCellRow

      public int getCellRow(Component cell)

      Returns the row in which the given cell is placed

      Parameters
      • cell: the component representing the cell placed in the table
      Returns

      the row in which the cell was placed in the table

    • getCellAlignment

      public int getCellAlignment()

      Indicates the alignment of the cells see label alignment for details

      Returns

      the cell alignment

      See also
      • com.codename1.ui.Label#setAlignment(int)
    • setCellAlignment

      public void setCellAlignment(int cellAlignment)

      Indicates the alignment of the cells see label alignment for details

      Parameters
      • cellAlignment: the table cell alignment
      See also
      • com.codename1.ui.Label#setAlignment(int)
    • isIncludeHeader

      public boolean isIncludeHeader()

      Indicates whether the table should render a table header as the first row

      Returns

      the includeHeader

    • setIncludeHeader

      public void setIncludeHeader(boolean includeHeader)

      Indicates whether the table should render a table header as the first row

      Parameters
      • includeHeader: the includeHeader to set
    • createCellConstraint

      protected TableLayout.Constraint createCellConstraint(Object value, int row, int column)

      Creates the table cell constraint for the given cell, this method can be overriden for the purposes of modifying the table constraints.

      Parameters
      • value: the value of the cell

      • row: the table row

      • column: the table column

      Returns

      the table constraint

    • getPropertyNames

      public String[] getPropertyNames()

      A component may expose mutable property names for a UI designer to manipulate, this API is designed for usage internally by the GUI builder code

      Returns

      the property names allowing mutation

      Overrides:
      getPropertyNames in class Component
    • getPropertyTypes

      public Class[] getPropertyTypes()

      Matches the property names method (see that method for further details).

      Returns

      the types of the properties

      Overrides:
      getPropertyTypes in class Component
    • getPropertyTypeNames

      public String[] getPropertyTypeNames()

      This method is here to workaround an XMLVM array type bug where property types aren't identified properly, it returns the names of the types using the following type names: String,int,double,long,byte,short,char,String[],String[][],byte[],Image,Image[],Object[],ListModel,ListCellRenderer

      Returns

      Array of type names

      Overrides:
      getPropertyTypeNames in class Component
    • getPropertyValue

      public Object getPropertyValue(String name)

      Returns the current value of the property name, this method is used by the GUI builder

      Parameters
      • name: the name of the property
      Returns

      the value of said property

      Overrides:
      getPropertyValue in class Component
    • setPropertyValue

      public String setPropertyValue(String name, Object value)

      Sets a new value to the given property, returns an error message if failed and null if successful. Notice that some builtin properties such as "$designMode" might be sent to components to indicate application state.

      Parameters
      • name: the name of the property

      • value: new value for the property

      Returns

      error message or null

      Overrides:
      setPropertyValue in class Component
    • translateSortedRowToModelRow

      public int translateSortedRowToModelRow(int row)

      If the table is sorted returns the position of the row in the actual underlying model

      Parameters
      • row: @param row the row as it visually appears in the table or in the createCell method
      Returns
      Returns:
      the position of the row in the physical model, this will be the same value if the table isn't sorted
    • isSortSupported

      public boolean isSortSupported()

      Sort support can be toggled with this flag

      Returns

      the sortSupported

    • setSortSupported

      public void setSortSupported(boolean sortSupported)

      Sort support can be toggled with this flag

      Parameters
      • sortSupported: the sortSupported to set