Die Lösung besteht darin, auf die Änderungen des Sortierers der Tabelle zu achten und die sortKeys der zweiten Tabelle auf die gleichen Werte zu setzen:
RowSorterListener l = new RowSorterListener() {
@Override
public void sorterChanged(RowSorterEvent e) {
if (RowSorterEvent.Type.SORT_ORDER_CHANGED == e.getType()) {
RowSorter sorter = e.getSource();
otherTable.getRowSorter().setSortKeys(sorter.getSortKeys());
}
}
};
table.getRowSorter().addRowSorterListener(l);
Wenn Sie die Synchronisierung in beide Richtungen beibehalten müssen, registrieren Sie den Listener für beide und fügen Sie eine Logik hinzu, die nichts tut, wenn die Sortieränderung durch den Listener ausgelöst wurde.
bearbeiten
nachdem ich einen fast identischen Kommentar zweimal geschrieben habe (zu den Antworten auf den Vorschlag, die Sortierung am Modell vorzunehmen), habe ich beschlossen, ihn hier hinzuzufügen
- Technisch gesehen kann die Sortierung entweder in die Zuständigkeit des Modells oder des View-Bereichs fallen. Es gibt (in der Vergangenheit heftig diskutierte) Vor- und Nachteile beider Möglichkeiten. Sobald dies geschehen ist, sollte man sich bei der Entwicklung der Benutzeroberfläche überall an diese Entscheidung halten.
- die Beibehaltung der Indexzuordnung zwischen Modell und Ansichtskoordinatensystem ist die Herausforderung, die sich in beiden Fällen stellt
- Swing/X beschloss, es als eine siehe Verantwortung, das Aufsetzen einer modellbasierten benutzerdefinierten Sortierung/Synchronisierung ist ein Kampf gegen das System