org.jdesktop.swingx
Class JXList

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JList
                  extended by org.jdesktop.swingx.JXList
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible, Scrollable

public class JXList
extends JList

Enhanced List component with support for general SwingX sorting/filtering, rendering, highlighting, rollover and search functionality. List specific enhancements include ?? PENDING JW ...

Sorting and Filtering

JXList supports sorting and filtering. It provides api to apply a specific sort order, to toggle the sort order and to reset a sort. Sort sequence can be configured by setting a custom comparator.

 list.setFilterEnabled(true);
 list.setComparator(myComparator);
 list.setSortOrder(SortOrder.DESCENDING);
 list.toggleSortOder();
 list.resetSortOrder();
 

Rows can be filtered from a JXList using a Filter class and a FilterPipeline. One assigns a FilterPipeline to the table using setFilters(FilterPipeline). Filtering hides, but does not delete nor permanently remove rows from a JXList.

JXList provides api to access items of the underlying model in view coordinates and to convert from/to model coordinates. Note: List sorting/filtering is disabled by default because it has side-effects which might break "normal" expectations when using a JList: if enabled all row coordinates (including those returned by the selection) are in view coordinates. Furthermore, the model returned from getModel() is a wrapper around the actual data. Note: SwingX sorting/filtering is incompatible with core sorting/filtering in JDK 6+. Will be replaced by core functionality after switching the target jdk version from 5 to 6.

Rendering and Highlighting

