[JTable] problème filtrage sur plusieurs table
Bonjour à vous développeurs chevronnés :ccool:
Avant de poser mon problème, mettons nous en situation.
Dans le cadre de mon projet, je dois ouvrir et lire des fichiers textes contenant des bytes que je dois traiter ---> jusque là tout va bien.
Dans mon conteneur, j'affiche ma JTable et 2 boutons de navigation qui me permettent de changer de fichier. --> jusque là, tout va bien aussi.
La relecture se fait donc après le clique sur l'un ou l'autre bouton, respectivement "Précédent" et "Suivant" - vous voyez le genre de navigation.
Ensuite, je souhaite filtrer les données de la table affichée en fonction d'une JComboBox. Et là, des phénomènes étranges arrivent.:calim2:
Premièrement, lorsque j'ouvre mon fichier initial, mon filtre ne fonctionne pas. Je dois changer le fichier et revenir dessus pour "activer" le filtre.
Je pense qu'il y a problème lors de l'initialisation (cf code en fin de post).
Secondo, j'arrive à filtrer mes données grâce à la comboBox selon mes critères imposés via un regexFilter. Cependant, je n'arrive pas à trouver la bonne expression régulère pour afficher la table "d'origine" dépourvue de filtrage.
J'ai essayé: "*", ".*", " " ...
Pour finir, j'ai un souci entre mon modèle et ma relecture de fichier. En effet, lorsque j'effectue un filtre sur le fichier X qui me renvoie, par exemple, 20 lignes, lorsque je change de fichier, j'ai une erreur qui m'indique le out of bound Exception. Et si je n'ai pas d'erreur et que mon filtre sur le fichier X me renvoie 4 valeurs, ben sur le fichier suivant, j'affiche que 4 valeurs bien que j'ai 10 fois plus de lignes à lire.
Pour complèter mon post, voici quelques lignes de codes:
Mon itialisation de ma table:
Code:
1 2 3 4 5 6 7
| model = new MyTableModel(createDataTable(readIntByte.readByte()));
sorter = new TableRowSorter<MyTableModel>(model);
tableEvent = new JTable(model);
tableEvent.setRowSorter(sorter);
//Design du tableau
tableEvent.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
tableEvent.setAutoCreateRowSorter(true); |
Mon filtre, établit grâce au site de sun, mais adapté à mes besoins:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| private void newFilter() {
RowFilter<MyTableModel, Object> rf = null;
//If current expression doesn't parse, don't update.
try {
if (choixSelect.equals("Tous")) {
rf = RowFilter.regexFilter(".*", 1);
} else {
rf = RowFilter.regexFilter(choixSelect, 1);
}
} catch (java.util.regex.PatternSyntaxException e) {
return;
}
sorter.setRowFilter(rf);
} |
et pour finir, ma relecture:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| private void refreshData() {
//Mise à jour du fichier + affichage
System.out.println("REFRESH DATA TABLE EVENT<<<<<<<<<<<<<<<<<<<<<<");
tableEvent.removeAll();
//Lecture du fichier
System.out.println("EVENT : lecture de " + FILENAME);
readIntByte = new TAFTPReadByte(URL, FILENAME, FILE_SIZE);
model.setData(createDataTable(readIntByte.readByte()));
//Creation de la table
tableEvent.setModel(model);
tableEvent.setRowSorter(sorter);
tableEvent.validate();
tableEvent.repaint();
scrollPane.validate();
scrollPane.repaint();
} |
En espérant que vous pourrrez m'éclaircir les idées:mouarf:
MustOne
Encore un autre problème de réglé
Coucou,
Décidément, je suis chaud!!:ccool:
j'ai trouvé mon erreur pour le changement de fichier (cf un peu plus haut). En fait, il falla, après avoir recréé mon tableau suite à une nouvelle lecture, valider le nouveau modèle.
Une fois ceci fait, j'ai recréé mon "sorter" avec un regexFilter sur "".
Et pour finir, j'ai revalidé.
Voici le code corrigé:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| private void refreshData() {
//Mise à jour du fichier + affichage
System.out.println("REFRESH DATA TABLE EVENT<<<<<<<<<<<<<<<<<<<<<<");
tableEvent.removeAll();
//Lecture du fichier
System.out.println("EVENT : lecture de " + FILENAME);
readIntByte = new TAFTPReadByte(URL, FILENAME, FILE_SIZE);
model.setData(createDataTable(readIntByte.readByte()));
//Creation de la table
tableEvent.setModel(model);
tableEvent.validate();
sorter.setRowFilter(RowFilter.regexFilter("", 1));
tableEvent.setRowSorter(sorter);
tableEvent.validate();
tableEvent.repaint();
scrollPane.validate();
scrollPane.repaint();
labelFileRead.setText("Lecture du fichier " + FILENAME);
} |
Bon, après je ne sais pas si c'est dans les règles de l'art...
Plus que le dernier:ccool: