Bonjour,

J'utilise une JTable pour afficher une liste d'éléments d'une table. Parme les différentes colonnes, il y a une colonne de date.

Pour l'affichage, j'utilise en renderer qui formate la date de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
DateUtils.getFormat(DateTimeFormat.DATE_SHORT, " ", DateTimeFormat.TIME_SHORT).format(myDate);
On me demande d'ajouter une zone de saisie pour filtrer les lignes. Ce filtre doit jouer sur plusieurs colonnes dont la date.

Pour les colonnes qui affichent du texte je n'ai pas de soucis. Dans la colonne date, j'ai par exemple "18/04/2011 10:38". si je tape :3, j'ai bien toute les lignes contenant une heure avec ce format qui sont filtrées. Par contre si je tape 18/, à partir du moment où je saisie le '/', le filtre ne me renvoie plus aucun résultat.

Voici mon filtre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
String regex2 = "(?i)";
regex2 = regex2.concat(Pattern.quote(getTxtFilter().getText()));
txtFilter = RowFilter.regexFilter(regex2, MessageColumns.MSG_DATE.ordinal(), MessageColumns.USER_LOGIN.ordinal(),
                        MessageColumns.MSG_ERROR.ordinal());
sorter.setRowFilter(txtFilter);
Auriez vous une idée du problème ?

[Résolution]
Je viens de résoudre mon problème.
J'ai redéfini une TableStringConverter pour la méthode setStringConverter de l'objet sorter.

Par défaut le le filtre applique un toString à chaque colonne qu'il doit tester.
J'ai donc surcharger le tostring pour faire un format de la date.

Voici le bout de code que j'ai rajouté

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
            sorter.setStringConverter(new TableStringConverter() {
 
                @Override
                public String toString(final TableModel model, final int row, final int column) {
                    Object value = model.getValueAt(row, column);
                    if (value instanceof Date) {
                        final Date myDate = (Date) value;
                        final String strDate = DateUtils.getFormat(DateTimeFormat.DATE_SHORT, " ", DateTimeFormat.TIME_SHORT).format(myDate);
                        value = strDate;
                    }
                    return value.toString();
                }
            });