Question

J'ai un certain nombre de JXTables qui ont tous les mêmes colonnes (mais des données différentes). Vous pouvez trier les données en cliquant sur l'en-tête de l'une des colonnes. Ce que je veux maintenant, est que les autres tables sont classés de la même façon en cliquant sur l'en-tête d'un de la table.

Était-ce utile?

La solution

Vous pouvez définir une classe de médiateur qui fait référence à la JTable de chaque RowSorter et s'enregistre en tant que RowSorterListener à chaque trieur. Quand un trieur donné les changements que vous pouvez récupérer la liste des clés de tri en utilisant getSortKets() et les transmettre à tous les autres trieuse en utilisant setSortKeys(List<? extends SortKey>).

Exemple

Nous définissons d'abord la classe de médiateur:

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

Maintenant, nous mettons en œuvre sorterChanged(RowSorterEvent e) pour répondre à un événement trieuse donné:

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

Autres conseils

Je ne ferais pas ça, parce qu'il prend le contrôle loin de l'utilisateur. S / il peut vouloir avoir les tables classés différemment, pour comparer les différents morceaux de données

, ajouter plutôt une « Trier par » option à votre menu Affichage. La modification de cette option trier toutes les tables, mais les laisser seuls à moins que l'utilisateur veut trier une table spécifique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top