|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjava.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JTable
org.jdesktop.swingx.JXTable
public class JXTable
A JXTable is a JTable with built-in support for row sorting, filtering, and
highlighting, column visibility and a special popup control on the column
header for quick access to table configuration. You can instantiate a JXTable
just as you would a JTable, using a TableModel. However, a JXTable
automatically wraps TableColumns inside a TableColumnExt instance.
TableColumnExt supports visibility, sortability, and prototype values for
column sizing, none of which are available in TableColumn. You can retrieve
the TableColumnExt instance for a column using getColumnExt(Object)
or getColumnExt(int colnumber)
.
A JXTable is, by default, sortable by clicking on column headers; each
subsequent click on a header reverses the order of the sort, and a sort arrow
icon is automatically drawn on the header. Sorting can be disabled using
setSortable(boolean)
. Sorting on columns is handled by a Sorter
instance which contains a Comparator used to compare values in two rows of a
column. You can replace the Comparator for a given column by using
getColumnExt("column").setComparator(customComparator)
Columns can be hidden or shown by setting the visible property on the
TableColumnExt using TableColumnExt.setVisible(boolean)
. Columns can
also be shown or hidden from the column control popup.
The column control popup is triggered by an icon drawn to the far right of
the column headers, above the table's scrollbar (when installed in a
JScrollPane). The popup allows the user to select which columns should be
shown or hidden, as well as to pack columns and turn on horizontal scrolling.
To show or hide the column control, use the
setColumnControlVisible(boolean show)
method.
Rows can be filtered from a JXTable using a Filter class and a
FilterPipeline. One assigns a FilterPipeline to the table using
setFilters(FilterPipeline)
. Filtering hides, but does not delete or
permanently remove rows from a JXTable. Filters are used to provide sorting
to the table--rows are not removed, but the table is made to believe rows in
the model are in a sorted order.
One can automatically highlight certain rows in a JXTable by attaching
Highlighters in the setHighlighters(HighlighterPipeline)
method. An
example would be a Highlighter that colors alternate rows in the table for
readability; AlternateRowHighlighter does this. Again, like Filters,
Highlighters can be chained together in a HighlighterPipeline to achieve more
interesting effects.
You can resize all columns, selected columns, or a single column using the
methods like packAll()
. Packing combines several other aspects of a
JXTable. If horizontal scrolling is enabled using
setHorizontalScrollEnabled(boolean)
, then the scrollpane will allow
the table to scroll right-left, and columns will be sized to their preferred
size. To control the preferred sizing of a column, you can provide a
prototype value for the column in the TableColumnExt using
TableColumnExt.setPrototypeValue(Object)
. The prototype is used as
an indicator of the preferred size of the column. This can be useful if some
data in a given column is very long, but where the resize algorithm would
normally not pick this up.
JXTable guarantees to delegate creation and configuration of
TableColumnExt to a ColumnFactory. By default, the application-wide
shared ColumnFactory is used.
You can install a custom ColumnFactory, either application-wide by ColumnFactory.setInstance(ColumnFactory)
or per table instance by setColumnFactory(ColumnFactory)
.
Last, you can also provide searches on a JXTable using the Searchable property.
Keys/Actions registered with this component:
HORIZONTALSCROLL_ACTION_COMMAND
- toggle the horizontal scrollbar
PACKSELECTED_ACTION_COMMAND
- resize the selected column to fit the widest
cell content PACKALL_ACTION_COMMAND
- resize all columns to fit the widest
cell content in each column
Key bindings.
Client Properties.
MATCH_HIGHLIGHTER
- set to Boolean.TRUE to use a SearchHighlighter to mark a cell as matching.
Nested Class Summary | |
---|---|
static class |
JXTable.BooleanEditor
|
static class |
JXTable.BooleanRenderer
|
static class |
JXTable.DateRenderer
|
static class |
JXTable.DoubleRenderer
|
static class |
JXTable.GenericEditor
Default Editors |
static class |
JXTable.IconRenderer
|
static class |
JXTable.NumberEditor
|
static class |
JXTable.NumberRenderer
|
protected static class |
JXTable.TableAdapter
|
static class |
JXTable.TableRolloverController<T extends JTable>
listens to rollover properties. |
class |
JXTable.TableSearchable
|
Nested classes/interfaces inherited from class javax.swing.JTable |
---|
JTable.AccessibleJTable, JTable.PrintMode |
Nested classes/interfaces inherited from class javax.swing.JComponent |
---|
JComponent.AccessibleJComponent |
Nested classes/interfaces inherited from class java.awt.Container |
---|
Container.AccessibleAWTContainer |
Nested classes/interfaces inherited from class java.awt.Component |
---|
Component.AccessibleAWTComponent, Component.BltBufferStrategy, Component.FlipBufferStrategy |
Field Summary | |
---|---|
protected ComponentAdapter |
dataAdapter
The ComponentAdapter for model data access. |
protected FilterPipeline |
filters
The FilterPipeline for the table. |
protected HighlighterPipeline |
highlighters
The HighlighterPipeline for the table. |
static String |
HORIZONTALSCROLL_ACTION_COMMAND
Constant string for horizontal scroll actions, used in JXTable's Action Map. |
protected boolean |
isXTableRowHeightSet
Flag to distinguish internal settings of rowheight from client code settings. |
static String |
MATCH_HIGHLIGHTER
key for client property to use SearchHighlighter as match marker. |
static String |
PACKALL_ACTION_COMMAND
Constant string for packing all columns, used in JXTable's Action Map. |
static String |
PACKSELECTED_ACTION_COMMAND
Constant string for packing selected columns, used in JXTable's Action Map. |
protected Highlighter |
resetDefaultTableCellRendererHighlighter
The Highlighter used to hack around DefaultTableCellRenderer's color memory. |
protected Searchable |
searchable
property to control search behaviour. |
static String |
UIPREFIX
The prefix marker to find component related properties in the resourcebundle. |
Fields inherited from class javax.swing.JComponent |
---|
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
Fields inherited from class java.awt.Component |
---|
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
Fields inherited from interface java.awt.image.ImageObserver |
---|
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
Constructor Summary | |
---|---|
JXTable()
Instantiates a JXTable with a default table model, no data. |
|
JXTable(int numRows,
int numColumns)
Instantiates a JXTable for a given number of columns and rows. |
|
JXTable(Object[][] rowData,
Object[] columnNames)
Instantiates a JXTable with data in a array or rows and column names. |
|
JXTable(TableModel dm)
Instantiates a JXTable with a specific table model. |
|
JXTable(TableModel dm,
TableColumnModel cm)
Instantiates a JXTable with a specific table model. |
|
JXTable(TableModel dm,
TableColumnModel cm,
ListSelectionModel sm)
Instantiates a JXTable with a specific table model, column model, and selection model. |
|
JXTable(Vector rowData,
Vector columnNames)
Instantiates a JXTable with data in a vector or rows and column names. |
Method Summary | |
---|---|
void |
addHighlighter(Highlighter highlighter)
Adds a Highlighter. |
protected void |
adjustComponentOrientation(Component stamp)
Adjusts the Component 's orientation to this
JXTable 's CO if appropriate. |
protected void |
adminSetRowHeight(int rowHeight)
Sets the rowHeight for all rows to the given value. |
void |
columnMarginChanged(ChangeEvent e)
Invoked when a column is moved due to a margin change. |
void |
columnRemoved(TableColumnModelEvent e)
overridden to remove the interactive sorter if the sorted column is no longer contained in the ColumnModel. |
void |
columnSelectionChanged(ListSelectionEvent e)
Notifies the table that a new column has been selected. |
protected void |
configureColumnControl()
Configures the upper trailing corner of an enclosing JScrollPane . |
protected void |
configureEnclosingScrollPane()
Configures the enclosing JScrollPane . |
int |
convertRowIndexToModel(int row)
Convert row index from view coordinates to model coordinates accounting for the presence of sorters and filters. |
int |
convertRowIndexToView(int row)
Convert row index from model coordinates to view coordinates accounting for the presence of sorters and filters. |
protected JComponent |
createDefaultColumnControl()
Creates the default column control used by this table. |
protected TableColumnModel |
createDefaultColumnModel()
Returns the default column model object, which is a DefaultTableColumnModel . |
void |
createDefaultColumnsFromModel()
Creates, configures and adds default TableColumn s for
columns in this table's TableModel . |
protected void |
createDefaultEditors()
Creates default cell editors for objects, numbers, and boolean values. |
protected void |
createDefaultRenderers()
Creates default cell renderers for objects, numbers, doubles, dates, booleans, icons, and links. |
protected JTableHeader |
createDefaultTableHeader()
Returns the default table header object, which is a JTableHeader . |
protected ChangeListener |
createHighlighterChangeListener()
Creates and returns the ChangeListener observing Highlighters. |
protected JXTable.TableRolloverController |
createLinkController()
|
protected PipelineListener |
createPipelineListener()
creates the listener for changes in filters. |
protected RolloverProducer |
createRolloverProducer()
creates and returns the RolloverProducer to use. |
void |
doLayout()
overridden to support auto-expand to parent's width if enabled and necessary. |
TableCellRenderer |
getCellRenderer(int row,
int column)
Returns an appropriate renderer for the cell specified by this row and column. |
TableColumn |
getColumn(int viewColumnIndex)
Returns the TableColumn at view position
columnIndex . |
JComponent |
getColumnControl()
Returns the component used as column control. |
int |
getColumnCount(boolean includeHidden)
Returns the number of contained columns. |
TableColumnExt |
getColumnExt(int viewColumnIndex)
Returns the TableColumnExt at view position
columnIndex . |
TableColumnExt |
getColumnExt(Object identifier)
Returns the first TableColumnExt with the given
identifier . |
ColumnFactory |
getColumnFactory()
Returns the ColumnFactory. |
int |
getColumnMargin()
Returns the margin between columns. |
List<TableColumn> |
getColumns()
Returns a List of visible TableColumn s. |
List<TableColumn> |
getColumns(boolean includeHidden)
Returns a List of contained TableColumn s. |
protected ComponentAdapter |
getComponentAdapter()
|
protected ComponentAdapter |
getComponentAdapter(int row,
int column)
Convenience to access a configured ComponentAdapter. |
boolean |
getFillsViewportHeight()
Returns the flag to control JXTable scrollableTracksViewportHeight property. |
protected PipelineListener |
getFilterPipelineListener()
returns the listener for changes in filters. |
FilterPipeline |
getFilters()
Returns the FilterPipeline for the table. |
protected ChangeListener |
getHighlighterChangeListener()
Returns the ChangeListener to use with highlighters. |
HighlighterPipeline |
getHighlighters()
Returns the HighlighterPipeline assigned to the table, null if none. |
protected JXTable.TableRolloverController |
getLinkController()
|
TableCellRenderer |
getNewDefaultRenderer(Class columnClass)
Returns a new instance of the default renderer for the specified class. |
Dimension |
getPreferredScrollableViewportSize()
Returns the preferred size of the viewport for this table. |
int |
getRowCount()
Returns the row count in the table; if filters are applied, this is the filtered row count. |
protected SizeSequenceMapper |
getRowModelMapper()
Returns the mapper used synch individual rowHeights in view/model coordinates. |
boolean |
getScrollableTracksViewportHeight()
Overridden to control the tracksHeight property depending on fillsViewportHeight and relative size to containing parent (viewport?). |
boolean |
getScrollableTracksViewportWidth()
overridden to support auto-expand to parent's width if enabled and necessary. |
Searchable |
getSearchable()
|
SelectionMapper |
getSelectionMapper()
|
int |
getSelectionMode()
Returns the selection mode used by this table's selection model. |
protected SortController |
getSortController()
returns the currently active SortController. |
TableColumn |
getSortedColumn()
|
SortOrder |
getSortOrder(int columnIndex)
Returns the SortOrder of the given column. |
SortOrder |
getSortOrder(Object identifier)
Returns the SortOrder of the given column. |
Object |
getValueAt(int row,
int column)
Overridden to account for row index mapping. |
int |
getVisibleRowCount()
Returns the preferred number of rows to show in a JScrollPane . |
protected void |
init()
Initializes the table for use. |
protected void |
initializeColumnPreferredWidth(TableColumn column)
Initialize the preferredWidth of the specified column based on the column's prototypeValue property. |
boolean |
isAutoStartEditOnKeyStroke()
Returns the autoStartsEdit property. |
boolean |
isCellEditable(int row,
int column)
Returns true if the cell at row and column
is editable. |
boolean |
isColumnControlVisible()
Returns the column control visible property. |
protected boolean |
isDataChanged(TableModelEvent e)
Convenience method to detect dataChanged event. |
boolean |
isEditable()
Returns the editable property of the JXTable as a whole. |
boolean |
isHierarchical(int column)
|
protected boolean |
isHorizontalScrollEnabled()
Returns the current setting for horizontal scrolling. |
boolean |
isRolloverEnabled()
Returns the rolloverEnabled property. |
boolean |
isRowHeightEnabled()
Returns a boolean to indicate whether individual row height is enabled. |
boolean |
isSortable()
Returns the table's sortable property. |
protected boolean |
isSortable(int columnIndex)
Decides if the column at columnIndex can be interactively sorted. |
protected boolean |
isSortable(Object identifier)
Decides if the column with identifier can be interactively sorted. |
protected boolean |
isStructureChanged(TableModelEvent e)
Convenience method to detect a structureChanged event type. |
boolean |
isTerminateEditOnFocusLost()
Returns the property which determines the edit termination behaviour on focus lost. |
protected boolean |
isUpdate(TableModelEvent e)
Convenience method to detect update event. |
void |
packAll()
This resizes all columns to fit the viewport; if horizontal scrolling is enabled, all columns will get their preferred width. |
void |
packColumn(int column,
int margin)
Packs an indivudal column in the table. |
void |
packColumn(int column,
int margin,
int max)
Packs an indivual column in the table to less than or equal to the maximum witdth. |
void |
packSelected()
This resizes selected columns to fit the viewport; if horizontal scrolling is enabled, selected columns will get their preferred width. |
void |
packTable(int margin)
Packs all the columns to their optimal size. |
Component |
prepareEditor(TableCellEditor editor,
int row,
int column)
Prepares the editor by querying the data model for the value and selection state of the cell at row , column . |
Component |
prepareRenderer(TableCellRenderer renderer,
int row,
int column)
Returns the decorated Component used as a stamp to render
the specified cell. |
void |
removeHighlighter(Highlighter highlighter)
Removes the Highlighter. |
protected void |
resetDefaultTableCellRendererColors(Component renderer,
int row,
int column)
Method to hack around #258-swingx: apply a specialized Highlighter
to force reset the color "memory" of DefaultTableCellRenderer . |
void |
resetSortOrder()
Resets sorting of all columns. |
int |
rowAtPoint(Point point)
Returns the index of the row that point lies in,
or -1 if the result is not in the range
[0, getRowCount() -1]. |
void |
scrollCellToVisible(int row,
int column)
Scrolls to make the cell at row and column visible. |
void |
scrollColumnToVisible(int column)
Scrolls horizontally to make the given column visible. |
void |
scrollRowToVisible(int row)
Scrolls vertically to make the given row visible. |
void |
setAutoResizeMode(int mode)
overridden to update the show horizontal scrollbar action's selected state. |
void |
setAutoStartEditOnKeyStroke(boolean autoStart)
Sets the autoStartsEdit property. |
void |
setColumnControl(JComponent columnControl)
Sets the component used as column control. |
void |
setColumnControlVisible(boolean visible)
Sets the column control visible property. |
void |
setColumnFactory(ColumnFactory columnFactory)
Sets the ColumnFactory to use for column creation and configuration. |
void |
setColumnMargin(int value)
Sets the margin between columns. |
void |
setColumnSequence(Object[] identifiers)
Reorders the columns in the sequence given array. |
void |
setComponentOrientation(ComponentOrientation o)
Sets the language-sensitive orientation that is to be used to order the elements or text within this component. |
void |
setDefaultMargins(boolean showHorizontalLines,
boolean showVerticalLines)
Convenience to set both grid line visibility and default margin for horizontal/vertical lines. |
void |
setEditable(boolean editable)
Sets the editable property. |
void |
setFillsViewportHeight(boolean fillsViewportHeight)
Set flag to control JXTable's scrollableTracksViewportHeight property. |
void |
setFilters(FilterPipeline pipeline)
Sets the FilterPipeline for filtering table rows, maybe null to remove all previously applied filters. |
void |
setHighlighters(HighlighterPipeline pipeline)
Assigns a HighlighterPipeline to the table, maybe null to remove all Highlighters. |
void |
setHorizontalScrollEnabled(boolean enabled)
Controls horizontal scrolling in the viewport, and works in coordination with column sizing. |
void |
setModel(TableModel newModel)
Sets the data model for this table to newModel and registers
with it for listener notifications from the new data model. |
void |
setRolloverEnabled(boolean rolloverEnabled)
Property to enable/disable rollover support. |
void |
setRowHeight(int rowHeight)
Sets the height, in pixels, of all cells to rowHeight ,
revalidates, and repaints. |
void |
setRowHeight(int row,
int rowHeight)
Sets the height for row to rowHeight ,
revalidates, and repaints. |
void |
setRowHeightEnabled(boolean enabled)
Sets enablement of individual rowHeight support. |
void |
setSearchable(Searchable searchable)
sets the Searchable for this editor. |
void |
setSelectionModel(ListSelectionModel newModel)
Overridden to update selectionMapper |
void |
setSortable(boolean sortable)
Sets "sortable" property indicating whether or not this table supports sortable columns. |
void |
setSortOrder(int columnIndex,
SortOrder sortOrder)
Sorts the table by the given column using SortOrder. |
void |
setSortOrder(Object identifier,
SortOrder sortOrder)
Sorts the table by the given column using the SortOrder. |
void |
setTerminateEditOnFocusLost(boolean terminate)
Sets the property to determine whether an ongoing edit should be terminated if the focus is moved to somewhere outside of the table. |
void |
setValueAt(Object aValue,
int row,
int column)
Overridden to account for row index mapping. |
void |
setVisibleRowCount(int visibleRowCount)
Sets the preferred number of rows to show in a JScrollPane . |
void |
tableChanged(TableModelEvent e)
additionally updates filtered state. |
void |
toggleSortOrder(int columnIndex)
Toggles the sort order of the column at columnIndex. |
void |
toggleSortOrder(Object identifier)
Toggles the sort order of the column with identifier. |
protected void |
updateHighlighters()
Updates highlighter after updateUI changes. |
protected void |
updateHorizontalAction()
synch selected state of horizontal scroll en/disabling action with horizont scroll enabled property. |
protected void |
updateOnFilterContentChanged()
method called on change notification from filterpipeline. |
protected void |
updateRowHeightUI(boolean respectRowSetFlag)
Auto-adjusts rowHeight to something more pleasing then the default. |
void |
updateUI()
Notification from the UIManager that the L&F has changed. |
protected void |
updateViewSizeSequence()
Called if individual row height mapping need to be updated. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final String HORIZONTALSCROLL_ACTION_COMMAND
public static final String PACKALL_ACTION_COMMAND
public static final String PACKSELECTED_ACTION_COMMAND
public static final String UIPREFIX
public static final String MATCH_HIGHLIGHTER
protected FilterPipeline filters
protected HighlighterPipeline highlighters
protected Highlighter resetDefaultTableCellRendererHighlighter
protected ComponentAdapter dataAdapter
protected boolean isXTableRowHeightSet
adminSetRowHeight(int)
protected Searchable searchable
Constructor Detail |
---|
public JXTable()
public JXTable(TableModel dm)
dm
- The model to use.public JXTable(TableModel dm,
TableColumnModel cm)
dm
- The model to use.public JXTable(TableModel dm,
TableColumnModel cm,
ListSelectionModel sm)
dm
- The table model to use.cm
- The colomn model to use.sm
- The list selection model to use.public JXTable(int numRows,
int numColumns)
numRows
- Count of rows to accomodate.numColumns
- Count of columns to accomodate.public JXTable(Vector rowData,
Vector columnNames)
rowData
- Row data, as a Vector of Objects.columnNames
- Column names, as a Vector of Strings.public JXTable(Object[][] rowData,
Object[] columnNames)
rowData
- Row data, as a two-dimensional Array of Objects (by row, for
column).columnNames
- Column names, as a Array of Strings.Method Detail |
---|
protected void init()
public void setRolloverEnabled(boolean rolloverEnabled)
rolloverEnabled
- protected JXTable.TableRolloverController getLinkController()
protected JXTable.TableRolloverController createLinkController()
protected RolloverProducer createRolloverProducer()
RolloverProducer
public boolean isRolloverEnabled()
true
if rollover is enabledpublic boolean isColumnControlVisible()
setColumnControlVisible(boolean)
, setColumnControl(JComponent)
public void setColumnControlVisible(boolean visible)
JXTable
is contained in a JScrollPane
, the
table adds the column control to the trailing corner of the scroll pane.
Note: if the table is not inside a JScrollPane
the column
control is not shown even if this returns true. In this case it's the
responsibility of the client code to actually show it.
The default value is false
.
visible
- boolean to indicate if the column control should be shown#getColumnControlVisible()
, setColumnControl(JComponent)
public JComponent getColumnControl()
null
.
setColumnControl(JComponent)
, createDefaultColumnControl()
public void setColumnControl(JComponent columnControl)
JScrollPane
if appropriate. Passing a null
parameter restores the column control to the default.
The component is automatically visible only if the
columnControlVisible
property is true
and
the table is contained in a JScrollPane
.
NOTE: from the table's perspective, the column control is simply a
JComponent
to add to and keep in the trailing corner of
the scrollpane. (if any). It's up the concrete control to configure
itself from and keep synchronized to the columns' states.
columnControl
- the JComponent
to use as
columnControl.getColumnControl()
, createDefaultColumnControl()
, setColumnControlVisible(boolean)
protected JComponent createDefaultColumnControl()
ColumnControlButton
configured
with default ColumnControlIcon
.
setColumnControl(JComponent)
, ColumnControlButton
, ColumnControlIcon
public void setComponentOrientation(ComponentOrientation o)
Overridden to work around a core bug: JScrollPane
can't cope with
corners when changing component orientation at runtime.
This method explicitly re-configures the column control.
setComponentOrientation
in class Component
o
- the ComponentOrientation for this table.Component.setComponentOrientation(ComponentOrientation)
protected void configureEnclosingScrollPane()
JScrollPane
.
Overridden to addionally configure the upper trailing corner with the column control.
configureEnclosingScrollPane
in class JTable
configureColumnControl()
protected void configureColumnControl()
JScrollPane
.
Adds/removes the ColumnControl
depending on the columnControlVisible
property.
setColumnControlVisible(boolean)
, setColumnControl(JComponent)
public void packAll()
public void packSelected()
public void columnSelectionChanged(ListSelectionEvent e)
columnSelectionChanged
in interface TableColumnModelListener
columnSelectionChanged
in class JTable
e
- the event receivedTableColumnModelListener
public void setHorizontalScrollEnabled(boolean enabled)
PENDING: add a "real" mode? Problematic because there are several places in core which check for #AUTO_RESIZE_OFF, can't use different value without unwanted side-effects. The current solution with tagging the #AUTO_RESIZE_OFF by a boolean flag #intelliMode is brittle - need to be very careful to turn off again ... Another problem is to keep the horizontalScrollEnabled toggling action in synch with this property. Yet another problem is the change notification: currently this is _not_ a bound property.
enabled
- a boolean indicating whether enhanced auto resize off is
enabled.protected boolean isHorizontalScrollEnabled()
public void setAutoResizeMode(int mode)
setAutoResizeMode
in class JTable
mode
- One of 5 legal values:
AUTO_RESIZE_OFF,
AUTO_RESIZE_NEXT_COLUMN,
AUTO_RESIZE_SUBSEQUENT_COLUMNS,
AUTO_RESIZE_LAST_COLUMN,
AUTO_RESIZE_ALL_COLUMNSJTable.getAutoResizeMode()
, JTable.doLayout()
protected void updateHorizontalAction()
public boolean getScrollableTracksViewportWidth()
getScrollableTracksViewportWidth
in interface Scrollable
getScrollableTracksViewportWidth
in class JTable
autoResizeMode
is set
to AUTO_RESIZE_OFF
, otherwise returns trueScrollable.getScrollableTracksViewportWidth()
public void doLayout()
doLayout
in class JTable
LayoutManager.layoutContainer(java.awt.Container)
, Container.setLayout(java.awt.LayoutManager)
, Container.validate()
public void columnMarginChanged(ChangeEvent e)
javax.swing.JTable
Application code will not use these methods explicitly, they are used internally by JTable.
columnMarginChanged
in interface TableColumnModelListener
columnMarginChanged
in class JTable
e
- the event receivedTableColumnModelListener
public void setFillsViewportHeight(boolean fillsViewportHeight)
public boolean getFillsViewportHeight()
public boolean getScrollableTracksViewportHeight()
getScrollableTracksViewportHeight
in interface Scrollable
getScrollableTracksViewportHeight
in class JTable
Scrollable.getScrollableTracksViewportHeight()
public int getRowCount()
getRowCount
in class JTable
JTable.getColumnCount()
public boolean isHierarchical(int column)
public int convertRowIndexToModel(int row)
row
- row index in view coordinates
public int convertRowIndexToView(int row)
row
- row index in model coordinates
public Object getValueAt(int row,
int column)
row
and column
.
Note: The column is specified in the table view's display
order, and not in the TableModel
's column
order. This is an important distinction because as the
user rearranges the columns in the table,
the column at a given index in the view will change.
Meanwhile the user's actions never affect the model's
column ordering.
getValueAt
in class JTable
row
- the row whose value is to be queriedcolumn
- the column whose value is to be queried
public void setValueAt(Object aValue,
int row,
int column)
!isCellEditable(row, column)
.
Sets the value for the cell in the table model at row
and column
.
Note: The column is specified in the table view's display
order, and not in the TableModel
's column
order. This is an important distinction because as the
user rearranges the columns in the table,
the column at a given index in the view will change.
Meanwhile the user's actions never affect the model's
column ordering.
aValue
is the new value.
setValueAt
in class JTable
aValue
- the new valuerow
- the row of the cell to be changedcolumn
- the column of the cell to be changedisCellEditable(int, int)
public boolean isCellEditable(int row,
int column)
row
and column
is editable. Otherwise, invoking setValueAt
on the cell
will have no effect.
Overridden to account for row index mapping and to support a layered editability control:
JXTable.isEditable()
TableColumnExt.isEditable()
TableModel.isCellEditable()
isCellEditable
in class JTable
row
- the row index in view coordinatescolumn
- the column index in view coordinates
setValueAt(Object, int, int)
, isEditable()
, TableColumnExt.isEditable()
, TableModel.isCellEditable(int, int)
public void setSelectionModel(ListSelectionModel newModel)
setSelectionModel
in class JTable
newModel
- the new selection modelJTable.getSelectionModel()
public void setModel(TableModel newModel)
newModel
and registers
with it for listener notifications from the new data model.
setModel
in class JTable
newModel
- the new data source for this tableJTable.getModel()
public void tableChanged(TableModelEvent e)
TableModel
generates
a TableModelEvent
.
The TableModelEvent
should be constructed in the
coordinate system of the model; the appropriate mapping to the
view coordinate system is performed by this JTable
when it receives the event.
Application code will not use these methods explicitly, they
are used internally by JTable
.
Note that as of 1.3, this method clears the selection, if any.
tableChanged
in interface TableModelListener
tableChanged
in class JTable
protected boolean isDataChanged(TableModelEvent e)
e
- the event to examine.
protected boolean isUpdate(TableModelEvent e)
e
- the event to examine.
protected boolean isStructureChanged(TableModelEvent e)
e
- the event to examine.
protected void updateViewSizeSequence()
public SelectionMapper getSelectionMapper()
SelectionMapper
public FilterPipeline getFilters()
public void setFilters(FilterPipeline pipeline)
pipeline
- the FilterPipeline
to use, null removes
all filters.protected PipelineListener getFilterPipelineListener()
protected PipelineListener createPipelineListener()
protected void updateOnFilterContentChanged()
public void setSortable(boolean sortable)
sortable
is
true
then sorting will be enabled on all columns whose
sortable
property is true
. If
sortable
is false
then sorting will be
disabled for all columns, regardless of each column's individual
sorting
property. The default is true
.
sortable
- boolean indicating whether or not this table supports sortable
columnsTableColumnExt.isSortable()
public boolean isSortable()
public void resetSortOrder()
public void toggleSortOrder(int columnIndex)
The exact behaviour is defined by the SortController's toggleSortOrder implementation. Typically a unsorted column is sorted in ascending order, a sorted column's order is reversed.
Respects the tableColumnExt's sortable and comparator properties: routes the column's comparator to the SortController and does nothing if !isSortable(column).
PRE: 0 <= columnIndex < getColumnCount()
columnIndex
- the columnIndex in view coordinates.protected boolean isSortable(int columnIndex)
Here: true if both this table and the column sortable property is enabled, false otherwise.
columnIndex
- column in view coordinates
public void setSortOrder(int columnIndex,
SortOrder sortOrder)
PRE: 0 <= columnIndex < getColumnCount()
columnIndex
- the column index in view coordinates.sortOrder
- the sort order to use. If null or SortOrder.UNSORTED, this method has the same effect as resetSortOrder();public SortOrder getSortOrder(int columnIndex)
columnIndex
- the column index in view coordinates.
public void toggleSortOrder(Object identifier)
The exact behaviour is defined by the SortController's toggleSortOrder implementation. Typically a unsorted column is sorted in ascending order, a sorted column's order is reversed.
Respects the tableColumnExt's sortable and comparator properties: routes the column's comparator to the SortController and does nothing if !isSortable(column).
PENDING: JW - define the behaviour if the identifier is not found. This can happen if either there's no column at all with the identifier or if there's no column of type TableColumnExt. Currently does nothing, that is does not change sort state.
identifier
- the column identifier.public void setSortOrder(Object identifier,
SortOrder sortOrder)
PENDING: JW - define the behaviour if the identifier is not found. This can happen if either there's no column at all with the identifier or if there's no column of type TableColumnExt. Currently does nothing, that is does not change sort state.
identifier
- the column's identifier.sortOrder
- the sort order to use. If null or SortOrder.UNSORTED, this method has the same effect as resetSortOrder();public SortOrder getSortOrder(Object identifier)
identifier
- the column's identifier.
protected boolean isSortable(Object identifier)
Here: true if both this table and the column sortable property is enabled, false otherwise.
identifier
- the column's identifier
protected SortController getSortController()
SortController
may be nullpublic TableColumn getSortedColumn()
public void columnRemoved(TableColumnModelEvent e)
columnRemoved
in interface TableColumnModelListener
columnRemoved
in class JTable
TableColumnModelListener
public TableColumn getColumn(int viewColumnIndex)
TableColumn
at view position
columnIndex
. The return value is not null
.
NOTE: This delegate method is added to protect developer's from
unexpected exceptions in jdk1.5+. Super does not expose the
TableColumn
access by index which may lead to unexpected
IllegalArgumentException
: If client code assumes the
delegate method is available, autoboxing will convert the given int to an
Integer which will call the getColumn(Object) method.
viewColumnIndex
- index of the column with the object in question
TableColumn
object that matches the column
index
ArrayIndexOutOfBoundsException
- if viewColumnIndex out of allowed
range.JTable.getColumn(Object)
, getColumnExt(int)
, TableColumnModel.getColumn(int)
public List<TableColumn> getColumns()
List
of visible TableColumn
s.
List
of visible columns.getColumns(boolean)
public int getColumnMargin()
Convenience to expose column model properties through
JXTable
api.
setColumnMargin(int)
, TableColumnModel.getColumnMargin()
public void setColumnMargin(int value)
JXTable
api.
value
- margin between columns; must be greater than or equal to
zero.getColumnMargin()
, TableColumnModel#setColumnMargin()
public int getColumnCount(boolean includeHidden)
includeHidden
is true or
false, respectively. If false, this method returns the same count as
getColumnCount()
. If the columnModel is not of type
TableColumnModelExt
, the parameter value has no effect.
includeHidden
- a boolean to indicate whether invisible columns
should be included
JTable.getColumnCount()
, TableColumnModelExt.getColumnCount(boolean)
public List<TableColumn> getColumns(boolean includeHidden)
List
of contained TableColumn
s.
Includes or excludes invisible columns, depending on whether the
includeHidden
is true or false, respectively. If false, an
Iterator
over the List is equivalent to the
Enumeration
returned by getColumns()
. If the columnModel is not of type
TableColumnModelExt
, the parameter value has no effect.
NOTE: the order of columns in the List depends on whether or not the invisible columns are included, in the former case it's the insertion order in the latter it's the current order of the visible columns.
includeHidden
- a boolean to indicate whether invisible columns
should be included
List
of contained columns.getColumns()
, TableColumnModelExt.getColumns(boolean)
public TableColumnExt getColumnExt(Object identifier)
TableColumnExt
with the given
identifier
. The return value is null if there is no contained
column with identifier or if the column with identifier
is not of type TableColumnExt
. The returned column
may be visible or hidden.
identifier
- the object used as column identifier
TableColumnExt
with the given identifier or
null if none is foundgetColumnExt(int)
, JTable.getColumn(Object)
, TableColumnModelExt.getColumnExt(Object)
public TableColumnExt getColumnExt(int viewColumnIndex)
TableColumnExt
at view position
columnIndex
. The return value is null, if the column at
position columnIndex
is not of type
TableColumnExt
. The returned column is visible.
viewColumnIndex
- the index of the column desired
TableColumnExt
object that matches the column
index
ArrayIndexOutOfBoundsException
- if columnIndex out of allowed
range, that is if
(columnIndex < 0) || (columnIndex >= getColumnCount())
.getColumnExt(Object)
, getColumn(int)
, TableColumnModelExt.getColumnExt(int)
public void setColumnSequence(Object[] identifiers)
identifiers
- array of logical column namesgetColumns(boolean)
public void createDefaultColumnsFromModel()
TableColumn
s for
columns in this table's TableModel
. Removes all currently
contained TableColumn
s. The exact type and configuration
of the columns is controlled by the ColumnFactory
.
createDefaultColumnsFromModel
in class JTable
ColumnFactory
public ColumnFactory getColumnFactory()
setColumnFactory(ColumnFactory)
, ColumnFactory
public void setColumnFactory(ColumnFactory columnFactory)
ColumnFactory
to use for column creation and configuration. The default value is the shared application
ColumnFactory.
columnFactory
- the factory to use, null
indicates
to use the shared application factory.getColumnFactory()
, ColumnFactory
public void packTable(int margin)
margin
- the margin to apply to each column.packColumn(int, int)
, packColumn(int, int, int)
public void packColumn(int column,
int margin)
column
- The Column index to pack in View Coordinatesmargin
- The Margin to apply to the column width.packColumn(int, int, int)
, packTable(int)
public void packColumn(int column,
int margin,
int max)
column
- the column index to pack in view coordinatesmargin
- the margin to apply to the columnmax
- the maximum width the column can be resized to, -1 means no limitpackColumn(int, int)
, packTable(int)
, ColumnFactory.packColumn(JXTable, TableColumnExt, int, int)
public int getVisibleRowCount()
JScrollPane
.
JScrollPane
setVisibleRowCount(int)
public void setVisibleRowCount(int visibleRowCount)
JScrollPane
.
TODO JW - make bound property, reset scrollablePref(? distinguish internal from client code triggered like in rowheight?) and re-layout.
visibleRowCount
- number of rows to show in a JScrollPane
getVisibleRowCount()
public Dimension getPreferredScrollableViewportSize()
TODO JW: refactor and comment.
getPreferredScrollableViewportSize
in interface Scrollable
getPreferredScrollableViewportSize
in class JTable
Dimension
object containing the preferredSize
of the JViewport
which displays this tableScrollable.getPreferredScrollableViewportSize()
protected void initializeColumnPreferredWidth(TableColumn column)
TableColumnExt
or prototypeValue is null
then the preferredWidth is left unmodified.
TODO JW - need to cleanup getScrollablePreferred (refactor and inline) update doc - what exactly happens is left to the columnfactory.
column
- TableColumn object representing view columnTableColumnExt.setPrototypeValue(java.lang.Object)
public void scrollRowToVisible(int row)
JViewport
.
Note: this method has no precondition as it internally uses
getCellRect
which is lenient to off-range coordinates.
row
- the view row index of the cellscrollColumnToVisible(int)
, scrollCellToVisible(int, int)
, JComponent.scrollRectToVisible(Rectangle)
public void scrollColumnToVisible(int column)
JViewport
.
Note: this method has no precondition as it internally uses
getCellRect
which is lenient to off-range coordinates.
column
- the view column index of the cellscrollRowToVisible(int)
, scrollCellToVisible(int, int)
, JComponent.scrollRectToVisible(Rectangle)
public void scrollCellToVisible(int row,
int column)
JViewport
.
Note: this method has no precondition as it internally uses
getCellRect
which is lenient to off-range coordinates.
row
- the view row index of the cellcolumn
- the view column index of the cellscrollColumnToVisible(int)
, scrollRowToVisible(int)
, JComponent.scrollRectToVisible(Rectangle)
public int getSelectionMode()
PENDING JW - setter?
ListSelectionModel.getSelectionMode()
public Searchable getSearchable()
public void setSearchable(Searchable searchable)
searchable
- protected ComponentAdapter getComponentAdapter()
protected ComponentAdapter getComponentAdapter(int row,
int column)
row
- the row index in view coordinates.column
- the column index in view coordinates.
public HighlighterPipeline getHighlighters()
setHighlighters(HighlighterPipeline)
public void setHighlighters(HighlighterPipeline pipeline)
The default value is null
.
pipeline
- the HighlighterPipeline to use for renderer decoration.getHighlighters()
, addHighlighter(Highlighter)
, removeHighlighter(Highlighter)
public void addHighlighter(Highlighter highlighter)
If the HighlighterPipeline
returned from getHighlighters()
is null, creates and sets a new pipeline containing the given
Highlighter
. Else, appends the Highlighter
to the end of the pipeline.
highlighter
- the Highlighter
to add.
NullPointerException
- if Highlighter
is null.removeHighlighter(Highlighter)
, setHighlighters(HighlighterPipeline)
public void removeHighlighter(Highlighter highlighter)
Does nothing if the HighlighterPipeline is null or does not contain the given Highlighter.
highlighter
- the highlighter to remove.addHighlighter(Highlighter)
, setHighlighters(HighlighterPipeline)
protected ChangeListener getHighlighterChangeListener()
ChangeListener
to use with highlighters. Lazily creates the listener.
not-null
protected ChangeListener createHighlighterChangeListener()
Here: repaints the table on receiving a stateChanged.
public TableCellRenderer getCellRenderer(int row,
int column)
TableColumn
for this column has a non-null
renderer, returns that. If not, finds the class of the data in
this column (using getColumnClass
)
and returns the default renderer for this type of data.
Note: Throughout the table package, the internal implementations always use this method to provide renderers so that this default behavior can be safely overridden by a subclass.
Overridden to fix core bug #4614616 (NPE if TableModel
's
Class
for the column is an interface). This method
guarantees to always return a not null
value. *
getCellRenderer
in class JTable
row
- the row of the cell to render, where 0 is the first rowcolumn
- the column of the cell to render,
where 0 is the first column
null
returns the default renderer
for this type of objectDefaultTableCellRenderer
, TableColumn.setCellRenderer(javax.swing.table.TableCellRenderer)
, JTable.setDefaultRenderer(java.lang.Class, javax.swing.table.TableCellRenderer)
public Component prepareRenderer(TableCellRenderer renderer,
int row,
int column)
Component
used as a stamp to render
the specified cell. Overrides superclass version to provide support for
cell decorators.
Adjusts component orientation (guaranteed to happen before applying Highlighters).
prepareRenderer
in class JTable
renderer
- the TableCellRenderer
to preparerow
- the row of the cell to render, where 0 is the first rowcolumn
- the column of the cell to render, where 0 is the first
column
Component
used as a stamp to render
the specified cellHighlighter
protected void resetDefaultTableCellRendererColors(Component renderer,
int row,
int column)
Highlighter
to force reset the color "memory" of DefaultTableCellRenderer
. This is called for each renderer in prepareRenderer
after
calling super, but before applying the HighlighterPipeline. Subclasses
which are sure to solve the problem at the core (that is in a well-behaved DefaultTableCellRenderer) should override this method
to do nothing.
renderer
- the TableCellRenderer
to hackrow
- the row of the cell to rendercolumn
- the column index of the cell to renderResetDTCRColorHighlighter
, prepareRenderer(TableCellRenderer, int, int)
public Component prepareEditor(TableCellEditor editor,
int row,
int column)
row
, column
.
Note: Throughout the table package, the internal implementations always use this method to prepare editors so that this default behavior can be safely overridden by a subclass.
Overridden to adjust the editor's component orientation if appropriate.
prepareEditor
in class JTable
editor
- the TableCellEditor
to set uprow
- the row of the cell to edit,
where 0 is the first rowcolumn
- the column of the cell to edit,
where 0 is the first column
Component
being editedprotected void adjustComponentOrientation(Component stamp)
Component
's orientation to this
JXTable
's CO if appropriate. The parameter must not be
null
.
This implementation synchs the CO always.
stamp
- the Component who's CO may need to be synched.public TableCellRenderer getNewDefaultRenderer(Class columnClass)
getDefaultRenderer()
in that it returns
a new instance each time so that the renderer may be set and
customized on a particular column.
columnClass
- Class of value being rendered
protected void createDefaultRenderers()
Overridden so we can act as factory for renderers plus hacking around huge memory consumption of UIDefaults (see #6345050 in core Bug parade)
Creates default cell renderers for objects, numbers, doubles, dates, booleans, and icons.
createDefaultRenderers
in class JTable
DefaultTableCellRenderer
protected void createDefaultEditors()
Overridden to hook enhanced editors plus hacking around huge memory consumption of UIDefaults (see #6345050 in core Bug parade)
createDefaultEditors
in class JTable
DefaultCellEditor
public boolean isEditable()
JXTable
as a whole.
setEditable(boolean)
public void setEditable(boolean editable)
TableColumnExt.isEditable()
and their per-cell
editability as returned by the TableModel.isCellEditable
.
If a cell is read-only in its column or model layer, this property has no
effect.
The default value is true
.
editable
- the flag to indicate if the table is editable.isEditable()
, isCellEditable(int, int)
public boolean isTerminateEditOnFocusLost()
setTerminateEditOnFocusLost(boolean)
public void setTerminateEditOnFocusLost(boolean terminate)
JTable.CellEditorRemover
: "outside" is
interpreted to be on a component which is not under the table hierarchy
but inside the same toplevel window, "terminate" does so in any case,
first tries to stop the edit, if that's unsuccessful it cancels the edit.
The default value is true
.
terminate
- the flag to determine whether or not to terminate the
editisTerminateEditOnFocusLost()
public boolean isAutoStartEditOnKeyStroke()
setAutoStartEditOnKeyStroke(boolean)
public void setAutoStartEditOnKeyStroke(boolean autoStart)
The default value is true
.
autoStart
- boolean to determine whether a keyStroke should try to
start editing.isAutoStartEditOnKeyStroke()
public void updateUI()
UIManager
that the L&F has changed.
Replaces the current UI object with the latest version from the
UIManager
.
Additionally updates auto-adjusted row height and highlighters.
Another of the override motivation is to fix core issue (?? ID): super fails to update all renderers/editors.
updateUI
in class JTable
JComponent.updateUI()
protected void updateHighlighters()
updateUI
changes.
Highlighter.UIHighlighter
protected void updateRowHeightUI(boolean respectRowSetFlag)
true
and the rowHeight
had been already set by client code. The underlying problem is that raw
types can't implement UIResource.
This implementation asks the UIManager for a default value (stored with key "JXTable.rowHeight"). If none is available, calculates a "reasonable" height from the table's fontMetrics, assuming that most renderers/editors will have a border with top/bottom of 1.
respectRowSetFlag
- a boolean to indicate whether client-code flag
should be respected.isXTableRowHeightSet
public void setDefaultMargins(boolean showHorizontalLines,
boolean showVerticalLines)
PENDING rename? setShowGrid(boolean, boolean) would let it appear nearer to the other setShowGrid method.
showHorizontalLines
- boolean to decide whether to draw horizontal
grid lines.showVerticalLines
- boolean to decide whether to draw vertical grid
lines.JTable.setShowGrid(boolean)
, JTable.setIntercellSpacing(Dimension)
public void setRowHeight(int rowHeight)
rowHeight
,
revalidates, and repaints.
The height of the cells will be equal to the row height minus
the row margin.
Overriden to keep view/model coordinates of SizeSequence in synch. Marks the request as client-code induced.
setRowHeight
in class JTable
rowHeight
- new row heightisXTableRowHeightSet
public void setRowHeight(int row,
int rowHeight)
row
to rowHeight
,
revalidates, and repaints. The height of the cells in this row
will be equal to the row height minus the row margin.
Does nothing if support of individual rowHeights is not enabled. Overriden to keep view/model coordinates of SizeSequence in synch.
setRowHeight
in class JTable
row
- the row whose height is being
changedrowHeight
- new row height, in pixelsisRowHeightEnabled()
public void setRowHeightEnabled(boolean enabled)
The default value is false.
enabled
- a boolean to indicate whether per-row heights should be
enabled.isRowHeightEnabled()
, setRowHeight(int, int)
public boolean isRowHeightEnabled()
setRowHeightEnabled(boolean)
, setRowHeight(int, int)
protected SizeSequenceMapper getRowModelMapper()
SizeSequenceMapper
used to synch view/model
coordinates for individual row heightsSizeSequenceMapper
protected void adminSetRowHeight(int rowHeight)
isXTableRowHeight
unchanged. This enables the distinction
between setting the height for internal reasons from doing so by client
code.
rowHeight
- new height in pixel.setRowHeight(int)
, isXTableRowHeightSet
public int rowAtPoint(Point point)
point
lies in,
or -1 if the result is not in the range
[0, getRowCount()
-1].
Overridden to work around core Bug (ID #6291631): negative y is mapped to row 0).
rowAtPoint
in class JTable
point
- the location of interest
point
lies in,
or -1 if the result is not in the range
[0, getRowCount()
-1]JTable.columnAtPoint(java.awt.Point)
protected JTableHeader createDefaultTableHeader()
JTableHeader
. A subclass can override this
method to return a different table header object.
Overridden to return a JXTableHeader
.
createDefaultTableHeader
in class JTable
JXTableHeader
protected TableColumnModel createDefaultColumnModel()
DefaultTableColumnModel
. A subclass can override this
method to return a different column model object.
Overridden to return a DefaultTableColumnModelExt
.
createDefaultColumnModel
in class JTable
DefaultTableColumnModelExt
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |