Salut,
Déjà je trouve que tu t'es bien embêté avec ton Comparator !
Ceci aurait été amplement suffisant :
1 2 3 4 5
| class MyComparatorLowerCaseForStringIntoTable implements Comparator<String> {
public int compare(String o1, String o2) {
return o1.compareToIgnoreCase(o2);
}
} |
Sans compter que tu aurais très bien pu utiliser celui en standard dans la classe String :
sorter.setComparator(2, String.CASE_INSENSITIVE_ORDER);
A noter également qu'on pourrait se tourner vers les Collator, qui inclut des règles de trie spécifiques à une locale...
Enfin tu mélanges les notions de "trie" et de "filtre".
Le Comparator est utilisé uniquement pour trier les colonnes lorsque tu cliques sur l'entête.
Il n'y a aucune raison de l'utiliser pour le filtre. Si tu veux avoir une notion case-insensitive lors du filtre tu dois le spécifier...
Avec les expressions régulières cela se fait via "(?i)" :
RowFilter.regexFilter("(?i)" + marqueTextField.getText(), 2);
Au passage je ne sais pas ce que tu cherches à faire : les utilisateurs vont rentrer des expressions régulières ???
Si c'est simplement pour filtrer par texte rapidement (sans expression régulière pour l'utilisateur), il faudrait protéger le text (afin d'éviter que certains caractères faussent le résultat ou génère des erreurs) :
RowFilter.regexFilter("(?i)" + Pattern.quote( marqueTextField.getText() ), 2);
Ou tu pourrais même implémenter ton propre RowFilter...
a++
Partager