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 :
On me demande d'ajouter une zone de saisie pour filtrer les lignes. Ce filtre doit jouer sur plusieurs colonnes dont la date.
Code : Sélectionner tout - Visualiser dans une fenêtre à part DateUtils.getFormat(DateTimeFormat.DATE_SHORT, " ", DateTimeFormat.TIME_SHORT).format(myDate);
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 :
Auriez vous une idée du problème ?
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);
[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(); } });
Partager