Filtrer les données d'un JTable [Résolu]

Signaler
Messages postés
142
Date d'inscription
dimanche 15 février 2009
Statut
Membre
Dernière intervention
1 mars 2020
-
yoanpg
Messages postés
142
Date d'inscription
dimanche 15 février 2009
Statut
Membre
Dernière intervention
1 mars 2020
-
Bonjour à tous, ;)
J'ai un JTable, contenant des données issues d'une base de données SQLite. Mon but est de filtrer les lignes à afficher dans un JTable, en fonction du contenu de plusieurs JLabels.
Malgré plusieurs heures de recherche, je n'y arrive pas.

J'ai trouvé qu'il y a possibilité de faire un modèle. Mais il faut créer une classe MyTableModel etc. Je trouve que c'est sortit l'artillerie lourde pour un petit truc. Sans compter que je n'y suis pas arriver à l'implémenter correctement :(

Sinon j'ai aussi la possibilité de vider mon JTable et refaire une requête SQL pour compléter à nouveau mon JTable. Mais comment on fait pour vider et re-remplir un JTable existant ?

Y a-t-il une autre méthode plus simple ?

Bref, je ne sais pas trop comment m'en sortir. Pouvez-vous m'aider ??
Merci d'avance :)

6 réponses

Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
272
Salut,

Je pense que ce n'est pas loin de ce que tu cherches à faire :http://codes-sources.commentcamarche.net/source/54071-filtre-sur-les-colonnes-d-une-jtable
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
272
C'est mieux comme ca ?

Table tabPatients = new Table(columns, data);
JScrollPane scrollPatients = new JScrollPane(tabPatients);
GridBagConstraints gbc_scrollPatients = new GridBagConstraints();
gbc_scrollPatients.fill = GridBagConstraints.BOTH;
gbc_scrollPatients.gridx = 1;
gbc_scrollPatients.gridy = 1;
getContentPane().add(scrollPatients, gbc_scrollPatients);


Si ce n'est pas le cas, c'est que tu as un soucis dans tes données : tes tables doivent être vides.
Messages postés
142
Date d'inscription
dimanche 15 février 2009
Statut
Membre
Dernière intervention
1 mars 2020
3
En effet ça ressemble pas mal.

Cependant, je n'arrive pas à l'intégrer dans mon programme. J'ai copié les classes Table et Filtre. Dans ma classe déjà existante (étendant une JFrame) je crée un JScrollPane contenu dans une case d'un GridBagLayout, puis je crée mon tableau :

JScrollPane scrollPatients = new JScrollPane();
GridBagConstraints gbc_scrollPatients = new GridBagConstraints();
gbc_scrollPatients.fill = GridBagConstraints.BOTH;
gbc_scrollPatients.gridx = 1;
gbc_scrollPatients.gridy = 1;
getContentPane().add(scrollPatients, gbc_scrollPatients);

Table tabPatients = new Table(columns, data);
scrollPatients.setViewportView(tabPatients);


Mais lorsque je lance mon programme, je n'ai pas de tableau :(
Qu'est ce que j'ai oublié ?
Messages postés
142
Date d'inscription
dimanche 15 février 2009
Statut
Membre
Dernière intervention
1 mars 2020
3
Non ça ne change rien :(

Et j'ai testé le contenu de columns et data, ainsi que le contenu de enregistré dans ma classe Table, et il y a des infos.

Est-ce qu'il ne faut pas faire quelque chose en plus pour faire afficher Table sous forme de JTable ?
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
272
Tu dois avoir un problème avec le JScrollPane dans ce cas, essayes de l'enlever dans un premier temps, tu devrais voir ta table.
Messages postés
142
Date d'inscription
dimanche 15 février 2009
Statut
Membre
Dernière intervention
1 mars 2020
3
Bon finalement je m'en suis sorti autrement, en recréant un nouveau JTable à chaque fois que j'appuie sur une touche. J'espère que ce sera assez rapide même quand il y aura beaucoup d'enregistrement.
Merci de ton aide.
Bonne journée