Bonjour,
J'ai une JTable avec des boutons de suppression de ligne. Quand je lance mon application, tout marche, certaines lignes ont le droit de supprimer la ligne et d'autres non. (géré avec editCellEditor). Une ligne qui a le droit d'être supprimée a une valeur "supprimer" sinon "impossible".
Par exemple, voici trois lignes de mon tableau après avoir lancé l'appli :
L1 (id: 1) : ne peut être supprimée - bouton "impossible"
L2 (id : 2) : peut être supprimée - bouton "supprimer"
L3 (id : 3) : ne peut être supprimé - bouton "impossible"
Quand je clique sur les boutons des lignes 1 et 3, rien ne se passe : normal et correct.
Je décide de supprimer la L2, la ligne est supprimée, ok.
Le tableau devient :
L1 (id : 1) bouton "impossible"
L2 : (id: 3) bouton "supprimer" <- Problème
Mais voilà j'ai un problème, après avoir supprimé la ligne 2 (id :2), la ligne 2 (id 3) garde le bouton "supprimer" de l'ancienne ligne et devient supprimable alors qu'elle ne doit pas l'être et elle ne l'était pas juste avant que je supprime la ligne 2. Encore plus étrange, quand je clique sur la ligne 2 (n'importe où), le bouton passe de "supprimer" à "impossible" et redevient non supprimable.
En cherchant sur le net je suis tombé sur la méthode fireTableStructureChanged(), je l'ai donc ajouté à ma méthode removeRow(int position). Or le comportement est bizarre :
je lance l'appli, l'affichage est correct ;
je supprime une ligne, ok ;
et de là mes boutons perdent leurs caractéristiques de bouton, visuellement ce ne sont plus des boutons et il n'y a plus d'effet quand je clique dessus.
Je pense qu'il faut laisser le fireTableStructureChanged() et rajouter un setCellEditor(mon bouton) après chaque removeRow(), mais je ne vois pas où et comment le mettre.
Pouvez-vous m'aider ?
Ici mon code de la méthode removeRow(int position)
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 public void removeRow(int position) throws ClassNotFoundException, SQLException{ int indice = 0, indice2 = 0; int nbRow = this.getRowCount()-1; int nbCol = this.getColumnCount(); Object temp[][] = new Object[nbRow][nbCol]; for(Object[] value : this.data){ if(indice != position){ temp[indice2++] = value; } indice++; } Integer idResa = (Integer) this.data[position][0] ; this.data = temp; temp = null; //Suppression en base Connexion co = new Connexion(); co.initConnexion(); Statement st = co.getConnexion().createStatement(); st.executeUpdate("delete from Reservations where id="+idResa); co.disconnect(); //refresh // this.fireTableDataChanged(); this.fireTableRowsDeleted(position, position); this.fireTableStructureChanged(); }
Partager