3 votes

Java Swing : Combiner RowFilter.andFilter avec RowFilter.orFilter

Je n'ai pas réussi à le faire fonctionner, et les exemples que j'ai trouvés ne fonctionnaient qu'avec un seul RowFilter.andFilter ou un RowFilter.orFilter. Existe-t-il un moyen d'en combiner deux pour obtenir quelque chose comme (A || B) && (C || D) ? Vous trouverez ci-dessous un exemple de code illustrant ce que je tente de faire.

ArrayList<RowFilter<Object,Object>> arrLstColorFilters = new ArrayList<RowFilter<Object,Object>>();
ArrayList<RowFilter<Object,Object>> arrLstCandyFilters = new ArrayList<RowFilter<Object,Object>>();
RowFilter<Object,Object> colorFilter;
RowFilter<Object,Object> candyFilter;
TableRowSorter<TableModel> sorter;

// OR colors
RowFilter<Object,Object> blueFilter = RowFilter.regexFilter("Blue", myTable.getColumnModel().getColumnIndex("Color"));
RowFilter<Object,Object> redFilter = RowFilter.regexFilter("Red", myTable.getColumnModel().getColumnIndex("Color"));
arrLstColorFilters.add(redFilter);
arrLstColorFilters.add(blueFilter);
colorFilter = RowFilter.orFilter(arrLstColorFilters);

// OR candies
RowFilter<Object,Object> mAndMFilter = RowFilter.regexFilter("M&M", myTable.getColumnModel().getColumnIndex("Candy"));
RowFilter<Object,Object> mentosFilter = RowFilter.regexFilter("Mentos", myTable.getColumnModel().getColumnIndex("Candy"));
arrLstCandyFilters.add(mAndMFilter);
arrLstCandyFilters.add(mentosFilter);
candyFilter = RowFilter.orFilter(arrLstCandyFilters);

// Mentos and M&Ms that are red or blue (this is where I'm stuck)
sorter.setRowFilter(RowFilter.andFilter(candyFilter, colorFilter);  //this does not work

Si quelqu'un pouvait fournir un extrait fonctionnel de ce que j'essaie de faire dans la dernière ligne, ce serait très apprécié. Je maintiens actuellement deux modèles de table distincts pour contourner ce problème, et j'aimerais éviter de dupliquer les données.

Merci, Kai

8voto

Howard Points 23487

Votre dernière ligne ne compile même pas, car andFilter requiert également une liste au lieu d'arguments séparés.

Sinon, votre exemple semble fonctionner correctement dans mes tests. J'ai remplacé la dernière ligne de votre exemple par le code suivant :

ArrayList<RowFilter<Object, Object>> andFilters = new ArrayList<RowFilter<Object, Object>>();
andFilters.add(candyFilter);
andFilters.add(colorFilter);

sorter = new TableRowSorter<TableModel>(myTable.getModel());

// Mentos and M&Ms that are red or blue
sorter.setRowFilter(RowFilter.andFilter(andFilters));

myTable.setRowSorter(sorter);

Veillez à initialiser le TableRowSorter avec le modèle de table approprié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X