# Class Table

java.lang.Object
com.codename1.ui.Component
com.codename1.ui.Container
com.codename1.ui.table.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 Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final int`
  `INNER_BORDERS_ALL`
  Constant denoting that inner borders should be drawn fully
  `static final int`
  `INNER_BORDERS_COLS`
  Constant denoting that only inner borders columns should be drawn
  `static final int`
  `INNER_BORDERS_NONE`
  Constant denoting that inner borders should not be drawn at all
  `static final int`
  `INNER_BORDERS_ROWS`
  Constant denoting that only inner borders rows should be drawn

  ### Fields inherited from class Component

  `BASELINE, BOTTOM, BRB_CENTER_OFFSET, BRB_CONSTANT_ASCENT, BRB_CONSTANT_DESCENT, BRB_OTHER, CENTER, CROSSHAIR_CURSOR, DEFAULT_CURSOR, DRAG_REGION_IMMEDIATELY_DRAG_X, DRAG_REGION_IMMEDIATELY_DRAG_XY, DRAG_REGION_IMMEDIATELY_DRAG_Y, DRAG_REGION_LIKELY_DRAG_X, DRAG_REGION_LIKELY_DRAG_XY, DRAG_REGION_LIKELY_DRAG_Y, DRAG_REGION_NOT_DRAGGABLE, DRAG_REGION_POSSIBLE_DRAG_X, DRAG_REGION_POSSIBLE_DRAG_XY, DRAG_REGION_POSSIBLE_DRAG_Y, E_RESIZE_CURSOR, HAND_CURSOR, LEFT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NW_RESIZE_CURSOR, RIGHT, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, TOP, W_RESIZE_CURSOR, WAIT_CURSOR`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Table()`
  Constructor for usage by GUI builder and automated tools, normally one should use the version that accepts the model
  `Table(TableModel model)`
  Create a table with a new model
  `Table(TableModel model, boolean includeHeader)`
  Create a table with a new model

