+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2011
    Messages : 5
    Points : 2
    Points
    2

    Par défaut JTable, problème rafraichissement

    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 :
    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();
       }

  2. #2
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    septembre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2011
    Messages : 5
    Points : 2
    Points
    2

    Par défaut

    J'ai trouvé la solution, il suffisait de rajouter un
    setCellEditor juste avant l'exécution de la méthode removeRow dans le listener.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •