Package io.github.jonestimd.swing.table
Class DecoratedTable<Bean,Model extends BeanTableModel<Bean>>
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.JTable
-
- io.github.jonestimd.swing.table.DecoratedTable<Bean,Model>
-
- 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
- Direct Known Subclasses:
MixedRowTable,SectionTable
public class DecoratedTable<Bean,Model extends BeanTableModel<Bean>> extends javax.swing.JTableA table that usesTableDecorators to prepare cell renderers and provide consistent styling of cell values. ExtendsJTableto provide the following:- apply a list of
TableDecorators to cell renderers - handle multiline column headers
- ensure uniform row background color when an alternate row color is defined (fixes boolean cells)
- improve keyboard handling for cell editing
- start editing on text input
- clear cell and start editing on
ctrl-BACKSPACE - use initial text key for item selection in combo box cell editor
- stop editing on
ENTERand remain on current cell
- See Also:
- 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
-
-
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, columnModel, dataModel, defaultEditorsByColumnClass, defaultRenderersByColumnClass, editingColumn, editingRow, editorComp, gridColor, preferredViewportSize, rowHeight, rowMargin, rowSelectionAllowed, selectionBackground, selectionForeground, selectionModel, showHorizontalLines, showVerticalLines, tableHeader
-
Fields inherited from class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
-
-
Constructor Summary
Constructors Constructor Description DecoratedTable(Model dm)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddColumn(javax.swing.table.TableColumn aColumn)Overridden to handle multiline column headers.protected voidcreateDefaultRenderers()Overridden to fix background color of boolean cells.booleaneditCellAt(int row, int column, java.util.EventObject e)Overridden to handle initial keystroke on aJTextComponenteditor.java.awt.ColorgetAlternateBackground()Get the background color for even rows.protected java.util.stream.IntStreamgetBeanIndexes(int[] viewIndexes)java.util.List<TableDecorator>getDecorators()ModelgetModel()protected java.awt.ColorgetRowBackground(int row)Used byprepareRenderer(TableCellRenderer, int, int)to determine the background color of a row.java.util.List<Bean>getSelectedItems()Get the selected beans.java.awt.ComponentprepareRenderer(javax.swing.table.TableCellRenderer renderer, int row, int column)Overridden to set background, foreground and applyTableDecorators.protected booleanprocessKeyBinding(javax.swing.KeyStroke ks, java.awt.event.KeyEvent e, int condition, boolean pressed)Overridden to improve keyboard handling for starting/stopping edit.voidsetAlternateBackground(java.awt.Color background)Set the background color for even rows.voidsetBackground(java.awt.Color color)Set the background color for odd rows.voidsetDecorators(java.util.List<TableDecorator> decorators)protected voidsetEditorText(javax.swing.text.JTextComponent editor, char ch)Handle first keystroke when starting edit.voidsetModel(javax.swing.table.TableModel dataModel)voidsetTableHeader(javax.swing.table.JTableHeader tableHeader)Overridden to handle multiline column headers.voidsetUI(javax.swing.plaf.TableUI ui)Overridden to set background colors.-
Methods inherited from class javax.swing.JTable
addColumnSelectionInterval, addNotify, addRowSelectionInterval, changeSelection, clearSelection, columnAdded, columnAtPoint, columnMarginChanged, columnMoved, columnRemoved, columnSelectionChanged, configureEnclosingScrollPane, convertColumnIndexToModel, convertColumnIndexToView, convertRowIndexToModel, convertRowIndexToView, createDefaultColumnModel, createDefaultColumnsFromModel, createDefaultDataModel, createDefaultEditors, createDefaultSelectionModel, createDefaultTableHeader, createScrollPaneForTable, doLayout, 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, print, print, print, print, print, 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, setUpdateSelectionOnSort, setValueAt, sizeColumnsToFit, sizeColumnsToFit, sorterChanged, tableChanged, 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, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, 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, 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, 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, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, 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, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
Constructor Detail
-
DecoratedTable
public DecoratedTable(Model dm)
-
-
Method Detail
-
setModel
public void setModel(javax.swing.table.TableModel dataModel)
- Overrides:
setModelin classjavax.swing.JTable
-
setUI
public void setUI(javax.swing.plaf.TableUI ui)
Overridden to set background colors.- Overrides:
setUIin classjavax.swing.JTable
-
setBackground
public void setBackground(java.awt.Color color)
Set the background color for odd rows.- Overrides:
setBackgroundin classjavax.swing.JComponent
-
getAlternateBackground
public java.awt.Color getAlternateBackground()
Get the background color for even rows.
-
setAlternateBackground
public void setAlternateBackground(java.awt.Color background)
Set the background color for even rows.
-
addColumn
public void addColumn(javax.swing.table.TableColumn aColumn)
Overridden to handle multiline column headers.- Overrides:
addColumnin classjavax.swing.JTable
-
setTableHeader
public void setTableHeader(javax.swing.table.JTableHeader tableHeader)
Overridden to handle multiline column headers.- Overrides:
setTableHeaderin classjavax.swing.JTable
-
getSelectedItems
public java.util.List<Bean> getSelectedItems()
Get the selected beans.
-
getBeanIndexes
protected java.util.stream.IntStream getBeanIndexes(int[] viewIndexes)
-
processKeyBinding
protected boolean processKeyBinding(javax.swing.KeyStroke ks, java.awt.event.KeyEvent e, int condition, boolean pressed)Overridden to improve keyboard handling for starting/stopping edit.- Overrides:
processKeyBindingin classjavax.swing.JTable
-
editCellAt
public boolean editCellAt(int row, int column, java.util.EventObject e)Overridden to handle initial keystroke on aJTextComponenteditor.- Overrides:
editCellAtin classjavax.swing.JTable
-
setEditorText
protected void setEditorText(javax.swing.text.JTextComponent editor, char ch)Handle first keystroke when starting edit. Backspace deletes the last character in the cell. Otherwise, any printable character replaces the entire text of the cell.
-
prepareRenderer
public java.awt.Component prepareRenderer(javax.swing.table.TableCellRenderer renderer, int row, int column)Overridden to set background, foreground and applyTableDecorators.- Overrides:
prepareRendererin classjavax.swing.JTable
-
getRowBackground
protected java.awt.Color getRowBackground(int row)
Used byprepareRenderer(TableCellRenderer, int, int)to determine the background color of a row.- Returns:
- the background color of the row.
-
getModel
public Model getModel()
- Overrides:
getModelin classjavax.swing.JTable
-
getDecorators
public java.util.List<TableDecorator> getDecorators()
-
setDecorators
public void setDecorators(java.util.List<TableDecorator> decorators)
-
createDefaultRenderers
protected void createDefaultRenderers()
Overridden to fix background color of boolean cells.- Overrides:
createDefaultRenderersin classjavax.swing.JTable
-
-