IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JTable] Probleme de rafraichissement de la JTable apres suppression d'une ligne


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 20
    Points
    20
    Par défaut [JTable] Probleme de rafraichissement de la JTable apres suppression d'une ligne
    Bonjour,

    Je sais que mon probleme a été traité ici meme sur ce forum, mais j'ai lu toutes les discussions y afferentes sans trouver la bonne solution pour mon cas. Peut etre que j'ai une erreure quelque part dans mon code.

    Le probleme est le suivant. J'ai une classe (Table.java) qui crée le JTable, et une classe (MonTableModel.java) qui est le model et qui etends AbstractTableModel , et une classe (MyDefaultCellEditor.java) qui est le cellEditor de toutes les colonnes de ma table et en fin une classe (MyDefaultCellRenderer.java) qui est le rendu de de toutes les colonnes de ma table .

    Chaque ligne de ma table contien 6 colonnes, la derniere colonne etant un JButton qui doit (lors de l'evenement clique) supprimer la ligne en question (ligne courante, ligne selectionnée).

    Dans la methode (actionPerformed) de ce JButton je fais :
    modele.removeRow(table.getSelectedRow() );


    Mais le probleme c'est que la ligne ne se supprime pas sur la table (je crois que c'est un probleme de rafraichissement de la table) car la ligne est bel et bien supprimée de la arrayList contenant les données.

    Aidez moi s'il vous plait, ca fait maintenant 3 jours que je me bat contre ce probleme ( et celui d'inserer un JLabel dans une cellule de ma JTable) sans trouver la solution.

    Si vous voulez voir mon code demandez moi la partie voulue et je la poste immediatement.

    Merci.

    NB:

    La classe Table.java : implemente (ActionListener).

    La classe MonTableModel.java : etend (AbstractTableModel) et implemente (TableModel).

    La classe MyDefaultCellEditor.java : implemente (TableCellEditor).

    La classe MyDefaultCellRenderer.java : etend (DefaultTableCellRenderer).

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    733
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 733
    Points : 1 119
    Points
    1 119
    Par défaut
    Bonjour,

    dans ton model, tu fais bien un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fireTableDataChanged();
    ?

    et pourquoi faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    etend (AbstractTableModel) et implemente TableModel;
    ?

    l'implémentation seule ou l'héritage seule suffit me semble t'il.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    oui je fais bien le fireTableDataChanged(); dans mon model, et j'ai supprimé l'implements je n'ai laissé que le : extends AbstractTableModel .
    Voici à quoi ressemble mon tablemodel :

    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
     
    public class MonTableModel extends AbstractTableModel {
     
        private String [] colonnes = {"# Alerte" , "Severité Alerte", "Equipement" ,"Description de l'alerte" ,"Etat", "Supprimer"} ; // L'entete : les noms des colonnes de la table.
        private ArrayList contenu = new ArrayList() ;    // Le contenu des lignes de la JTable : la data .
     
     
     
        public void setValueAt(Object ligne, int row, int col) {
            ArrayList alLigne = (ArrayList) contenu.get(row) ;
     
            alLigne.set(col,ligne);
     
     
            fireTableCellUpdated(row, col);        
        }
     
     
     
        public void removeRow(int row) {
            contenu.remove(row);
            //fireTableRowsDeleted(row,row);
            fireTableDataChanged();
     
        }
     
    }

    *********************

    J'appele la methode (removeRow) à partir de actionPerformed du JButton comme suit :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    public class Table implements ActionListener, TableModelListener {
     JTable table ;
     
     
     MonTableModel modele ; // mon modèle
     
     public Table(JTable jtable_alertes) {
      
      ...
      this.table = jtable_alertes ;
      
     
      modele = new MonTableModel();
      table.setModel(modele);
      
      
      table.getColumnModel().getColumn(1).setCellEditor(new MyDefaultCellEditor());
      table.getColumnModel().getColumn(1).setCellRenderer(new MyDefaultCellRenderer());
      
      
     }
     
     
     
     public void addligne(String [] ligne , String resolu) {
      
      ArrayList alLigne = new ArrayList ();
      
      ....
      
    //  Partie responsable de l'insertion du boutton "supprimer" dans toutes les lignes du JTable des alertes :
      JButton jbt = new JButton("Supprimer") ;
      jbt.addActionListener(this);
      
      
      alLigne.add(5 , jbt);
      
      
      modele.addRow(alLigne) ;
      modele.fireTableDataChanged();
      
     }
    
     public void actionPerformed(ActionEvent arg0) {
        
      String numalerte = table.getValueAt(table.getSelectedRow(),0).toString();
      System.out.println("Le numero alerte de la ligne selectionnée pour suppression est   :"  + numalerte);
      //table.remove(table.getSelectedRow());
      
      modele.removeRow(table.getSelectedRow());
      
      
     }
    
     public void tableChanged(TableModelEvent arg0) {
      // TODO Auto-generated method stub
      
     }
     
    }

    Je ne trouve encore pas la faille !!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Avril 2003
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Ce n'est pas possible il n'y a personne pour m'aider à resoudre mon probleme !!

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    salut

    je sais pas si ca peut t'aider.

    J'ai un peu le mem principe que toi, lors de l'appuie sur la touche suppr du clavier je dois supprimer un ligne entiere.

    j'ai donc creer mon tableau avec des Vector et non une ArrayList comme toi

    j'ai declarer mon model comme cela:
    public class MyTableView extends DefaultTableModel {
    }

    la methode qui supprime fait cela:

    je recupere l'index de debut que je dois supprimer jusqu a la fin et le fire... rafraichi bien l'affichage donc ca devrais marcher. Je sais pas trop pourquoi cela ne marche pas chez toi.

    public void removeRow(int row) {

    int debut = row*getColumnCount();
    int end = debut + getColumnCount();
    for (int i = debut; debut < end; debut++){
    data.remove(i);
    }
    fireTableDataChanged();

    }

    je debute aussi en swing je peut pas t'aider plus pour le moment desole.

Discussions similaires

  1. Réponses: 8
    Dernier message: 26/06/2015, 07h19
  2. Traitement après suppression d'une ligne
    Par thorgal1612 dans le forum SAGE
    Réponses: 3
    Dernier message: 02/07/2013, 09h03
  3. Réponses: 3
    Dernier message: 21/05/2010, 10h17
  4. [JTable] probleme de rafraichissement
    Par biozaxx dans le forum Composants
    Réponses: 6
    Dernier message: 13/02/2006, 14h14
  5. [JTable] problème après suppression d'une ligne
    Par fredo3500 dans le forum Composants
    Réponses: 7
    Dernier message: 17/03/2005, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo