Package uk.ac.starlink.topcat

# Class CheckBoxList<T>

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JList<T>
uk.ac.starlink.topcat.CheckBoxList<T>

All Implemented Interfaces:
  `ImageObserver`, `MenuContainer`, `Serializable`, `Accessible`, `Scrollable`

Direct Known Subclasses:
  `BasicCheckBoxList`, `ControlStack`

public abstract class CheckBoxList<T> extends JList<T>
JList subclass that adds a couple of features. First, each entry has a checkbox associated with it that may be selected or deselected by the user. Second, the list entries can be reordered by the user dragging them up or down in the list. A distinctive handle is provided to indicate this option visually. Third, you can overpaint a message below the list items.

The selection model for the checkboxes and the list model giving entry ordering are held externally to this implementation, so must be explicitly managed by clients of this class, and may be modified programmatically.

Since:
  13 Mar 2013
Author:
  Mark Taylor
See Also:
  - Serialized Form

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static interface`
`CheckBoxList.Rendering<T,C extends JComponent>`
Defines the rendering of the contents of a list cell.

## Nested classes/interfaces inherited from class javax.swing.JList

`JList.AccessibleJList, JList.DropLocation`

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

### Fields inherited from class javax.swing.JList

`HORIZONTAL_WRAP, VERTICAL, VERTICAL_WRAP`

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

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

Constructors
Constructor
Description
`CheckBoxList(ListModel<T> model, boolean canSelect, CheckBoxList.Rendering<T,?> entryRendering)`
Constructor.

## Method Summary

Modifier and Type
Method
Description
`void`
`addListDataListener(ListDataListener l)`
Adds a listener for list events.
`Action`
`createCheckAllAction(boolean isChecked)`
Returns a new action that can be used to check or uncheck all the items in the list at once.
`static <T> CheckBoxList.Rendering<T,JLabel>`
`createLabelRendering(Function<T,String> stringify)`
Returns a simple rendering based on a JLabel.
`abstract boolean`
`isChecked(T item)`
Indicates whether the checkbox for a given item is selected.
`abstract void`
`moveItem(int ifrom, int ito)`
Indicates that the user has requested a reordering of the list model.
`protected void`
`paintComponent(Graphics g)`
`void`
`removeListDataListener(ListDataListener l)`
Removes a listener previously added.
`abstract void`
`setChecked(T item, boolean isChecked)`
Sets whether the checkbox for a given item is selected.
`void`
`setCheckedAll(boolean isChecked)`
Programmatically sets the checkbox status for all the items in the list.
`void`
`setListMessage(String[] msgLines)`
Sets a message which is overpainted on the blank part of this component.

### Methods inherited from class javax.swing.JList

`addListSelectionListener, addSelectionInterval, clearSelection, createSelectionModel, ensureIndexIsVisible, fireSelectionValueChanged, getAccessibleContext, getAnchorSelectionIndex, getCellBounds, getCellRenderer, getDragEnabled, getDropLocation, getDropMode, getFirstVisibleIndex, getFixedCellHeight, getFixedCellWidth, getLastVisibleIndex, getLayoutOrientation, getLeadSelectionIndex, getListSelectionListeners, getMaxSelectionIndex, getMinSelectionIndex, getModel, getNextMatch, getPreferredScrollableViewportSize, getPrototypeCellValue, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, getSelectedIndex, getSelectedIndices, getSelectedValue, getSelectedValues, getSelectedValuesList, getSelectionBackground, getSelectionForeground, getSelectionMode, getSelectionModel, getToolTipText, getUI, getUIClassID, getValueIsAdjusting, getVisibleRowCount, indexToLocation, isSelectedIndex, isSelectionEmpty, locationToIndex, paramString, removeListSelectionListener, removeSelectionInterval, setCellRenderer, setDragEnabled, setDropMode, setFixedCellHeight, setFixedCellWidth, setLayoutOrientation, setListData, setListData, setModel, setPrototypeCellValue, setSelectedIndex, setSelectedIndices, setSelectedValue, setSelectionBackground, setSelectionForeground, setSelectionInterval, setSelectionMode, setSelectionModel, setUI, setValueIsAdjusting, setVisibleRowCount, 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, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, 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, toString, transferFocus, transferFocusBackward, transferFocusUpCycle`

### Methods inherited from class java.lang.Object

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

## Constructor Details

### CheckBoxList

public CheckBoxList(ListModel<T> model, boolean canSelect, CheckBoxList.Rendering<T,?> entryRendering)
Constructor. A renderer component is supplied; when entries need to be displayed the `configureEntryRenderer` method is called.

Parameters:
  `model` - list model
  `canSelect` - true if list item selection is permitted
  `entryRendering` - rendering for list entry contents (excluding drag and checkbox decorations)

## Method Details

### isChecked

public abstract boolean isChecked(T item)
Indicates whether the checkbox for a given item is selected.

Parameters:
  `item` - list entry
Returns:
  true iff item is selected

### setChecked

public abstract void setChecked(T item, boolean isChecked)
Sets whether the checkbox for a given item is selected. Called when the user interacts with the checkbox. It is up to the concrete implementation to ensure that this is reflected by the `isChecked` method.

Parameters:
  `item` - list entry
  `isChecked` - whether item should be selected

### moveItem

public abstract void moveItem(int ifrom, int ito)
Indicates that the user has requested a reordering of the list model. It is up to the concrete implementation to ensure that this is reflected in the list model.

Parameters:
  `ifrom` - source list index
  `ito` - destination list index

### setCheckedAll

public void setCheckedAll(boolean isChecked)
Programmatically sets the checkbox status for all the items in the list.

The default implementation calls `setChecked` for each item in the list, but subclasses may be able to override this for improved efficiency.

Parameters:
  `isChecked` - true to check all, false to uncheck all

### setListMessage

public void setListMessage(String[] msgLines)
Sets a message which is overpainted on the blank part of this component. If null or empty, no message is painted.

Parameters:
  `msgLines` - lines of a message to paint

### addListDataListener

public void addListDataListener(ListDataListener l)
Adds a listener for list events. As well as changes to the underlying ListModel, this will also be messaged when any of the elements becomes checked or unchecked.

Parameters:
  `l` - listener to add

### removeListDataListener

public void removeListDataListener(ListDataListener l)
Removes a listener previously added.

Parameters:
  `l` - listener to remove

### createCheckAllAction

public Action createCheckAllAction(boolean isChecked)
Returns a new action that can be used to check or uncheck all the items in the list at once.

Parameters:
  `isChecked` - true to check all, false to uncheck all

### paintComponent

protected void paintComponent(Graphics g)

Overrides:
  `paintComponent` in class `JComponent`

### createLabelRendering

public static <T> CheckBoxList.Rendering<T,JLabel> createLabelRendering(Function<T,String> stringify)
Returns a simple rendering based on a JLabel.

Parameters:
  `stringify` - function that maps a list item to a string for display
Returns:
  cell rendering