Bonjour tout le monde !
Je viens vous demander votre aide au sujet d'un projet Java que j'ai à rendre ce week-end. Il s'agit d'une "simple" gestion d'école dans laquelle nous devons utiliser base de donnée, interface graphique et relations client/serveur.
Mon problème concerne l'interface graphique et plus particulièrement le rafraîchissement d'un JTable après ajout de donnée dans ma BDD. Prenons l'exemple de l'ajout d'une majeure de cursus. J'ai un tableau JTable qui liste toutes mes majeures. Ma méthode d'ajout fonctionne très bien, lorsque je clique sur mon menu Ajouter, je peux saisir les informations dans une fenêtre JDialog personnalisée. Le problème survient lorsque je clique sur le bouton de confirmation, celle-ci se ferme, ajoute dans la BDD mais ne rafraîchit pas les données de mon tableau alors que j'ai bien développé une méthode qui est censé avertir de la mise à jour du tableau (et donc met à jour l'affichage). C'est un peu embêtant car si je veux voir les nouveaux éléments ajouter, il faut que je ferme le programme et que je le relance. Mon problème est valable pour la suppression de donnée également (logique).
En console, j'obtiens une Exception " java.lang.NullPointerException ". J'ai tout de même regardé ce que j'envoyais dans la méthode qui déclenche l'exception et celui-ci n'est pas vide (j'arrive à afficher toutes les majeures).
C'est pour moi incompréhensible car j'utilise exactement le même procédé pour mettre à jour l'affichage des étudiants en fonction de leur promotion (événement déclenché par une JComboBox), et cela fonctionne à merveille !
Voici des morceaux de code qui pourront peut-être vous éclairer :
Le listener de mon bouton d'ajout
Ma méthode listeMajeures()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 btnAddMajeure.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent arg0) { (new PersoDialog(fenetre, new AjouterMajeure(fenetre))).executer(); model.setData(listeMajeures()); } });
Ma méthode setData() présente dans la classe PersoModel
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 /** * Fonction chargeant la liste de toutes les majeures. * @return Tableau de données */ private Object[][] listeMajeures() { // On définit le titre des colonnes String[] titres = {"Nom", "Nombre de cours", "Détails", "Supprimer"}; titles = titres; // On charge les données de la BDD MajeureDAO majeureDao = new MajeureDAO(Connexion.getInstance()); ArrayList<Majeure> liste = majeureDao.findAll(); // On définit le tableau de retour Object[][] retour = new Object[liste.size()][4]; for(int i = 0; i < liste.size(); i++) { retour[i][0] = liste.get(i).getNom(); retour[i][1] = majeureDao.countCours(liste.get(i).getId()); retour[i][2] = new BoutonVoir(liste.get(i).getId(), 4); retour[i][3] = new BoutonSupprimer(liste.get(i).getId(), 4); } return retour; }
Voilà je ne sais pas si ça suffit, je ne pouvais pas tout copier car le code est très long. Si vous avez besoin d'autres choses pour comprendre mieux mon problème n'hésitez pas !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 /** * Fait une mise à jour du tableau et lance un rafraichissement */ public void setData(Object[][] newData){ data = newData; super.fireTableDataChanged(); }
Merci d'avance pour votre aide car je désespère depuis plusieurs heures maintenant
Partager