Bonjour,

J'aimerai réaliser un filtre sur une colonne de ma JTable mais les résultats que ce filtre me ramène ne me convienne pas.

En effet, je voudrais qu'on puisse introduire dans la zone de recherche (filtre) aussi bien le terme recherché en minuscule qu'en majuscule (ou même les deux).

Le comparator par défaut est visible case sensitive, j'ai donc eut l'idée d'implémenter ma propre classe qui étend Comparator et qui implémente la fonction compare.

Voici mon code pour cette classe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MyComparatorLowerCaseForStringIntoTable implements Comparator<String>
{
    public int compare(String o1, String o2)
    {
        try
        {
            final String s1 = o1.toLowerCase();
            final String s2 = o2.toLowerCase();
 
            System.out.println("First: " + s1 + "-  Second: " + s2);
 
            return s1.compareTo(s2);
        }
        catch(Exception e)
        {
            return 0;
        }
    }
 
}
Ensuite je fais ceci dans mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
model = new MyTableModel(titresCol, datas);
        offersListTable.setModel(model);
 
        offersListTable.setAutoCreateRowSorter(true);
        sorter = new TableRowSorter<MyTableModel>(model);
        offersListTable.setRowSorter(sorter);
        sorter.setSortsOnUpdates(true);
 
        MyComparatorLowerCaseForStringIntoTable myComparator = new MyComparatorLowerCaseForStringIntoTable();
        sorter.setComparator(2, myComparator);
et ce bout de code pour le filtre suivant ce qui est introduit dans un TextField :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void newFilterMarque()
    {
        RowFilter<MyTableModel, Object> rf = null;
        //If current expression doesn't parse, don't update.
        try
        {
            rf = RowFilter.regexFilter(marqueTextField.getText(), 2);
        }
        catch (java.util.regex.PatternSyntaxException e)
        {
            return;
        }
        sorter.setRowFilter(rf);
    }
Mon problème...
Ca ne fonctionne pas du tout.
On ne passe jamais dans la méthode compare de la classe Comparator.
Donc le filtre applique par défaut la comparaison case sensitive.

Je ne vois pas où j'ai fait une erreur, alors si vous pouviez m'aider...

D'avance merci.