As all SwingX collection views, a JXList is a HighlighterClient (PENDING JW: formally define and implement, like in AbstractTestHighlighter), that is it provides consistent api to add and remove Highlighters which can visually decorate the rendering component.


 
 JXList list = new JXList(new Contributors());
 // implement a custom string representation, concated from first-, lastName
 StringValue sv = new StringValue() {
     public String getString(Object value) {
        if (value instanceof Contributor) {
           Contributor contributor = (Contributor) value;
           return contributor.lastName() + ", " + contributor.firstName(); 
        }
        return StringValues.TO_STRING(value);
     }
 };
 list.setCellRenderer(new DefaultListRenderer(sv); 
 // highlight condition: gold merits
 HighlightPredicate predicate = new HighlightPredicate() {
    public boolean isHighlighted(Component renderer,
                     ComponentAdapter adapter) {
       if (!(value instanceof Contributor)) return false;              
       return ((Contributor) value).hasGold();
    }
 };
 // highlight with foreground color 
 list.addHighlighter(new PainterHighlighter(predicate, goldStarPainter);      
 
 
Note: to support the highlighting this implementation wraps the ListCellRenderer set by client code with a DelegatingRenderer which applies the Highlighter after delegating the default configuration to the wrappee. As a side-effect, getCellRenderer does return the wrapper instead of the custom renderer. To access the latter, client code must call getWrappedCellRenderer.

Rollover

As all SwingX collection views, a JXList supports per-cell rollover. If enabled, the component fires rollover events on enter/exit of a cell which by default is promoted to the renderer if it implements RolloverRenderer, that is simulates live behaviour. The rollover events can be used by client code as well, f.i. to decorate the rollover row using a Highlighter.

 
 JXList list = new JXList();
 list.setRolloverEnabled(true);
 list.setCellRenderer(new DefaultListRenderer());
 list.addHighlighter(new ColorHighlighter(HighlightPredicate.ROLLOVER_ROW, 
      null, Color.RED);      
 
 

Search

As all SwingX collection views, a JXList is searchable. A search action is registered in its ActionMap under the key "find". The default behaviour is to ask the SearchFactory to open a search component on this component. The default keybinding is retrieved from the SearchFactory, typically ctrl-f (or cmd-f for Mac). Client code can register custom actions and/or bindings as appropriate.

JXList provides api to vend a renderer-controlled String representation of cell content. This allows the Searchable and Highlighters to use WYSIWYM (What-You-See-Is-What-You-Match), that is pattern matching against the actual string as seen by the user.

See Also:
Serialized Form

Nested Class Summary
 class JXList.DelegatingRenderer
          A decorator for the original ListCellRenderer.
protected static class JXList.ListAdapter
          A component adapter targeted at a JXList.
 
Nested classes/interfaces inherited from class javax.swing.JList
JList.AccessibleJList
 
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  CompoundHighlighter compoundHighlighter
          The pipeline holding the highlighters.
protected  ComponentAdapter dataAdapter
          The ComponentAdapter for model data access.
static String EXECUTE_BUTTON_ACTIONCOMMAND
           
protected  FilterPipeline filters
          The pipeline holding the filters.
 
Fields inherited from class javax.swing.JList
HORIZONTAL_WRAP, VERTICAL, VERTICAL_WRAP
 
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
JXList()
          Constructs a JXList with an empty model and filters disabled.
JXList(boolean filterEnabled)
          Constructs a JXList with an empty model and filterEnabled property.
JXList(ListModel dataModel)
          Constructs a JXList that displays the elements in the specified, non-null model and filters disabled.
JXList(ListModel dataModel, boolean filterEnabled)
          Constructs a JXList with the specified model and filterEnabled property.
JXList(Object[] listData)
          Constructs a JXList that displays the elements in the specified array and filters disabled.
JXList(Object[] listData, boolean filterEnabled)
          Constructs a JXList that displays the elements in the specified array and filterEnabled property.
JXList(Vector<?> listData)
          Constructs a JXList that displays the elements in the specified Vector and filtes disabled.
JXList(Vector<?> listData, boolean filterEnabled)
          Constructs a JXList that displays the elements in the specified Vector and filtersEnabled property.
 
Method Summary
 void addHighlighter(Highlighter highlighter)
          Appends a Highlighter to the end of the list of used Highlighters.
 int convertIndexToModel(int viewIndex)
          Convert row index from view coordinates to model coordinates accounting for the presence of sorters and filters.
 int convertIndexToView(int modelIndex)
          Convert index from model coordinates to view coordinates accounting for the presence of sorters and filters.
protected  ListCellRenderer createDefaultCellRenderer()
          Creates and returns the default cell renderer to use.
protected  ChangeListener createHighlighterChangeListener()
          Creates and returns the ChangeListener observing Highlighters.
protected  ListRolloverController<JXList> createLinkController()
          Creates and returns a RolloverController appropriate for this component.
protected  PipelineListener createPipelineListener()
          creates the listener for changes in filters.
protected  RolloverProducer createRolloverProducer()
          Creates and returns the RolloverProducer to use with this tree.
protected  void doFind()
          Starts a search on this List's visible items.
 ListCellRenderer getCellRenderer()
          Returns the object that renders the list items.
 Comparator<?> getComparator()
           
protected  ComponentAdapter getComponentAdapter()
           
protected  ComponentAdapter getComponentAdapter(int index)
          Convenience to access a configured ComponentAdapter.
protected  CompoundHighlighter getCompoundHighlighter()
          Returns the CompoundHighlighter assigned to the table, null if none.
 Object getElementAt(int viewIndex)
          returns the element at the given index.
 int getElementCount()
          Returns the number of elements in this list in view coordinates.
protected  PipelineListener getFilterPipelineListener()
          returns the listener for changes in filters.
 FilterPipeline getFilters()
          Returns the FilterPipeline assigned to this list, or null if filtering not enabled.
protected  ChangeListener getHighlighterChangeListener()
          Returns the ChangeListener to use with highlighters.
 Highlighter[] getHighlighters()
          Returns the Highlighters used by this table.
protected  ListRolloverController<JXList> getLinkController()
          Returns the RolloverController for this component.
 Searchable getSearchable()
          Returns a Searchable for this component, guaranteed to be not null.
protected  SelectionMapper getSelectionMapper()
          widened access for testing...
protected  SortController getSortController()
          returns the currently active SortController.
 SortOrder getSortOrder()
          Returns the SortOrder.
 String getStringAt(int row)
          Returns the string representation of the cell value at the given position.
 ListCellRenderer getWrappedCellRenderer()
          Returns the renderer installed by client code or the default if none has been set.
 ListModel getWrappedModel()
          returns the underlying model.
 boolean isFilterEnabled()
           
 boolean isRolloverEnabled()
          Returns a boolean indicating whether or not rollover support is enabled.
 void removeHighlighter(Highlighter highlighter)
          Removes the given Highlighter.
 void resetSortOrder()
          Removes the interactive sorter.
 void setCellRenderer(ListCellRenderer renderer)
          Sets the delegate that's used to paint each cell in the list.
 void setComparator(Comparator<?> comparator)
          Sets the comparator used.
 void setFilterEnabled(boolean enabled)
          Enables/disables filtering support.
 void setFilters(FilterPipeline pipeline)
          Sets the FilterPipeline for filtering the items of this list, maybe null to remove all previously applied filters.
 void setHighlighters(Highlighter... highlighters)
          Sets the Highlighters to the table, replacing any old settings.
 void setModel(ListModel model)
          Sets the model that represents the contents or "value" of the list and clears the list selection after notifying PropertyChangeListeners.
 void setRolloverEnabled(boolean rolloverEnabled)
          Sets the property to enable/disable rollover support.
 void setSearchable(Searchable searchable)
          Sets the Searchable for this component.
 void setSelectionModel(ListSelectionModel newModel)
          Sets the selectionModel for the list to a non-null ListSelectionModel implementation.
 void setSortOrder(SortOrder sortOrder)
          Sorts the list using SortOrder.
 void toggleSortOrder()
          Toggles the sort order of the items.
protected  void updateHighlighterUI()
          Updates highlighter after updateUI changes.
protected  void updateOnFilterContentChanged()
          method called on change notification from filterpipeline.
protected  void updateSortAfterComparatorChange()
          Updates sort after comparator has changed.
 void updateUI()
          Resets the UI property with the value from the current look and feel.
 
Methods inherited from class javax.swing.JList
addListSelectionListener, addSelectionInterval, clearSelection, createSelectionModel, ensureIndexIsVisible, fireSelectionValueChanged, getAccessibleContext, getAnchorSelectionIndex, getCellBounds, getDragEnabled, getFirstVisibleIndex, getFixedCellHeight, getFixedCellWidth, getLastVisibleIndex, getLayoutOrientation, getLeadSelectionIndex, getListSelectionListeners, getMaxSelectionIndex, getMinSelectionIndex, getModel, getNextMatch, getPreferredScrollableViewportSize, getPrototypeCellValue, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, getSelectedIndex, getSelectedIndices, getSelectedValue, getSelectedValues, getSelectionBackground, getSelectionForeground, getSelectionMode, getSelectionModel, getToolTipText, getUI, getUIClassID, getValueIsAdjusting, getVisibleRowCount, indexToLocation, isSelectedIndex, isSelectionEmpty, locationToIndex, paramString, removeListSelectionListener, removeSelectionInterval, setDragEnabled, setFixedCellHeight, setFixedCellWidth, setLayoutOrientation, setListData, setListData, setPrototypeCellValue, setSelectedIndex, setSelectedIndices, setSelectedValue, setSelectionBackground, setSelectionForeground, setSelectionInterval, setSelectionMode, setUI, setValueIsAdjusting, setVisibleRowCount
 
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, 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, 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, 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
 

Field Detail

EXECUTE_BUTTON_ACTIONCOMMAND

public static final String EXECUTE_BUTTON_ACTIONCOMMAND
See Also:
Constant Field Values

filters

protected FilterPipeline filters
The pipeline holding the filters.


compoundHighlighter

protected CompoundHighlighter compoundHighlighter
The pipeline holding the highlighters.


dataAdapter

protected ComponentAdapter dataAdapter
The ComponentAdapter for model data access.

Constructor Detail

JXList

public JXList()
Constructs a JXList with an empty model and filters disabled.


JXList

public JXList(ListModel dataModel)
Constructs a JXList that displays the elements in the specified, non-null model and filters disabled.

Parameters:
dataModel - the data model for this list
Throws:
IllegalArgumentException - if dataModel is null

JXList

public JXList(Object[] listData)
Constructs a JXList that displays the elements in the specified array and filters disabled.

Parameters:
listData - the array of Objects to be loaded into the data model
Throws:
IllegalArgumentException - if listData is null

JXList

public JXList(Vector<?> listData)
Constructs a JXList that displays the elements in the specified Vector and filtes disabled.

Parameters:
listData - the Vector to be loaded into the data model
Throws:
IllegalArgumentException - if listData is null

JXList

public JXList(boolean filterEnabled)
Constructs a JXList with an empty model and filterEnabled property.

Parameters:
filterEnabled - boolean to determine if filtering/sorting is enabled

JXList

public JXList(ListModel dataModel,
              boolean filterEnabled)
Constructs a JXList with the specified model and filterEnabled property.

Parameters:
dataModel - the data model for this list
filterEnabled - boolean to determine if filtering/sorting is enabled
Throws:
IllegalArgumentException - if dataModel is null

JXList

public JXList(Object[] listData,
              boolean filterEnabled)
Constructs a JXList that displays the elements in the specified array and filterEnabled property.

Parameters:
listData - the array of Objects to be loaded into the data model
filterEnabled - boolean to determine if filtering/sorting is enabled
Throws:
IllegalArgumentException - if listData is null

JXList

public JXList(Vector<?> listData,
              boolean filterEnabled)
Constructs a JXList that displays the elements in the specified Vector and filtersEnabled property.

Parameters:
listData - the Vector to be loaded into the data model
filterEnabled - boolean to determine if filtering/sorting is enabled
Throws:
IllegalArgumentException - if listData is null
Method Detail

doFind

protected void doFind()
Starts a search on this List's visible items. This implementation asks the SearchFactory to open a find widget on itself.


getSearchable

public Searchable getSearchable()
Returns a Searchable for this component, guaranteed to be not null. This implementation lazily creates a ListSearchable if necessary.

Returns:
a not-null Searchable for this list.
See Also:
setSearchable(Searchable), ListSearchable

setSearchable

public void setSearchable(Searchable searchable)
Sets the Searchable for this component. If null, a default Searchable will be created and used.

Parameters:
searchable - the Searchable to use for this component, may be null to indicate using the list's default searchable.
See Also:
getSearchable()

setRolloverEnabled

public void setRolloverEnabled(boolean rolloverEnabled)
Sets the property to enable/disable rollover support. If enabled, the list fires property changes on per-cell mouse rollover state, i.e. when the mouse enters/leaves a list cell.

This can be enabled to show "live" rollover behaviour, f.i. the cursor over a cell rendered by a JXHyperlink.

Default value is disabled.

Parameters:
rolloverEnabled - a boolean indicating whether or not the rollover functionality should be enabled.
See Also:
isRolloverEnabled(), getLinkController(), createRolloverProducer(), RolloverRenderer

isRolloverEnabled

public boolean isRolloverEnabled()
Returns a boolean indicating whether or not rollover support is enabled.

Returns:
a boolean indicating whether or not rollover support is enabled.
See Also:
setRolloverEnabled(boolean)

getLinkController

protected ListRolloverController<JXList> getLinkController()
Returns the RolloverController for this component. Lazyly creates the controller if necessary, that is the return value is guaranteed to be not null.

PENDING JW: rename to getRolloverController

Returns:
the RolloverController for this tree, guaranteed to be not null.
See Also:
setRolloverEnabled(boolean), createLinkController(), RolloverController

createLinkController

protected ListRolloverController<JXList> createLinkController()
Creates and returns a RolloverController appropriate for this component.

Returns:
a RolloverController appropriate for this component.
See Also:
getLinkController(), RolloverController

createRolloverProducer

protected RolloverProducer createRolloverProducer()
Creates and returns the RolloverProducer to use with this tree.

Returns:
RolloverProducer to use with this tree
See Also:
setRolloverEnabled(boolean)

resetSortOrder

public void resetSortOrder()
Removes the interactive sorter.


toggleSortOrder

public void toggleSortOrder()
Toggles the sort order of the items.

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.

PENDING: where to get the comparator from?


setSortOrder

public void setSortOrder(SortOrder sortOrder)
Sorts the list using SortOrder. Respects the JXList's sortable and comparator properties: routes the comparator to the SortController and does nothing if !isFilterEnabled().

Parameters:
sortOrder - the sort order to use. If null or SortOrder.UNSORTED, this method has the same effect as resetSortOrder();

getSortOrder

public SortOrder getSortOrder()
Returns the SortOrder.

Returns:
the interactive sorter's SortOrder or SortOrder.UNSORTED

getComparator

public Comparator<?> getComparator()
Returns:
the comparator used.
See Also:
setComparator(Comparator)

setComparator

public void setComparator(Comparator<?> comparator)
Sets the comparator used. As a side-effect, the current sort might be updated. The exact behaviour is defined in #updateSortAfterComparatorChange.

Parameters:
comparator - the comparator to use.

updateSortAfterComparatorChange

protected void updateSortAfterComparatorChange()
Updates sort after comparator has changed. Here: sets the current sortOrder with the new comparator.


getSortController

protected SortController getSortController()
returns the currently active SortController. Will be null if !isFilterEnabled().

Returns:
the currently active SortController may be null

getElementAt

public Object getElementAt(int viewIndex)
returns the element at the given index. The index is in view coordinates which might differ from model coordinates if filtering is enabled and filters/sorters are active.

Parameters:
viewIndex - the index in view coordinates
Returns:
the element at the index
Throws:
IndexOutOfBoundsException - if viewIndex < 0 or viewIndex >= getElementCount()

getElementCount

public int getElementCount()
Returns the number of elements in this list in view coordinates. If filters are active this number might be less than the number of elements in the underlying model.

Returns:
number of elements in this list in view coordinates

convertIndexToModel

public int convertIndexToModel(int viewIndex)
Convert row index from view coordinates to model coordinates accounting for the presence of sorters and filters.

Parameters:
viewIndex - index in view coordinates
Returns:
index in model coordinates
Throws:
IndexOutOfBoundsException - if viewIndex < 0 or viewIndex >= getElementCount()

convertIndexToView

public int convertIndexToView(int modelIndex)
Convert index from model coordinates to view coordinates accounting for the presence of sorters and filters. PENDING Filter guards against out of range - should not?

Parameters:
modelIndex - index in model coordinates
Returns:
index in view coordinates if the model index maps to a view coordinate or -1 if not contained in the view.

getWrappedModel

public ListModel getWrappedModel()
returns the underlying model. If !isFilterEnabled this will be the same as getModel().

Returns:
the underlying model

setFilterEnabled

public void setFilterEnabled(boolean enabled)
Enables/disables filtering support. If enabled all row indices - including the selection - are in view coordinates and getModel returns a wrapper around the underlying model. Note: as an implementation side-effect calling this method clears the selection (done in super.setModel). PENDING: cleanup state transitions!! - currently this can be safely applied once only to enable. Internal state is inconsistent if trying to disable again. As a temporary emergency measure, this will throw a IllegalStateException. see Issue #2-swinglabs.

Parameters:
enabled -
Throws:
IllegalStateException - if trying to disable again.

isFilterEnabled

public boolean isFilterEnabled()
Returns:
a indicating if filtering is enabled.
See Also:
setFilterEnabled(boolean)

setSelectionModel

public void setSelectionModel(ListSelectionModel newModel)
Sets the selectionModel for the list to a non-null ListSelectionModel implementation. The selection model handles the task of making single selections, selections of contiguous ranges, and non-contiguous selections.

This is a JavaBeans bound property.

Overridden to update selectionMapper

Overrides:
setSelectionModel in class JList
Parameters:
newModel - the ListSelectionModel that implements the selections
See Also:
JList.getSelectionModel()

setModel

public void setModel(ListModel model)
Sets the model that represents the contents or "value" of the list and clears the list selection after notifying PropertyChangeListeners.

This is a JavaBeans bound property.

Sets the underlying data model. Note that if isFilterEnabled you must call getWrappedModel to access the model given here. In this case getModel returns a wrapper around the data!

Overrides:
setModel in class JList
Parameters:
model - the data model for this list.
See Also:
JList.getModel()

getSelectionMapper

protected SelectionMapper getSelectionMapper()
widened access for testing...

Returns:
the selection mapper

getFilters

public FilterPipeline getFilters()
Returns the FilterPipeline assigned to this list, or null if filtering not enabled.

Returns:
the FilterPipeline assigned to this list, or null if !isFiltersEnabled().

setFilters

public void setFilters(FilterPipeline pipeline)
Sets the FilterPipeline for filtering the items of this list, maybe null to remove all previously applied filters. Note: the current "interactive" sortState is preserved (by internally copying the old sortKeys to the new pipeline, if any). PRE: isFilterEnabled()

Parameters:
pipeline - the FilterPipeline to use, null removes all filters.
Throws:
IllegalStateException - if !isFilterEnabled()

getFilterPipelineListener

protected PipelineListener getFilterPipelineListener()
returns the listener for changes in filters.


createPipelineListener

protected PipelineListener createPipelineListener()
creates the listener for changes in filters.


updateOnFilterContentChanged

protected void updateOnFilterContentChanged()
method called on change notification from filterpipeline.


getComponentAdapter

protected ComponentAdapter getComponentAdapter()
Returns:
the unconfigured ComponentAdapter.

getComponentAdapter

protected ComponentAdapter getComponentAdapter(int index)
Convenience to access a configured ComponentAdapter. Note: the column index of the configured adapter is always 0.

Parameters:
index - the row index in view coordinates, must be valid.
Returns:
the configured ComponentAdapter.

setHighlighters

public void setHighlighters(Highlighter... highlighters)
Sets the Highlighters to the table, replacing any old settings. None of the given Highlighters must be null.

This is a bound property.

Note: as of version #1.257 the null constraint is enforced strictly. To remove all highlighters use this method without param.

Parameters:
highlighters - zero or more not null highlighters to use for renderer decoration.
Throws:
NullPointerException - if array is null or array contains null values.
See Also:
getHighlighters(), addHighlighter(Highlighter), removeHighlighter(Highlighter)

getHighlighters

public Highlighter[] getHighlighters()
Returns the Highlighters used by this table. Maybe empty, but guarantees to be never null.

Returns:
the Highlighters used by this table, guaranteed to never null.
See Also:
setHighlighters(Highlighter[])

addHighlighter

public void addHighlighter(Highlighter highlighter)
Appends a Highlighter to the end of the list of used Highlighters. The argument must not be null.

Parameters:
highlighter - the Highlighter to add, must not be null.
Throws:
NullPointerException - if Highlighter is null.
See Also:
removeHighlighter(Highlighter), setHighlighters(Highlighter[])

removeHighlighter

public void removeHighlighter(Highlighter highlighter)
Removes the given Highlighter.

Does nothing if the Highlighter is not contained.

Parameters:
highlighter - the Highlighter to remove.
See Also:
addHighlighter(Highlighter), setHighlighters(Highlighter...)

getCompoundHighlighter

protected CompoundHighlighter getCompoundHighlighter()
Returns the CompoundHighlighter assigned to the table, null if none. PENDING: open up for subclasses again?.

Returns:
the CompoundHighlighter assigned to the table.

getHighlighterChangeListener

protected ChangeListener getHighlighterChangeListener()
Returns the ChangeListener to use with highlighters. Lazily creates the listener.

Returns:
the ChangeListener for observing changes of highlighters, guaranteed to be not-null

createHighlighterChangeListener

protected ChangeListener createHighlighterChangeListener()
Creates and returns the ChangeListener observing Highlighters.

Here: repaints the table on receiving a stateChanged.

Returns:
the ChangeListener defining the reaction to changes of highlighters.

getStringAt

public String getStringAt(int row)
Returns the string representation of the cell value at the given position.

Parameters:
row - the row index of the cell in view coordinates
Returns:
the string representation of the cell value as it will appear in the table.

createDefaultCellRenderer

protected ListCellRenderer createDefaultCellRenderer()
Creates and returns the default cell renderer to use. Subclasses may override to use a different type. Here: returns a DefaultListRenderer.

Returns:
the default cell renderer to use with this list.

getCellRenderer

public ListCellRenderer getCellRenderer()
Returns the object that renders the list items.

Overridden to return the delegating renderer which is wrapped around the original to support highlighting. The returned renderer is of type DelegatingRenderer and guaranteed to not-null

Overrides:
getCellRenderer in class JList
Returns:
the ListCellRenderer
See Also:
setCellRenderer(ListCellRenderer), JXList.DelegatingRenderer

getWrappedCellRenderer

public ListCellRenderer getWrappedCellRenderer()
Returns the renderer installed by client code or the default if none has been set.

Returns:
the wrapped renderer.
See Also:
setCellRenderer(ListCellRenderer)

setCellRenderer

public void setCellRenderer(ListCellRenderer renderer)
Sets the delegate that's used to paint each cell in the list. If prototypeCellValue was set then the fixedCellWidth and fixedCellHeight properties are set as well. Only one PropertyChangeEvent is generated however - for the cellRenderer property.

The default value of this property is provided by the ListUI delegate, i.e. by the look and feel implementation.

To see an example which sets the cell renderer, see the class description above.

This is a JavaBeans bound property.

Overridden to wrap the given renderer in a DelegatingRenderer to support highlighting.

Note: the wrapping implies that the renderer returned from the getCellRenderer is not the renderer as given here, but the wrapper. To access the original, use getWrappedCellRenderer.

Overrides:
setCellRenderer in class JList
Parameters:
renderer - the ListCellRenderer that paints list cells
See Also:
getWrappedCellRenderer(), getCellRenderer()

updateUI

public void updateUI()
Resets the UI property with the value from the current look and feel.

Overridden to update renderer and Highlighters.

Overrides:
updateUI in class JList
See Also:
UIManager.getUI(javax.swing.JComponent)

updateHighlighterUI

protected void updateHighlighterUI()
Updates highlighter after updateUI changes.

See Also:
UIDependent