de.tkuhn.swing.table
Class JUserFriendlyTable

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JTable
                  extended by de.tkuhn.swing.table.JUserFriendlyTable
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible, javax.swing.event.CellEditorListener, javax.swing.event.ListSelectionListener, javax.swing.event.RowSorterListener, javax.swing.event.TableColumnModelListener, javax.swing.event.TableModelListener, javax.swing.Scrollable

public class JUserFriendlyTable
extends javax.swing.JTable
implements javax.swing.event.TableModelListener

This subclass of JTable provides the additional ability for the user to hide/unhide its columns using a contextual menu of the table header and further it supports sorting of the table's rows by column in ascending and descending order. It also preserves the size of the columns, their position and sorting state if a new TableModel is set that is similar to the old one. In addition the column hiding state, size, position and sorting state can be obtained as a Serializable object to be made persistent. Attention: This might not work between different versions of this class Functionality is achieved by using the ColumnStateTableColumnModel and a RowSortingTableModel

Version:
0.9.3
Author:
Tilmann Kuhn
See Also:
RowSortingTableModel, ColumnStateTableColumnModel, JTable, Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JTable
javax.swing.JTable.AccessibleJTable, javax.swing.JTable.DropLocation, javax.swing.JTable.PrintMode
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
 
Fields inherited from class javax.swing.JTable
AUTO_RESIZE_ALL_COLUMNS, AUTO_RESIZE_LAST_COLUMN, AUTO_RESIZE_NEXT_COLUMN, AUTO_RESIZE_OFF, AUTO_RESIZE_SUBSEQUENT_COLUMNS, autoCreateColumnsFromModel, autoResizeMode, cellEditor, cellSelectionEnabled, dataModel, defaultEditorsByColumnClass, defaultRenderersByColumnClass, editingColumn, editingRow, editorComp, gridColor, preferredViewportSize, rowHeight, rowMargin, rowSelectionAllowed, selectionBackground, selectionForeground, selectionModel, showHorizontalLines, showVerticalLines, tableHeader
 
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
JUserFriendlyTable()
          Constructs a default JUserFriendlyTable that is initialized with a default data model, a default column model, and a default selection model.
JUserFriendlyTable(int numRows, int numColumns)
          Constructs a JUserFriendlyTable with numRows and numColumns of empty cells using DefaultTableModel.
JUserFriendlyTable(java.lang.Object[][] rowData, java.lang.Object[] columnNames)
          Constructs a JUserFriendlyTable to display the values in the two dimensional array, rowData, with column names, columnNames.
JUserFriendlyTable(javax.swing.table.TableModel tableModel)
          Constructs a JUserFriendlyTable that is initialized with tableModel as the data model, a default column model, and a default selection model.
JUserFriendlyTable(javax.swing.table.TableModel tableModel, javax.swing.ListSelectionModel selectionModel)
          Constructs a JUserFriendlyTable that is initialized with tableModel as the data model, and selectionModel as the selection model.
JUserFriendlyTable(java.util.Vector<?> rowData, java.util.Vector<?> columnNames)
          Constructs a JUserFriendlyTable to display the values in the Vector of Vectors, rowData, with column names, columnNames.
 
Method Summary
 void balanceColumns()
          Balance the width of the table columns based on their content.
protected  javax.swing.table.TableColumnModel createDefaultColumnModel()
          This method must not be called directly by user!
 javax.swing.table.TableModel getModel()
          Since this subclass uses a RowSortingTableModel to provide row order the returned TableModel is an instance of that class.
 java.lang.Object getState()
          Creates a Memento of the state of this table.
 javax.swing.table.TableModel getUnsortedModel()
          Return the raw unsorted data of this table that is sorted by this JUserFriendlyTable's RowSortingTableModel.
 boolean isStatePreserving()
          Is the table preserving the column state on a model change or just balancing columns?
 void setModel(javax.swing.table.TableModel aModel)
          Sets a new TableModel for this table.
 boolean setState(java.lang.Object state)
          Resets this table to the given state if the TableModel is similar to the model present when getState() was called.
 void setStatePreserving(boolean statePreserving)
          Set if the table should preserve column state on a model change or just balance columns.
 void tableChanged(javax.swing.event.TableModelEvent tme)
          This method must not be called directly by user!
 
