Domanda

Ho un certo numero di JXTables che hanno tutti le stesse colonne (ma dati diversi). È possibile ordinare i dati cliccando su un'intestazione di una delle colonne. Quello che voglio ora, è che gli altri tavoli sono ordinati allo stesso modo quando si fa clic sul titolo di una delle tabella.

È stato utile?

Soluzione

Si potrebbe definire una classe mediatore che fa riferimento a JTable di ogni RowSorter e si registra come un RowSorterListener con ogni sorter. Quando un dato selezionatrice cambia si potrebbe recuperare l'attuale lista di chiavi di ordinamento utilizzando getSortKets() e passarli ad ogni altro sorter utilizzando setSortKeys(List<? extends SortKey>).

Esempio

Per prima cosa definire la classe mediatore:

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) {
    ...
  }
}

Ora attuiamo sorterChanged(RowSorterEvent e) per rispondere ad un dato evento sorter:

  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);
        }
      }
    }
  }

Altri suggerimenti

Io non lo farei, perché ci vuole controllare lontano dall'utente:. S / he può decidere di avere le tabelle ordinate in modo diverso, per confrontare le diverse parti dei dati

Al contrario, aggiungere un "Ordina per" per il vostro menu Visualizza. La modifica di questa opzione ordinerà tutte le tabelle, ma poi lasciarli in pace a meno che l'utente vuole ordinare una tabella specifica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top