Class AbstractSortedTableModel<T>

Type Parameters:
T - The row type upon which the table is based
All Implemented Interfaces:
RowObjectTableModel<T>, SelectionStorage<T>, SortedTableModel, Serializable, TableModel
Direct Known Subclasses:
DynamicTableModel, GDynamicColumnTableModel, LanguageSortedTableModel

public abstract class AbstractSortedTableModel<T> extends AbstractGTableModel<T> implements SortedTableModel
Table models should extends this model when they want sorting, potentially across multiple columns, but do not want Threading or do not work on Program-related data (Address, ProgramLocations, etc...).

In order to define custom comparators for a column, simply override createSortComparator(int). Otherwise, a default comparator will be created for you.

Note on sorting: it is possible that the user can disable sorting by de-selecting all sorted columns. This can also be achieved programmatically by calling setTableSortState(TableSortState) with a value of TableSortState.createUnsortedSortState().

See Also:
  • Field Details Link icon

    • hasEverSorted Link icon

      protected boolean hasEverSorted
  • Constructor Details Link icon

    • AbstractSortedTableModel Link icon

      public AbstractSortedTableModel()
    • AbstractSortedTableModel Link icon

      public AbstractSortedTableModel(int defaultSortColumn)
  • Method Details Link icon

    • setDefaultTableSortState Link icon

      protected void setDefaultTableSortState(TableSortState defaultSortState)
    • addSortListener Link icon

      public void addSortListener(SortListener l)
      Description copied from interface: SortedTableModel
      Adds a listener to be notified when the sort state of this model changes.
      Note: the listener may be stored in a weak collection, which means you have to maintain a handle to the listener so that it does not get garbage collected.
      Specified by:
      addSortListener in interface SortedTableModel
      Parameters:
      l - the listener
    • getRowObject Link icon

      public T getRowObject(int viewRow)
      Returns the corresponding object for the given row.
      Specified by:
      getRowObject in interface RowObjectTableModel<T>
      Overrides:
      getRowObject in class AbstractGTableModel<T>
      Parameters:
      viewRow - The row for which to get the row object.
      Returns:
      the row object.
    • getRowIndex Link icon

      public int getRowIndex(T rowObject)
      Returns the index of the given row object in this model; a negative value if the model does not contain the given object.

      Warning: if the this model has no sort applied, then performance will be O(n). If sorted, then performance is O(log n). You can call isSorted() to know when this will happen.

      Specified by:
      getRowIndex in interface RowObjectTableModel<T>
      Overrides:
      getRowIndex in class AbstractGTableModel<T>
      Parameters:
      rowObject - the object
      Returns:
      the row number
    • fireTableChanged Link icon

      public void fireTableChanged(TableModelEvent e)
      Overrides:
      fireTableChanged in class AbstractTableModel
    • reSort Link icon

      protected void reSort()
    • getTableSortState Link icon

      public TableSortState getTableSortState()
      Description copied from interface: SortedTableModel
      Gets the sort state of this sorted model
      Specified by:
      getTableSortState in interface SortedTableModel
      Returns:
      the current sort state
    • getPrimarySortColumnIndex Link icon

      public int getPrimarySortColumnIndex()
      Description copied from interface: SortedTableModel
      Returns the column index that is the primary sorted column; -1 if no column is sorted
      Specified by:
      getPrimarySortColumnIndex in interface SortedTableModel
      Returns:
      the index
    • setTableSortState Link icon

      public void setTableSortState(TableSortState newSortState)
      Description copied from interface: SortedTableModel
      Sets the sort state for this table model
      Specified by:
      setTableSortState in interface SortedTableModel
      Parameters:
      newSortState - the sort state
    • cleanupTableSortState Link icon

      protected TableSortState cleanupTableSortState(TableSortState state)
      A convenience method that will take a given sort state and remove from it any columns that cannot be sorted. This is useful if the client is restoring a sort state that contains columns that have been removed or are no longer sortable (such as during major table model rewrites).
      Parameters:
      state - the state
      Returns:
      the updated state
    • getPendingSortState Link icon

      public TableSortState getPendingSortState()
    • isSortPending Link icon

      public boolean isSortPending()
      Returns true if there is a pending change to the current sort state (this includes a sort state that signals no sort will be applied)
      Returns:
      true if there is a pending change to the current sort state
    • isSorted Link icon

      public boolean isSorted()
      Returns true if this model has been sorted and does not have a new pending sort that will be applied
      Returns:
      true if sorted
      See Also:
    • createSortingContext Link icon

      protected TableSortingContext<T> createSortingContext(TableSortState newSortState)
    • getValueAt Link icon

      public Object getValueAt(int rowIndex, int columnIndex)
      The default implementation of TableModel.getValueAt(int, int) that calls the abstract RowObjectTableModel.getColumnValueForRow(Object, int).
      Specified by:
      getValueAt in interface TableModel
      Overrides:
      getValueAt in class AbstractGTableModel<T>
    • initializeSorting Link icon

      protected void initializeSorting()
      This method is an attempt to help models that forget to call fireTableDataChanged(). It is expected that tables will fire the notification when they are ready to display data, even if they have that data at construction time. We put this call here so that the forgetful subclasses will have their data sorted for them the first time that this table tries to render itself.
    • getIndexForRowObject Link icon

      protected int getIndexForRowObject(T rowObject)
      A convenience method for subclasses to quickly/efficiently search for the index of a given row object that is visible in the GUI. The visible limitation is due to the fact that the data searched is retrieved from RowObjectTableModel.getModelData(), which may be filtered.
      Overrides:
      getIndexForRowObject in class AbstractGTableModel<T>
      Parameters:
      rowObject - The object for which to search.
      Returns:
      the index of the item in the data returned by
    • getIndexForRowObject Link icon

      protected int getIndexForRowObject(T rowObject, List<T> data)
      Returns the index for the given object in the given list
      Overrides:
      getIndexForRowObject in class AbstractGTableModel<T>
      Parameters:
      rowObject - the item
      data - the data
      Returns:
      the index
    • sort Link icon

      protected void sort(List<T> data, TableSortingContext<T> sortingContext)
      A default sort method that uses the Collections.sort(List, Comparator) method for sorting. Implementors with reasonably sized data sets can rely on this method. For data sets that can become large, the ThreadedTableModel is the recommended base class, as it handles loading/sorting/filtering in a threaded way.
      Parameters:
      data - The data to be sorted
      sortingContext - The context required to sort (it contains the sorting columns, a comparator for sorting, etc...).
    • sortCompleted Link icon

      protected void sortCompleted(TableSortingContext<T> sortingContext)
    • notifyModelSorted Link icon

      protected void notifyModelSorted(boolean dataChanged)
      Fires an event to let the listeners (like JTable) know that things have been changed. This method exists so that subclasses have a way to call the various tableChanged() methods without triggering this class's overridden version.
      Parameters:
      dataChanged - True signals that the actual data has changed; false signals that the data is the same, with exception that attributes of that data may be different.
    • createSortComparator Link icon

      protected Comparator<T> createSortComparator(int columnIndex)
      An extension point for subclasses to insert their own comparator objects for their data. Subclasses can create comparators for a single or multiple columns, as desired.
      Parameters:
      columnIndex - the column index
      Returns:
      the comparator