JXTable écouter trier et trier un tableau similaire de la même façon
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.
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.