Methods inherited from class javax.swing.JTable
addColumn, addColumnSelectionInterval, addNotify, addRowSelectionInterval, changeSelection, clearSelection, columnAdded, columnAtPoint, columnMarginChanged, columnMoved, columnRemoved, columnSelectionChanged, configureEnclosingScrollPane, convertColumnIndexToModel, convertColumnIndexToView, convertRowIndexToModel, convertRowIndexToView, createDefaultColumnsFromModel, createDefaultDataModel, createDefaultEditors, createDefaultRenderers, createDefaultSelectionModel, createDefaultTableHeader, createScrollPaneForTable, doLayout, editCellAt, editCellAt, editingCanceled, editingStopped, getAccessibleContext, getAutoCreateColumnsFromModel, getAutoCreateRowSorter, getAutoResizeMode, getCellEditor, getCellEditor, getCellRect, getCellRenderer, getCellSelectionEnabled, getColumn, getColumnClass, getColumnCount, getColumnModel, getColumnName, getColumnSelectionAllowed, getDefaultEditor, getDefaultRenderer, getDragEnabled, getDropLocation, getDropMode, getEditingColumn, getEditingRow, getEditorComponent, getFillsViewportHeight, getGridColor, getIntercellSpacing, getPreferredScrollableViewportSize, getPrintable, getRowCount, getRowHeight, getRowHeight, getRowMargin, getRowSelectionAllowed, getRowSorter, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, getSelectedColumn, getSelectedColumnCount, getSelectedColumns, getSelectedRow, getSelectedRowCount, getSelectedRows, getSelectionBackground, getSelectionForeground, getSelectionModel, getShowHorizontalLines, getShowVerticalLines, getSurrendersFocusOnKeystroke, getTableHeader, getToolTipText, getUI, getUIClassID, getUpdateSelectionOnSort, getValueAt, initializeLocalVars, isCellEditable, isCellSelected, isColumnSelected, isEditing, isRowSelected, moveColumn, paramString, prepareEditor, prepareRenderer, print, print, print, print, print, processKeyBinding, removeColumn, removeColumnSelectionInterval, removeEditor, removeNotify, removeRowSelectionInterval, resizeAndRepaint, rowAtPoint, selectAll, setAutoCreateColumnsFromModel, setAutoCreateRowSorter, setAutoResizeMode, setCellEditor, setCellSelectionEnabled, setColumnModel, setColumnSelectionAllowed, setColumnSelectionInterval, setDefaultEditor, setDefaultRenderer, setDragEnabled, setDropMode, setEditingColumn, setEditingRow, setFillsViewportHeight, setGridColor, setIntercellSpacing, setPreferredScrollableViewportSize, setRowHeight, setRowHeight, setRowMargin, setRowSelectionAllowed, setRowSelectionInterval, setRowSorter, setSelectionBackground, setSelectionForeground, setSelectionMode, setSelectionModel, setShowGrid, setShowHorizontalLines, setShowVerticalLines, setSurrendersFocusOnKeystroke, setTableHeader, setUI, setUpdateSelectionOnSort, setValueAt, sizeColumnsToFit, sizeColumnsToFit, sorterChanged, unconfigureEnclosingScrollPane, updateUI, valueChanged
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

JUserFriendlyTable

public JUserFriendlyTable()
Constructs a default JUserFriendlyTable that is initialized with a default data model, a default column model, and a default selection model.

See Also:
JTable.createDefaultDataModel(), createDefaultColumnModel(), JTable.createDefaultSelectionModel()

JUserFriendlyTable

public JUserFriendlyTable(javax.swing.table.TableModel tableModel)
Constructs a JUserFriendlyTable that is initialized with tableModel as the data model, a default column model, and a default selection model.

Parameters:
tableModel - the data model for the table
See Also:
createDefaultColumnModel(), JTable.createDefaultSelectionModel()

JUserFriendlyTable

public JUserFriendlyTable(javax.swing.table.TableModel tableModel,
                          javax.swing.ListSelectionModel selectionModel)
Constructs a JUserFriendlyTable that is initialized with tableModel as the data model, and selectionModel as the selection model. If any of the parameters are null this method will initialize the table with the corresponding default model.

