java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
is.codion.swing.framework.ui.EntityTablePanel
- All Implemented Interfaces:
ImageObserver
,MenuContainer
,Serializable
,Accessible
The EntityTablePanel is a UI class based on the EntityTableModel class.
It consists of a JTable as well as filtering/searching and summary panels.
The default layout is as follows
____________________________________________________ | conditionPanel | |____________________________________________________| | | | | | | | | | entityTable (FilteredTable) | | | | | | | | | |____________________________________________________| | summaryPanel | |____________________________________________________| | southPanel | |____________________________________________________|The condition and summary panels can be hidden Note that
initialize()
must be called to initialize this panel before displaying it.- See Also:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
Specifies how column selection is presented.static enum
The keyboard shortcuts available forEntityTablePanel
s.static enum
Specifies the refresh button visibility.final class
Contains configuration settings for aEntityTablePanel
which must be set before the panel is initialized.static enum
The standard controls available in a table panelNested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
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.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
-
Field Summary
Modifier and TypeFieldDescriptionstatic final PropertyValue<EntityTablePanel.ColumnSelection>
Specifies how column selection is presented to the user.
Value type:EntityTablePanel.ColumnSelection
Default value:EntityTablePanel.ColumnSelection.DIALOG
static final PropertyValue<Boolean>
Specifies whether table condition panels should be visible or not by default
Value type: Boolean
Default value: falsestatic final PropertyValue<Boolean>
Specifies whether table filter panels should be visible or not by default
Value type: Boolean
Default value: falsestatic final PropertyValue<Boolean>
Specifies whether to include a 'Clear' control in the popup menu.
Value type: Boolean
Default value: falsestatic final PropertyValue<Boolean>
Specifies whether to include a condition panel.
Value type: Boolean
Default value: truestatic final PropertyValue<Boolean>
Specifies whether to include aEntityPopupMenu
on this table, triggered with CTRL-ALT-V.
Value type: Boolean
Default value: truestatic final PropertyValue<Boolean>
Specifies whether to include a filter panel.
Value type: Boolean
Default value: truestatic final PropertyValue<Boolean>
Specifies whether to include a popup menu for configuring the table model limit.
Value type: Boolean
Default value: falsestatic final KeyboardShortcuts<EntityTablePanel.KeyboardShortcut>
The default keyboard shortcut keyStrokes.static final PropertyValue<EntityTablePanel.RefreshButtonVisible>
Specifies whether the refresh button should always be visible or only when the condition panel is visible
Value type: Boolean
Default value:EntityTablePanel.RefreshButtonVisible.WHEN_CONDITION_PANEL_IS_VISIBLE
static final PropertyValue<Boolean>
Specifies whether to show an indeterminate progress bar while the model is refreshing.
Value type: Boolean
Default value: falseFields 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
Fields inherited from class java.awt.Component
accessibleContext, 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
ConstructorDescriptionEntityTablePanel
(SwingEntityTableModel tableModel) Initializes a new EntityTablePanel instanceEntityTablePanel
(SwingEntityTableModel tableModel, EntityConditionPanelFactory conditionPanelFactory) Initializes a new EntityTablePanel instance -
Method Summary
Modifier and TypeMethodDescriptionfinal FilteredTableConditionPanel<Attribute<?>>
final State
Provides a way to configure settings before the panel is initialized.protected final boolean
control
(EntityTablePanel.TableControl tableControl) protected Controls
createPopupMenuControls
(List<Controls> additionalPopupMenuControls) Creates a Controls instance containing the controls to include in the table popup menu.protected Controls
By default this method returns aControls
instance containing theControl
associated withEntityTablePanel.TableControl.PRINT
.protected JToolBar
Creates the south panel toolbar, by default based oncreateToolBarControls(List)
protected TableCellEditor
createTableCellEditor
(Attribute<?> attribute) Creates a TableCellEditor for the given attribute, returns null if no editor is available, such as for non-updatable attributes.protected TableCellRenderer
createTableCellRenderer
(Attribute<?> attribute) Creates a TableCellRenderer to use for the given attribute in this EntityTablePanelprotected Controls
createToolBarControls
(List<Controls> additionalToolBarControls) final boolean
delete()
Deletes the entities selected in the underlying table model without asking for confirmation.final Value<EntityEditPanel.Confirmer>
If set to null the default delete confirmer is used.final boolean
Deletes the entities selected in the underlying table model after asking for confirmation using theEntityEditPanel.Confirmer
set viadeleteConfirmer()
.protected final void
displayException
(Throwable exception) Displays the exception in a dialog, with the dialog owner as the current focus owner or this panel if none is available.protected <T> EntityDialogs.EditDialogBuilder<T>
editDialogBuilder
(Attribute<T> attribute) Override to customize the edit dialog used when multiple entities are edited.final <T> void
editSelectedEntities
(Attribute<T> attributeToEdit) Retrieves a new value via input dialog and performs an update on the selected entities assigning the value to the attributefinal State
final EntityTablePanel
Initializes the UI, while presenting a wait cursor to the user.protected JPanel
Initializes the south panel, override and return null for no south panel.protected void
layoutPanel
(JComponent tableComponent, JPanel southPanel) This method simply addstablePanel
at location BorderLayout.CENTER and, if non-null, the givensouthPanel
to theBorderLayout.SOUTH
location.protected void
onException
(Throwable exception) Propagates the exception toonValidationException(ValidationException)
oronReferentialIntegrityException(ReferentialIntegrityException)
depending on type, otherwise displays the exception.protected void
Called when aReferentialIntegrityException
occurs during a delete operation on the selected entities.protected void
onValidationException
(ValidationException exception) Displays the exception message.final void
Prints the tablefinal void
Allows the user to select one of the available search condition panelsfinal void
Allows the user to select one of the available filter condition panelsfinal <T,
A extends Attribute<T>, C extends JComponent>
voidsetEditComponentFactory
(A attribute, EntityComponentFactory<T, A, C> componentFactory) Sets the component factory for the given attribute, used when editing entities viaeditSelectedEntities(Attribute)
.final void
setReferentialIntegrityErrorHandling
(ReferentialIntegrityErrorHandling referentialIntegrityErrorHandling) final <T,
A extends Attribute<T>, C extends JComponent>
voidsetTableCellEditorFactory
(A attribute, EntityComponentFactory<T, A, C> componentFactory) Sets the table cell editor component factory for the given attribute.protected void
Override to setup any custom controls.protected void
Sets up the default keyboard actions.final State
final Value<Function<SwingEntityTableModel,
String>> final State
final FilteredTable<Entity,
Attribute<?>> table()
final <T extends SwingEntityTableModel>
Tfinal void
Toggles the condition panel through the states hidden, visible and advancedfinal void
Toggles the filter panel through the states hidden, visible and advancedfinal String
toString()
final void
Displays a dialog containing tables of entities depending on the selected entities via non-soft foreign keysMethods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, 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, 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, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, 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, doLayout, 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, transferFocus, transferFocusBackward, transferFocusUpCycle
-
Field Details
-
CONDITION_PANEL_VISIBLE
Specifies whether table condition panels should be visible or not by default
Value type: Boolean
Default value: false -
FILTER_PANEL_VISIBLE
Specifies whether table filter panels should be visible or not by default
Value type: Boolean
Default value: false -
INCLUDE_ENTITY_MENU
Specifies whether to include aEntityPopupMenu
on this table, triggered with CTRL-ALT-V.
Value type: Boolean
Default value: true -
INCLUDE_CLEAR_CONTROL
Specifies whether to include a 'Clear' control in the popup menu.
Value type: Boolean
Default value: false -
INCLUDE_CONDITION_PANEL
Specifies whether to include a condition panel.
Value type: Boolean
Default value: true -
INCLUDE_FILTER_PANEL
Specifies whether to include a filter panel.
Value type: Boolean
Default value: true -
INCLUDE_LIMIT_MENU
Specifies whether to include a popup menu for configuring the table model limit.
Value type: Boolean
Default value: false -
SHOW_REFRESH_PROGRESS_BAR
Specifies whether to show an indeterminate progress bar while the model is refreshing.
Value type: Boolean
Default value: false -
REFRESH_BUTTON_VISIBLE
Specifies whether the refresh button should always be visible or only when the condition panel is visible
Value type: Boolean
Default value:EntityTablePanel.RefreshButtonVisible.WHEN_CONDITION_PANEL_IS_VISIBLE
-
COLUMN_SELECTION
Specifies how column selection is presented to the user.
Value type:EntityTablePanel.ColumnSelection
Default value:EntityTablePanel.ColumnSelection.DIALOG
-
KEYBOARD_SHORTCUTS
The default keyboard shortcut keyStrokes.
-
-
Constructor Details
-
EntityTablePanel
Initializes a new EntityTablePanel instance- Parameters:
tableModel
- the SwingEntityTableModel instance
-
EntityTablePanel
public EntityTablePanel(SwingEntityTableModel tableModel, EntityConditionPanelFactory conditionPanelFactory) Initializes a new EntityTablePanel instance- Parameters:
tableModel
- the SwingEntityTableModel instanceconditionPanelFactory
- the condition panel factory, if any
-
-
Method Details
-
table
- Returns:
- the table
-
tableModel
- Type Parameters:
T
- the table model type- Returns:
- the EntityTableModel used by this EntityTablePanel
-
conditionPanel
- Returns:
- the condition panel
- Throws:
IllegalStateException
- in case no condition panel is available
-
configure
Provides a way to configure settings before the panel is initialized.- Returns:
- the
EntityTablePanel.Settings
instance - Throws:
IllegalStateException
- in case the panel has already been initialized
-
refreshButtonVisible
- Returns:
- the Value controlling the refresh button visible setting
-
conditionPanelVisible
- Returns:
- the state controlling whether the condition panel is visible
-
filterPanelVisible
- Returns:
- the state controlling whether the filter panel is visible
-
summaryPanelVisible
- Returns:
- the state controlling whether the summary panel is visible
-
showRefreshProgressBar
- Returns:
- the state controlling whether an indeterminate progress bar should be shown while the model is refreshing
- See Also:
-
statusMessage
- Returns:
- the value containing the function for creating the table status message
- See Also:
-
setEditComponentFactory
public final <T,A extends Attribute<T>, void setEditComponentFactoryC extends JComponent> (A attribute, EntityComponentFactory<T, A, C> componentFactory) Sets the component factory for the given attribute, used when editing entities viaeditSelectedEntities(Attribute)
.- Type Parameters:
T
- the value typeA
- the attribute typeC
- the component type- Parameters:
attribute
- the attributecomponentFactory
- the component factory
-
setTableCellEditorFactory
public final <T,A extends Attribute<T>, void setTableCellEditorFactoryC extends JComponent> (A attribute, EntityComponentFactory<T, A, C> componentFactory) Sets the table cell editor component factory for the given attribute.- Type Parameters:
T
- the value typeA
- the attribute typeC
- the component type- Parameters:
attribute
- the attributecomponentFactory
- the component factory
-
toggleConditionPanel
public final void toggleConditionPanel()Toggles the condition panel through the states hidden, visible and advanced -
toggleFilterPanel
public final void toggleFilterPanel()Toggles the filter panel through the states hidden, visible and advanced -
selectConditionPanel
public final void selectConditionPanel()Allows the user to select one of the available search condition panels -
selectFilterPanel
public final void selectFilterPanel()Allows the user to select one of the available filter condition panels -
setReferentialIntegrityErrorHandling
public final void setReferentialIntegrityErrorHandling(ReferentialIntegrityErrorHandling referentialIntegrityErrorHandling) - Parameters:
referentialIntegrityErrorHandling
- the action to take on a referential integrity error during delete
-
deleteConfirmer
If set to null the default delete confirmer is used.- Returns:
- the
Value
controlling the delete confirmer
-
toString
-
control
Returns aValue
containing the control associated withcontrolCode
, an emptyValue
if no such control is available. Note that standard controls are populated during initialization, so until then, these values may be empty.- Parameters:
tableControl
- the table control code- Returns:
- the
Value
containing the control associated withcontrolCode
-
editSelectedEntities
Retrieves a new value via input dialog and performs an update on the selected entities assigning the value to the attribute- Type Parameters:
T
- the attribute value type- Parameters:
attributeToEdit
- the attribute which value to edit- See Also:
-
viewDependencies
public final void viewDependencies()Displays a dialog containing tables of entities depending on the selected entities via non-soft foreign keys -
deleteWithConfirmation
public final boolean deleteWithConfirmation()Deletes the entities selected in the underlying table model after asking for confirmation using theEntityEditPanel.Confirmer
set viadeleteConfirmer()
.- Returns:
- true if the delete operation was successful
- See Also:
-
delete
public final boolean delete()Deletes the entities selected in the underlying table model without asking for confirmation.- Returns:
- true if the delete operation was successful
-
printTable
Prints the table- Throws:
PrinterException
- in case of a print exception- See Also:
-
initialize
Initializes the UI, while presenting a wait cursor to the user. Note that calling this method more than once has no effect.- Returns:
- this EntityTablePanel instance
-
setupControls
protected void setupControls()Override to setup any custom controls. This default implementation is empty. This method is called after all standard controls have been initialized.- See Also:
-
initializeSouthPanel
Initializes the south panel, override and return null for no south panel. Not called if the south panel has been disabled viaEntityTablePanel.Settings.includeSouthPanel(boolean)
.- Returns:
- the south panel, or null if no south panel should be included
- See Also:
-
setupKeyboardActions
protected void setupKeyboardActions()Sets up the default keyboard actions. -
createToolBarControls
-
createPopupMenuControls
Creates a Controls instance containing the controls to include in the table popup menu. Returning null or an empty Controls instance indicates that no popup menu should be included.- Parameters:
additionalPopupMenuControls
- any additional controls to include in the popup menu- Returns:
- Controls on which to base the table popup menu, null or an empty Controls instance if no popup menu should be included
-
createPrintMenuControls
By default this method returns aControls
instance containing theControl
associated withEntityTablePanel.TableControl.PRINT
. If noControl
has been assigned to that control key, an emptyControls
instance is returned. Override to add print actions, which will then appear in the table popup menu.- Returns:
- the print controls to display in the table popup menu
-
createTableCellRenderer
Creates a TableCellRenderer to use for the given attribute in this EntityTablePanel- Parameters:
attribute
- the attribute- Returns:
- the TableCellRenderer for the given attribute
-
createTableCellEditor
Creates a TableCellEditor for the given attribute, returns null if no editor is available, such as for non-updatable attributes.- Parameters:
attribute
- the attribute- Returns:
- a TableCellEditor for the given attribute, null in case none is available
-
layoutPanel
This method simply addstablePanel
at location BorderLayout.CENTER and, if non-null, the givensouthPanel
to theBorderLayout.SOUTH
location. By overriding this method you can override the default layout.- Parameters:
tableComponent
- the component containing the table, condition and summary panelsouthPanel
- the south toolbar panel, null if not required- See Also:
-
createSouthToolBar
Creates the south panel toolbar, by default based oncreateToolBarControls(List)
- Returns:
- the toolbar to add to the south panel, null if none should be included
-
onException
Propagates the exception toonValidationException(ValidationException)
oronReferentialIntegrityException(ReferentialIntegrityException)
depending on type, otherwise displays the exception.- Parameters:
exception
- the exception to handle- See Also:
-
onReferentialIntegrityException
Called when aReferentialIntegrityException
occurs during a delete operation on the selected entities. If the referential error handling isReferentialIntegrityErrorHandling.DISPLAY_DEPENDENCIES
, the dependencies of the entities involved are displayed to the user, otherwiseonException(Throwable)
is called.- Parameters:
exception
- the exception- See Also:
-
onValidationException
Displays the exception message.- Parameters:
exception
- the exception
-
editDialogBuilder
Override to customize the edit dialog used when multiple entities are edited.- Type Parameters:
T
- the attribute type- Parameters:
attribute
- the attribute to edit- Returns:
- a edit dialog builder
-
displayException
Displays the exception in a dialog, with the dialog owner as the current focus owner or this panel if none is available.- Parameters:
exception
- the exception to display
-
confirmDelete
protected final boolean confirmDelete()- Returns:
- true if confirmed
- See Also:
-