Class ListSortUI
- java.lang.Object
-
- org.jdesktop.swingx.plaf.basic.core.ListSortUI
-
public final class ListSortUI extends java.lang.Object
ListSortUI provides support for managing the synchronization between RowSorter, SelectionModel and ListModel if a JXList is sortable.This implementation is an adaption of JTable.SortManager fit to the needs of a ListUI. In contrast to JTable tradition, the ui delegate has full control about listening to model/selection changes and updating the list accordingly. So the role of this class is that of a helper to the ListUI (vs. as a helper of the JTable).
It's up to the ListUI to listen to model/selection and propagate the notification to this class if a sorter is installed, but still do the usual updates (layout, repaint) itself. On the other hand, listening to the sorter and updating list state accordingly is completely done by this.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
ListSortUI.ModelChange
ModelChange is used when sorting to restore state, it corresponds to data from a TableModelEvent.
-
Field Summary
Fields Modifier and Type Field Description private boolean
ignoreSortChange
private int[]
lastModelSelection
private JXList
list
private int
modelLeadIndex
private javax.swing.ListSelectionModel
modelSelection
private javax.swing.RowSorter<? extends javax.swing.ListModel>
sorter
private boolean
sorterChanged
private javax.swing.event.RowSorterListener
sorterListener
private boolean
syncingSelection
-
Constructor Summary
Constructors Constructor Description ListSortUI(JXList list, javax.swing.RowSorter<? extends javax.swing.ListModel> sorter)
Intanstiates a SortUI on the list which has the given RowSorter.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
allChanged()
Invoked when the underlying model has completely changed.private void
cacheModelSelection(javax.swing.event.RowSorterEvent sortEvent)
private int
convertRowIndexToModel(javax.swing.event.RowSorterEvent e, int viewIndex)
private int
convertRowIndexToView(ListSortUI.ModelChange change, int modelIndex)
Converts a model index to view index.private int[]
convertSelectionToModel(javax.swing.event.RowSorterEvent e)
Converts the selection to model coordinates.protected javax.swing.event.RowSorterListener
createRowSorterListener()
Creates and returns a RowSorterListener.void
dispose()
Disposes any resources used by this SortManager.private javax.swing.ListSelectionModel
getViewSelectionModel()
void
modelChanged(javax.swing.event.ListDataEvent e)
Called after notification from ListModel.private void
notifySorter(ListSortUI.ModelChange change)
Notifies the sorter of a change in the underlying model.private void
prepareForChange(javax.swing.event.RowSorterEvent sortEvent)
Invoked when the RowSorter has changed.private void
prepareForChange(ListSortUI.ModelChange change)
Invoked when the list model has changed.private void
processChange(ListSortUI.ModelChange change)
Inovked when either the table has changed or the sorter has changed and after the sorter has been notified.private void
restoreSelection(ListSortUI.ModelChange change)
Restores the selection from that in terms of the model.private void
restoreSortingSelection(int[] selection, int lead, ListSortUI.ModelChange change)
Restores the selection after a model event/sort order changes.protected void
sortedChanged(javax.swing.event.RowSorterEvent e)
Called after notification from RowSorter.void
viewSelectionChanged(javax.swing.event.ListSelectionEvent e)
Called after notification from selectionModel.
-
-
-
Field Detail
-
sorter
private javax.swing.RowSorter<? extends javax.swing.ListModel> sorter
-
list
private JXList list
-
modelSelection
private javax.swing.ListSelectionModel modelSelection
-
modelLeadIndex
private int modelLeadIndex
-
syncingSelection
private boolean syncingSelection
-
lastModelSelection
private int[] lastModelSelection
-
sorterChanged
private boolean sorterChanged
-
ignoreSortChange
private boolean ignoreSortChange
-
sorterListener
private javax.swing.event.RowSorterListener sorterListener
-
-
Constructor Detail
-
ListSortUI
public ListSortUI(JXList list, javax.swing.RowSorter<? extends javax.swing.ListModel> sorter)
Intanstiates a SortUI on the list which has the given RowSorter.- Parameters:
list
- the list to control, must not be nullsorter
- the rowSorter of the list, must not be null- Throws:
java.lang.NullPointerException
- if either the list or the sorter is nulljava.lang.IllegalStateException
- if the sorter is not the sorter installed on the list
-
-
Method Detail
-
dispose
public void dispose()
Disposes any resources used by this SortManager. Note: this instance must not be used after dispose!
-
modelChanged
public void modelChanged(javax.swing.event.ListDataEvent e)
Called after notification from ListModel.- Parameters:
e
- the change event from the listModel.
-
viewSelectionChanged
public void viewSelectionChanged(javax.swing.event.ListSelectionEvent e)
Called after notification from selectionModel. Invoked when the selection, on the view, has changed.
-
sortedChanged
protected void sortedChanged(javax.swing.event.RowSorterEvent e)
Called after notification from RowSorter.- Parameters:
e
- RowSorter event of type SORTED.
-
prepareForChange
private void prepareForChange(javax.swing.event.RowSorterEvent sortEvent)
Invoked when the RowSorter has changed. Updates the internal cache of the selection based on the change.- Parameters:
sortEvent
- the notification- Throws:
java.lang.NullPointerException
- if the given event is null.
-
prepareForChange
private void prepareForChange(ListSortUI.ModelChange change)
Invoked when the list model has changed. This is invoked prior to notifying the sorter of the change. Updates the internal cache of the selection based on the change.- Parameters:
change
- the notification- Throws:
java.lang.NullPointerException
- if the given event is null.
-
cacheModelSelection
private void cacheModelSelection(javax.swing.event.RowSorterEvent sortEvent)
-
processChange
private void processChange(ListSortUI.ModelChange change)
Inovked when either the table has changed or the sorter has changed and after the sorter has been notified. If necessary this will reapply the selection and variable row heights.
-
restoreSelection
private void restoreSelection(ListSortUI.ModelChange change)
Restores the selection from that in terms of the model.
-
restoreSortingSelection
private void restoreSortingSelection(int[] selection, int lead, ListSortUI.ModelChange change)
Restores the selection after a model event/sort order changes. All coordinates are in terms of the model.
-
convertRowIndexToView
private int convertRowIndexToView(ListSortUI.ModelChange change, int modelIndex)
Converts a model index to view index. This is called when the sorter or model changes and sorting is enabled.- Parameters:
change
- describes the TableModelEvent that initiated the change; will be null if called as the result of a sort
-
convertRowIndexToModel
private int convertRowIndexToModel(javax.swing.event.RowSorterEvent e, int viewIndex)
-
convertSelectionToModel
private int[] convertSelectionToModel(javax.swing.event.RowSorterEvent e)
Converts the selection to model coordinates. This is used when the model changes or the sorter changes.
-
notifySorter
private void notifySorter(ListSortUI.ModelChange change)
Notifies the sorter of a change in the underlying model.
-
getViewSelectionModel
private javax.swing.ListSelectionModel getViewSelectionModel()
-
allChanged
private void allChanged()
Invoked when the underlying model has completely changed.
-
createRowSorterListener
protected javax.swing.event.RowSorterListener createRowSorterListener()
Creates and returns a RowSorterListener. This implementation calls sortedChanged if the event is of type SORTED.- Returns:
- rowSorterListener to install on sorter.
-
-