Parameters:
tableModel - the data model for the table
selectionModel - the row selection model for the table
See Also:
JTable.createDefaultDataModel(), JTable.createDefaultSelectionModel()

JUserFriendlyTable

public JUserFriendlyTable(int numRows,
                          int numColumns)
Constructs a JUserFriendlyTable with numRows and numColumns of empty cells using DefaultTableModel. The columns will have names of the form "A", "B", "C", etc.

Parameters:
numRows - the number of rows the table holds
numColumns - the number of columns the table holds
See Also:
DefaultTableModel

JUserFriendlyTable

public JUserFriendlyTable(java.util.Vector<?> rowData,
                          java.util.Vector<?> columnNames)
Constructs a JUserFriendlyTable to display the values in the Vector of Vectors, rowData, with column names, columnNames. The Vectors contained in rowData should contain the values for that row. In other words, the value of the cell at row 1, column 5 can be obtained with the following code:

 ((Vector) rowData.elementAt(1)).elementAt(5);
 

Parameters:
rowData - the data for the new table
columnNames - names of each column

JUserFriendlyTable

public JUserFriendlyTable(java.lang.Object[][] rowData,
                          java.lang.Object[] columnNames)
Constructs a JUserFriendlyTable to display the values in the two dimensional array, rowData, with column names, columnNames. rowData is an array of rows, so the value of the cell at row 1, column 5 can be obtained with the following code:

 rowData[1][5];
 

All rows must be of the same length as columnNames.

Parameters:
rowData - the data for the new table
columnNames - names of each column
Method Detail

getState

public java.lang.Object getState()
Creates a Memento of the state of this table. This can be used for a restoration of the State.

Returns:
an Object representing the state of the table that implements the Serializable Interface. And can also be saved using the XMLEncoder.
See Also:
Serializable, XMLEncoder

setState

public boolean setState(java.lang.Object state)
Resets this table to the given state if the TableModel is similar to the model present when getState() was called. This method must be called with a state object obtained by getState().

Parameters:
state - the state to set.
Returns:
true if the model was similar and the state has been reset.
See Also:
getState()

createDefaultColumnModel

protected javax.swing.table.TableColumnModel createDefaultColumnModel()
This method must not be called directly by user! Overrides createDefaultColumnModel() in JTable

Overrides:
createDefaultColumnModel in class javax.swing.JTable
Returns:
a new ColumnStateTableColumnModel

balanceColumns

public void balanceColumns()
Balance the width of the table columns based on their content.


setModel

public void setModel(javax.swing.table.TableModel aModel)
Sets a new TableModel for this table. The RowSortingTableModel this table uses is not replaced. The given model is set at the sorting model instead. In addition if the new model is similar to the old one the column hiding, size, position state and row sorting state are preserved.

Overrides:
setModel in class javax.swing.JTable
Parameters:
aModel - the new TableModel to be used

getModel

public javax.swing.table.TableModel getModel()
Since this subclass uses a RowSortingTableModel to provide row order the returned TableModel is an instance of that class. That does mean that getModel() does not return TableModel instances set with setModel(model). To obtain the 'real' data model you should use getUnsortedModel()

Overrides:
getModel in class javax.swing.JTable
Returns:
the RowSortingTableModel used by this table
See Also:
getUnsortedModel()

getUnsortedModel

public javax.swing.table.TableModel getUnsortedModel()
Return the raw unsorted data of this table that is sorted by this JUserFriendlyTable's RowSortingTableModel.

Returns:
the 'real' TableModel used by this table

tableChanged

public void tableChanged(javax.swing.event.TableModelEvent tme)
This method must not be called directly by user! Implementation of tableChanged(event) in the interface TableModelListener. Preserves the state of the ColumnStateColumnModel if the table structure changes and forwards the event to its super class.

Specified by:
tableChanged in interface javax.swing.event.TableModelListener
Overrides:
tableChanged in class javax.swing.JTable
Parameters:
tme - the event to process
See Also:
TableModelListener

isStatePreserving

public boolean isStatePreserving()
Is the table preserving the column state on a model change or just balancing columns?

Returns:
Value of property statePreserving.

setStatePreserving

public void setStatePreserving(boolean statePreserving)
Set if the table should preserve column state on a model change or just balance columns.

Parameters:
statePreserving - New value of property statePreserving.


Copyright © Tilmann Kuhn