Bonjour tout le monde
Comme dit dans le titre, j'aimerai trier un JTable selon les valeurs d'une colonne contenant des dates, dates qui seront au format "dd-mmm.", par exemple, "25-sep." pour le 25 septembre.
Après des recherches je suis tombé sur deux liens, le premier (je ne sais pas si je peux le citer, il ne provient pas de ce site, et la dernière fois que j'ai cité un lien provenant d'un autre site d'entraide, mon message a été supprimé . . .) indiquait qu'il fallait surcharger la méthode "toString()", d'une classe héritant de "java.util.Date", classe que j'ai appelée PDate.
J'ai donc dans le getValueAt(int row, int column) de mon Model une partie :
avec comme constructeur dans PDate :
Code : Sélectionner tout - Visualiser dans une fenêtre à part return new PDate(arrayListDeDonnees.get(row).getDateA());
bien que le constructeur Date(int, int, int) soit "deprecated" (tout comme getYear/Month/Date() ), je ne sais pas du tout comment faire autrement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public PDateJourMois(Date date){ super(date.getYear(), date.getMonth()-1, date.getDate()); }
Avec la fameuse méthode "toString()" (attention les yeux, ça pique un peu
Malgré que ça ne soit pas beau, et que ça soit "deprecated", ça a bien pour effet d'afficher ma date de la façon souhaitée.
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 public String toString(){ String res = this.getDate() + "-"; String mois; switch (this.getMonth() + 1) { case 1: { mois = "jan."; break; } case 2: { mois = "fév."; break; } case 3: { mois = "mars"; break; } case 4: { mois = "avr."; break; } case 5: { mois = "mai"; break; } case 6: { mois = "juin"; break; } case 7: { mois = "jui."; break; } case 8: { mois = "août"; break; } case 9: { mois = "sep."; break; } case 10: { mois = "oct."; break; } case 11: { mois = "nov."; break; } case 12: { mois = "déc."; break; } default: mois = null; break; } res = res + mois; return res; }
Tout ceci étant fait, j'ai appliqué ce code :
Les lignes marquées "X" sont des lignes que j'ai copiées-collées, sans vraiment les comprendre je les ai prises ici ==> http://www.developpez.net/forums/d11...r.php?u=365317
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 tab = new JTable(new TabModel(alTest));//TabModel est une classe héritant de AbstractTableModel tab.setDefaultRenderer(String.class, new TabRenderer());//TabRenderer est une classe hériant de DefaultTableCellRenderer tab.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); TableRowSorter<TabModel> sorter = new TableRowSorter<TabModel>((TabModel)tab.getModel());//X tab.setRowSorter(sorter);//X this.add(new JScrollPane(tab), BorderLayout.CENTER); SortKey[] sks = new SortKey[]{new RowSorter.SortKey(1, SortOrder.ASCENDING)};//X tab.getRowSorter().setSortKeys(Arrays.asList(sks));//X
Et là, au moment de l'exécution du programme, j'ai l'erreur suivante :
à la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: variables.generales.PDate cannot be cast to java.lang.String
Donc je comprends bien pourquoi il ne veut pas, car la date n'est pas considérée comme un String, mais comment faire pour que getRowSorter tienne compte de la date ? Il faut que je le surcharge ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part tab.getRowSorter().setSortKeys(Arrays.asList(sks));
PS :
J'avais aussi simplement fait :
afin que le tableau apparaisse ordonné mais ça plantait avec la même erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 tab.setAutoCreateRowSorter(true); tab.getRowSorter().toggleSortOrder(1); tab.setAutoCreateRowSorter(false);à la deuxième ligne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: variables.generales.PDate cannot be cast to java.lang.String
Donc voilà, un petit coup de main ne serait pas de refus
Merci d'avance les gens !
Partager