- ## Method Summary

  Modifier and Type
  Method
  Description
  `protected Component`
  `createCell(Object value, int row, int column, boolean editable)`
  Creates a cell based on the given value
  `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.
  `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.
  `void`
  `deinitialize()`
  Invoked to indicate that the component initialization is being reversed since the component was detached from the container hierarchy.
  `int`
  `getCellAlignment()`
  Indicates the alignment of the cells see label alignment for details
  `int`
  `getCellColumn(Component cell)`
  Returns the column in which the given cell is placed
  `int`
  `getCellRow(Component cell)`
  Returns the row in which the given cell is placed
  `int`
  `getInnerBorderMode()`
  Returns the current inner border mode
  `TableModel`
  `getModel()`
  Returns the model instance
  `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
  `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
  `Class[]`
  `getPropertyTypes()`
  Matches the property names method (see that method for further details).
  `Object`
  `getPropertyValue(String name)`
  Returns the current value of the property name, this method is used by the GUI builder
  `int`
  `getSelectedColumn()`
  Returns the selected column in the table
  `int`
  `getSelectedRow()`
  Returns the selected row in the table
  `int`
  `getTitleAlignment()`
  Indicates the alignment of the title see label alignment for details
  `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
  `void`
  `initComponent()`
  Allows subclasses to bind functionality that relies on fully initialized and "ready for action" component state
  `boolean`
  `isDrawBorder()`
  Indicates whether the table border should be drawn
  `boolean`
  `isIncludeHeader()`
  Indicates whether the table should render a table header as the first row
  `boolean`
  `isSortSupported()`
  Sort support can be toggled with this flag
  `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
  `void`
  `setBorderSpacing(int horizontal, int vertical)`
  Sets the spacing of cells border (relevant only for separate borders and not for collapsed)
  `void`
  `setCellAlignment(int cellAlignment)`
  Indicates the alignment of the cells see label alignment for details
  `void`
  `setCollapseBorder(boolean collapseBorder)`
  Indicates whether the borders of the cells should collapse to form a one line border
  `void`
  `setDrawBorder(boolean drawBorder)`
  Indicates whether the table border should be drawn
  `void`
  `setDrawEmptyCellsBorder(boolean drawEmptyCellsBorder)`
  Indicates whether empty cells should have borders (relevant only for separate borders and not for collapsed)
  `void`
  `setIncludeHeader(boolean includeHeader)`
  Indicates whether the table should render a table header as the first row
  `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
  `void`
  `setModel(TableModel model)`
  Replaces the underlying model
  `String`
  `setPropertyValue(String name, Object value)`
  Sets a new value to the given property, returns an error message if failed and null if successful.
  `void`
  `setSortSupported(boolean sortSupported)`
  Sort support can be toggled with this flag
  `void`
  `setTitleAlignment(int titleAlignment)`
  Indicates the alignment of the title see label alignment for details
  `protected boolean`
  `shouldDrawInnerBorderAfterRow(int row)`
  Returns whether an inner border should be drawn after the specified row.
  `void`
  `sort(int column, boolean ascending)`
  Sorts the given column programmatically
  `int`
  `translateSortedRowToModelRow(int row)`
  If the table is sorted returns the position of the row in the actual underlying model

  ### Methods inherited from class Container

  `add, add, add, add, add, add, addAll, addComponent, addComponent, addComponent, addComponent, animateHierarchy, animateHierarchyAndWait, animateHierarchyFade, animateHierarchyFadeAndWait, animateLayout, animateLayoutAndWait, animateLayoutFade, animateLayoutFadeAndWait, animateUnlayout, animateUnlayoutAndWait, applyRTL, calcPreferredSize, cancelRepaints, clearClientProperties, constrainHeightWhenScrollable, constrainWidthWhenScrollable, contains, createAnimateHierarchy, createAnimateHierarchyFade, createAnimateLayout, createAnimateLayoutFade, createAnimateLayoutFadeAndWait, createAnimateMotion, createAnimateUnlayout, createReplaceTransition, dragInitiated, drop, encloseIn, encloseIn, findDropTargetAt, findFirstFocusable, fireClicked, flushReplace, forceRevalidate, getBottomGap, getChildrenAsList, getClosestComponentTo, getComponentAt, getComponentAt, getComponentCount, getComponentIndex, getGridPosX, getGridPosY, getLayout, getLayoutHeight, getLayoutWidth, getLeadComponent, getLeadParent, getResponderAt, getSafeAreaRoot, getScrollIncrement, getSideGap, getUIManager, initLaf, invalidate, isEnabled, isSafeArea, isSafeAreaRoot, isScrollableX, isScrollableY, isSelectableInteraction, isSurface, iterator, iterator, keyPressed, keyReleased, layoutContainer, morph, morphAndWait, paint, paintComponentBackground, paramString, pointerPressed, refreshTheme, removeAll, removeComponent, replace, replace, replaceAndWait, replaceAndWait, replaceAndWait, revalidate, revalidateLater, revalidateWithAnimationSafety, scrollComponentToVisible, setCellRenderer, setEnabled, setLayout, setLeadComponent, setSafeArea, setSafeAreaRoot, setScrollable, setScrollableX, setScrollableY, setScrollIncrement, setShouldCalcPreferredSize, setShouldLayout, setUIManager, updateTabIndices`

  ### Methods inherited from class Component

  `addDragFinishedListener, addDragOverListener, addDropListener, addFocusListener, addLongPressListener, addPointerDraggedListener, addPointerPressedListener, addPointerReleasedListener, addPullToRefresh, addScrollListener, addStateChangeListener, animate, announceForAccessibility, bindProperty, blocksSideSwipe, calcScrollSize, contains, containsOrOwns, createStyleAnimation, deinitializeCustomStyle, dragEnter, dragExit, dragFinished, draggingOver, drawDraggedImage, focusGained, focusLost, getAbsoluteX, getAbsoluteY, getAccessibilityText, getAllStyles, getAnimationManager, getBaseline, getBaselineResizeBehavior, getBindablePropertyNames, getBindablePropertyTypes, getBorder, getBoundPropertyValue, getBounds, getBounds, getClientProperty, getCloudBoundProperty, getCloudDestinationProperty, getComponentForm, getComponentState, getCursor, getDefaultDragTransparency, getDirtyRegion, getDisabledStyle, getDraggedx, getDraggedy, getDragImage, getDragRegionStatus, getDragSpeed, getDragTransparency, getEditingDelegate, getHeight, getInlineAllStyles, getInlineDisabledStyles, getInlinePressedStyles, getInlineSelectedStyles, getInlineStylesTheme, getInlineUnselectedStyles, getInnerHeight, getInnerPreferredH, getInnerPreferredW, getInnerWidth, getInnerX, getInnerY, getLabelForComponent, getName, getNativeOverlay, getNextFocusDown, getNextFocusLeft, getNextFocusRight, getNextFocusUp, getOuterHeight, getOuterPreferredH, getOuterPreferredW, getOuterWidth, getOuterX, getOuterY, getOwner, getParent, getPreferredH, getPreferredSize, getPreferredSizeStr, getPreferredTabIndex, getPreferredW, getPressedStyle, getSameHeight, getSameWidth, getScrollable, getScrollAnimationSpeed, getScrollDimension, getScrollOpacity, getScrollOpacityChangeSpeed, getScrollX, getScrollY, getSelectCommandText, getSelectedRect, getSelectedStyle, getStyle, getTabIndex, getTensileLength, getTextSelectionSupport, getTooltip, getUIID, getUnselectedStyle, getVisibleBounds, getVisibleBounds, getWidth, getX, getY, growShrink, handlesInput, hasFixedPreferredSize, hasFocus, hideNativeOverlay, initCustomStyle, initDisabledStyle, initPressedStyle, initSelectedStyle, initUnselectedStyle, installDefaultPainter, isAlwaysTensile, isBlockLead, isCellRenderer, isChildOf, isDragActivated, isDragAndDropOperation, isDraggable, isDragRegion, isDropTarget, isEditable, isEditing, isFlatten, isFocusable, isGrabsPointerEvents, isHidden, isHidden, isHideInLandscape, isHideInPortrait, isIgnorePointerEvents, isInClippingRegion, isInitialized, isOpaque, isOwnedBy, isPinchBlocksDragAndDrop, isRippleEffect, isRTL, isScrollable, isScrollVisible, isSetCursorSupported, isSmoothScrolling, isSnapToGrid, isStickyDrag, isTactileTouch, isTactileTouch, isTensileDragEnabled, isTraversable, isVisible, keyRepeated, laidOut, longKeyPress, longPointerPress, onScrollX, onScrollY, onSetFocusable, paintBackground, paintBackgrounds, paintBorder, paintBorderBackground, paintComponent, paintComponent, paintIntersectingComponentsAbove, paintLock, paintLockRelease, paintRippleOverlay, paintScrollbars, paintScrollbarX, paintScrollbarY, paintShadows, parsePreferredSize, pinch, pinch, pinchReleased, pointerDragged, pointerDragged, pointerHover, pointerHoverPressed, pointerHoverReleased, pointerPressed, pointerReleased, pointerReleased, putClientProperty, refreshTheme, refreshTheme, remove, removeDragFinishedListener, removeDragOverListener, removeDropListener, removeFocusListener, removeLongPressListener, removePointerDraggedListener, removePointerPressedListener, removePointerReleasedListener, removeScrollListener, removeStateChangeListener, repaint, repaint, requestFocus, resetFocusable, respondsToPointerEvents, scrollRectToVisible, scrollRectToVisible, setAccessibilityText, setAlwaysTensile, setBlockLead, setBoundPropertyValue, setCloudBoundProperty, setCloudDestinationProperty, setComponentState, setCursor, setDefaultDragTransparency, setDirtyRegion, setDisabledStyle, setDraggable, setDragTransparency, setDropTarget, setEditingDelegate, setFlatten, setFocus, setFocusable, setGrabsPointerEvents, setHandlesInput, setHeight, setHidden, setHidden, setHideInLandscape, setHideInPortrait, setIgnorePointerEvents, setInitialized, setInlineAllStyles, setInlineDisabledStyles, setInlinePressedStyles, setInlineSelectedStyles, setInlineStylesTheme, setInlineUnselectedStyles, setIsScrollVisible, setLabelForComponent, setName, setNextFocusDown, setNextFocusLeft, setNextFocusRight, setNextFocusUp, setOpaque, setOwner, setPinchBlocksDragAndDrop, setPreferredH, setPreferredSize, setPreferredSizeStr, setPreferredTabIndex, setPreferredW, setPressedStyle, setRippleEffect, setRTL, setSameHeight, setSameSize, setSameWidth, setScrollAnimationSpeed, setScrollOpacityChangeSpeed, setScrollSize, setScrollVisible, setScrollX, setScrollY, setSelectCommandText, setSelectedStyle, setSize, setSmoothScrolling, setSnapToGrid, setTabIndex, setTactileTouch, setTensileDragEnabled, setTensileLength, setTooltip, setTraversable, setUIID, setUIID, setUIIDFinal, setUnselectedStyle, setVisible, setWidth, setX, setY, shouldBlockSideSwipe, shouldBlockSideSwipeLeft, shouldBlockSideSwipeRight, shouldRenderComponentSelection, showNativeOverlay, startEditingAsync, stopEditing, stripMarginAndPadding, styleChanged, toImage, toString, unbindProperty, updateNativeOverlay, visibleBoundsContains`

  ### Methods inherited from class Object

  `clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## 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:
      - Constant Field Values

  - ### INNER_BORDERS_ROWS

    public static final int INNER_BORDERS_ROWS
    Constant denoting that only inner borders rows should be drawn
    See Also:
      - Constant Field Values

  - ### INNER_BORDERS_COLS

    public static final int INNER_BORDERS_COLS
    Constant denoting that only inner borders columns should be drawn
    See Also:
      - Constant Field Values

  - ### INNER_BORDERS_ALL

    public static final int INNER_BORDERS_ALL
    Constant denoting that inner borders should be drawn fully
    See Also:
      - Constant Field Values

- ## 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