6 Stimmen

Zwei JTables gleichzeitig sortieren

Ich habe zwei JTables mit verschiedenen Objekten der gleichen TableModel-Klasse erstellt. Wenn ich auf eine Spalte in Tabelle 1 klicke, um zu sortieren, ist die Anforderung, dass die andere Tabelle 2 auch auf der Grundlage derselben Spalte sortiert werden sollte, auf die in JTable 1 geklickt wurde. Gibt es eine Möglichkeit, herauszufinden, welche Spalte in Tabelle 1 verwendet wurde oder auf welcher die Sortierung basiert. Gibt es eine Möglichkeit, die Sortierung über einen Methodenaufruf in Tabelle 2 für dieselbe Spalte aufzurufen?

Bitte machen Sie Vorschläge oder verweisen Sie auf Java-Apis. Wenn es einen Link mit einem Beispiel gibt, wäre das ebenfalls eine große Hilfe. -Paul.

8voto

kleopatra Punkte 50122

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

1voto

duffymo Punkte 298898

Ich denke, dass die Benutzeroberfläche das Problem nur verkompliziert. Denken Sie an die zugrundeliegenden Tabellendaten, dann geht es Ihnen besser. Wenn man das richtig hinbekommt, ist es eine einfache Frage der Anzeige.

Das Sortieren einer Sammlung von Werten ist nicht schwierig. Sie können verwenden java.util.Collections y Comparable um das zu tun.

Der Trick besteht darin, die Verknüpfung zwischen den Indizes der sortierten Spalte und den übrigen Spalten der Zeile aufrechtzuerhalten.

0voto

Stephan Punkte 4306

Der einfachste Weg ist die Sortierung der zugrunde liegenden Daten. Oder Sie können einen Sortlistener implementieren und ihn zu beiden Tabellen hinzufügen.

Der folgende Thread zeigt, wie man es in JXTable implementiert:

http://www.java.net/node/680987

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X