RowSorter (Java API)

Aus Byte-Welt Wiki
Wechseln zu: Navigation, Suche

Der RowSorter wird verwendet, um irgendeine graphische Tabelle (oder Liste) zu sortieren. Der RowSorter wird derzeit hauptsächlich von der JTable verwendet, um die Zeilen nach einer oder mehreren Spalten zu sortieren, und um Zeilen auszublenden. Entsprechend wird in diesem Artikel immer davon ausgegangen, dass eine JTable involviert ist. Der RowSorter ändert nicht direkt etwas an der JTable oder am TableModel, er bietet nur Informationen, welche Zeile mit welcher vertauscht werden soll.

Bevor man einen RowSorter implementiert, sollte man einen Blick auf die schon existierende Implementation TableRowSorter werfen, der von der abstrakten Klasse DefaultRowSorter, erbt. In den meisten Fällen werden alle benötigten Funktionen schon vom TableRowSorter abgedeckt.

Die Methoden des RowSorters lassen sich grob in 3 Gruppen gliedern:

Konvertierung

  • Die Methode convertRowIndexToView bekommt als Argument eine Zeile des Models, und sagt dem Aufrufer, an welcher Position diese Zeile angezeigt werden soll. Wenn die Zeile garnicht gezeigt werden soll, so gibt diese Methode -1 zurück.
  • Die Methode convertRowIndexToView bekommt als Argument die Position an der etwas gezeichnet wird, und sagt dem Aufrufer, welche Zeile dies im Model entspricht.

Interaktion

  • Wann immer der Benutzer die Tabelle neu sortieren möchte, wird toggleSortOrder aufgerufen. Das einzige Argument sagt dem RowSorter, welche Spalte betroffen ist. Nachdem der RowSorter seine internen Strukturen aktualisiert hat, muss er allfällige RowSorterListener über die Veränderung informieren.
  • Die Methoden get/setSortKeys werden benutzt, um die Sortierungen direkt zu setzen oder abzufragen. Der erste Eintrag der Liste ist der wichtigste, der letzte hingegen der unbedeutendste. Eine JTable zeichnet meist einen kleinen Pfeil über der Spalte, die vom ersten Eintrag betroffen ist.

Information

  • Die verschiedenen Methoden rowsInserted/Updated/Removed und allRowsChanged werden automatisch aufgerufen, wenn das benutzte Model verändert wird (der RowSorter muss also keine Observer beim Model registrieren).
  • add/removeRowSorterListener registriert oder entfernt einen RowSorterListener. Diese Listener müssen aufgerufen werden, wenn die Sortierreihenfolge verändert wurde.
  • getModel, getView/ModelRowCount liefern schliesslich zusätzliche Informationen über das Model und die Ansicht.