Frage

Ich habe eine Reihe von JXTables die alle die gleichen Spalten (aber unterschiedliche Daten). Sie können die Daten sortieren, indem Sie auf einem der Kopf einer der Spalten klicken. Was ich will, ist jetzt, dass die anderen Tabellen die gleiche Art und Weise sortiert werden, wenn sie auf dem Kopf eines der Tabelle klicken.

War es hilfreich?

Lösung

Sie können einen Mediator Klasse definieren, dass Verweise jedes JTable der RowSorter und registriert sich als RowSorterListener mit jedem Sortierer. Wenn ein gegebener Sortierer ändert konnte man seine aktuelle Liste des Sortierschlüssels mit getSortKets() abrufen und sie an jeden anderen Sortierer passiert setSortKeys(List<? extends SortKey>) verwendet wird.

Beispiel:

Zuerst definieren wir die Mediator-Klasse:

public class SortMediator implements RowSorterListener {
  private final List<RowSorter> sorters;
  private boolean changing;

  public void addRowSorter(RowSorter sorter) {
    this.sorters.add(sorter);
  }

  public void sorterChanged(RowSorterEvent e) {
    ...
  }
}

wir nun sorterChanged(RowSorterEvent e) reagieren auf einen bestimmten Sortierer Ereignis implementieren:

  public void sorterChanged(RowSorterEvent e) {
    // The changing flag prevents an infinite loop after responding to the inital
    // sort event.
    if (!changing) {
      changing = true;

      RowSorter changedSorter = e.getSource();
      List<? extends SortKey> keys = changedSorter.getKeys();

      for (RowSorter sorter : sorters) {
        if (sorter != changedSorter) {
          // Install new sort keys, which will cause the sorter to re-sort.
          // The changing flag will prevent the mediator from reacting to this.
          sorter.setSortKeys(keys);
        }
      }
    }
  }

Andere Tipps

Ich würde das nicht tun, weil sie die Kontrolle übernimmt vom Benutzer weg. / Er die Tische anders sortiert haben möchte, verschiedene Daten vergleichen

Fügen Sie stattdessen einen „Sortieren nach“ Option zu Ihrem Menü Ansicht. Das Ändern dieser Option werden alle Tabellen sortieren, aber dann lassen sie allein, wenn der Benutzer eine bestimmte Tabelle sortieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top