J'ai une JTable avec quatre colonnes, la première contenant un nombre ou un texte, les trois autres seulement. Je suis en train de filtrer ce tableau avec l'aide d'un RowFilter:"Concaténation" andFilter et orFilter pour RowFilter
sorter = new TableRowSorter<TableModel>(myOwnTableModel);
Le checkboxFilter je suis arrivé fonctionne bien assez:
sorter.setRowFilter(RowFilter.regexFilter("^[0-9]$", 0));
Cette trieuse est activée ou désactiver selon une case à cocher qui est soit définir ou non.
Le deuxième filtrage se produit si un utilisateur met du texte dans un champ de texte. Pour lui-même, cela fonctionne déjà:
String regex = "(?i)" + Pattern.quote(s); // s = input Text of user
sorter.setRowFilter(RowFilter.regexFilter(regex, 1,2,3));
Ce que je ne peux pas faire, c'est d'activer les deux filtres en même temps. Peut-être que je réfléchis bien trop loin, mon idée a été de "concaténer" les deux filtres, le checkboxFilter devrait être "et" l'autre "ou". J'ai essayé plusieurs choses, pour moi le plus prometteur quelque chose comme regardé:
String regex = "(?i)" + Pattern.quote(s);
bookFilter = RowFilter.regexFilter(regex, 1,2,3);
sorter.setRowFilter(bookFilter.andFilter(Arrays.asList(
RowFilter.regexFilter("^[0-9]$", 0))));
Malheureusement, cela ne conduit à aucun résultat utilisable. Toutes les idées ont apprécié :)
Cela fonctionne parfaitement, merci! Je l'ai fait deux petits changements: tf.addKeyListener (nouveau KeyAdapter() { \t \t \t @Override \t \t \t publique vide keyReleased (KeyEvent arg0) { \t \t \t \t updateFilters(); \t \t \t} \t \t}); et j'ai dû utiliser la construction suivante pour pouvoir ajouter les deux filtres: sorter.setRowFilter (RowFilter.andFilter (Arrays.asList (bookFilter, checkBoxFilter))); mais je ne sais pas exactement pourquoi, mais comme ça ça marche :) – Hixi