Partage
  • Partager sur Facebook
  • Partager sur Twitter

actualiser un jtable en java

    13 juin 2011 à 22:11:19

    Bonjour,
    Je programme en java.
    J'ai un JTable qui contient des données chargé de la base de données si je clic sur le boutton "supprimer" les lignes séléctionnées du Jtable sont supprimés de la base mais elle ne sont pas supprimé du JTable (sur l'inteface) sauf si je fait le run une autre fois (c'est évident).De même pour la modification ou l'ajout.
    Comment doit je faire pour??
    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2011 à 23:46:31

      Normalement si le code qui supprime une ligne de la table (que tu devais nous fournir si tu veux qu'on puisse mieux t'aider) met à jour ton TableModel, la table devrait se mettre à jour.

      Difficile de t'en dire plus sans voir le code qui devrait supprimer les lignes dans ta JTable.
      • Partager sur Facebook
      • Partager sur Twitter
        14 juin 2011 à 0:05:30

        private void BTsupprimerActionPerformed(java.awt.event.ActionEvent evt) {                                            
                try {
                    int res;
                                Statement st = null;
                                Connection con = null;
                                
                                      Class.forName("com.mysql.jdbc.Driver");
                                    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
                                    st = con.createStatement();
                                    res = st.executeUpdate("delete from categorie where nom_categorie ='" + TxtCat.getText()+"'");
                                    JOptionPane.showMessageDialog(this, "La suppression est réussite", "Suppression d'un article  ", JOptionPane.INFORMATION_MESSAGE);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(MiseAJourCategorie.class.getName()).log(Level.SEVERE, null, ex);
                } catch (SQLException ex) {
                    Logger.getLogger(MiseAJourCategorie.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        

        c'est l' événements de le bouton supprimer
        merci pour ton réponde
        • Partager sur Facebook
        • Partager sur Twitter
          14 juin 2011 à 0:12:13

          Dans ce code rien n'enlève de ligne à ta JTable. A toi de le rajouter ;)


          Tout dépend de la façon dont est créée la JTable. Vu qu'elle est liée à une base de données, j'imagine qu'il y a part derrière un TableModel.

          Si c'est le cas, regarde les méthodes dont tu disposes sur cet objet. S'il étend "DefaultTableModel" (http://download.oracle.com/javase/6/docs/api/javax/swing/table/DefaultTableModel.html#removeRow(int) ) tu as une méthode removeRow(int row).
          • Partager sur Facebook
          • Partager sur Twitter
            14 juin 2011 à 17:21:34

            c'est le code de mon table model merci pour votre aide mais il ne actualise pas


            public class TableModel extends AbstractTableModel {
            
                private ExecuteQuerySQL executeQuery;
                private ResultSet rs;
            
                public TableModel(String query) throws SQLException, ClassNotFoundException {
                    executeQuery = new ExecuteQuerySQL(query);
                    rs = executeQuery.getResultSet();
                }
            
                 public ExecuteQuerySQL getExecuteQuery() {
                    return executeQuery;
                }
            
                public ResultSet getRs() {
                    return rs;
                }
            
                @Override
                public int getRowCount() {
                    int i = 0;
                    try {
            
                        rs.last();
                        i = rs.getRow();
            
                    } catch (SQLException ex) {
                        Logger.getLogger(TableModel.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    return i;
                }
            
                @Override
                public int getColumnCount() {
                    int i = 0;
                    try {
            
                        i = rs.getMetaData().getColumnCount();
                    } catch (SQLException ex) {
                        Logger.getLogger(TableModel.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    return i;
                }
            
                public Object getValueAt(int rowIndex, int columnIndex) {
                    Object ob = null;
                    try {
            
                        rs.absolute(rowIndex + 1);
                        ob = rs.getObject(columnIndex + 1);
            
                    } catch (SQLException ex) {
                        Logger.getLogger(TableModel.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    return ob;
                }
            
                @Override
                public String getColumnName(int column) {
                    try {
                        return rs.getMetaData().getColumnLabel(column + 1);
                    } catch (SQLException ex) {
                        Logger.getLogger(TableModel.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    return "";
                }
            }
            
            • Partager sur Facebook
            • Partager sur Twitter
              14 juin 2011 à 18:37:52

              Ton TableModel étend DefaumtTableModel comme je te l'ai mentionné plus haut.

              Dans le code de ta méthode actionPerformed tu peux donc récupérer ton modèle : (TableModel)table.getModel() .

              Sur cet objet tu appelles la méthode qu j'ai mise en lien sur mon post plus haut.
              • Partager sur Facebook
              • Partager sur Twitter
                15 juin 2011 à 17:23:49

                merci pour votre aide j'ai réussi a résoudre mon probleme :D
                • Partager sur Facebook
                • Partager sur Twitter
                  24 juillet 2014 à 16:55:46

                  Bonjour et désoler pour de déterré ce topic mais il colle parfaitement a mon problème.

                  Mon problème est que mon jTbale à était autogénéré par netbeans du coup je ne peux pas utiliser de tablemodel dessus, voici le code :

                  jTable1 = new javax.swing.JTable();
                  rg.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, adherentList, jTable1);
                  org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${adherentId}"));
                  columnBinding.setColumnName("ID");
                  columnBinding.setColumnClass(Integer.class);
                  columnBinding.setEditable(false);
                  columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${nom}"));
                  columnBinding.setColumnName("Nom");
                  columnBinding.setColumnClass(String.class);
                  columnBinding.setEditable(false);
                  columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${prenom}"));
                  columnBinding.setColumnName("Prenom");
                  columnBinding.setColumnClass(String.class);
                  columnBinding.setEditable(false);
                  columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${telephoneMobile}"));
                  columnBinding.setColumnName("Telephone Mobile");
                  columnBinding.setColumnClass(String.class);
                  columnBinding.setEditable(false);
                  columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${activiteId}"));
                  columnBinding.setColumnName("Activite Id");
                  columnBinding.setColumnClass(Integer.class);
                  columnBinding.setEditable(false);
                  bindingGroup.addBinding(jTableBinding);
                  jTableBinding.bind();
                  jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
                      public void mouseClicked(java.awt.event.MouseEvent evt) {
                          jTable1MouseClicked(evt);
                      }
                  });
                  
                  jScrollPane1.setViewportView(jTable1);
                  
                  if (jTable1.getColumnModel().getColumnCount() > 0) {
                      jTable1.getColumnModel().getColumn(0).setMinWidth(10);
                      jTable1.getColumnModel().getColumn(0).setPreferredWidth(75);
                      jTable1.getColumnModel().getColumn(1).setResizable(false);
                      jTable1.getColumnModel().getColumn(2).setResizable(false);
                      jTable1.getColumnModel().getColumn(3).setResizable(false);
                      jTable1.getColumnModel().getColumn(4).setResizable(false);
                  }

                  avez-vous une piste pour rafraichir ma Jtable ?

                  Merci d'avance pour vos réponses ! Cordialement, Romain.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Keep Calm Code C
                    24 juillet 2014 à 17:21:25

                    OH MON DIEU CREVEZ MOI LES YEUX ! Qu'est-ce que c'est MOCHE ! Je me suis toujours dis que le code généré c'était crade mais là ça dépasse l'entendement ! On peut difficilement faire plus moche même en se forçant.

                    Bref, si Netbeans n'a pas généré de tableModel (si c'est le cas c'est vraiment de la ***** la génération automatique) alors tu ne pourras pas modifier ton JTable. Pour être modifiable il faut que le JTable possède un TableModel qui implémente setValueAt(...) et getValueAt(...) entre autres. Le mieux serait de jeter tout ce code généré et de refaire tout proprement à la main en suivant les indications du tutoriel Oracle.

                    Après tu ne précises pas qu'est-ce qui modifie les données, ni ce que tu entends par rafraîchir (juste mise-à-jour de l'affichage ou changement des données?)...

                    Sinon tu ferais mieux de créer ton propre sujet et d'expliquer clairement ton problème plutôt que de déterrer un vieux machin de plus de 3 ans.

                    -
                    Edité par Letalkram 24 juillet 2014 à 17:23:05

                    • Partager sur Facebook
                    • Partager sur Twitter
                    :(){ :|:& };:
                      24 juillet 2014 à 19:05:06

                      letalkram a écrit:

                      OH MON DIEU CREVEZ MOI LES YEUX ! Qu'est-ce que c'est MOCHE ! Je me suis toujours dis que le code généré c'était crade mais là ça dépasse l'entendement ! On peut difficilement faire plus moche même en se forçant.

                      Bref, si Netbeans n'a pas généré de tableModel (si c'est le cas c'est vraiment de la ***** la génération automatique) alors tu ne pourras pas modifier ton JTable. Pour être modifiable il faut que le JTable possède un TableModel qui implémente setValueAt(...) et getValueAt(...) entre autres. Le mieux serait de jeter tout ce code généré et de refaire tout proprement à la main en suivant les indications du tutoriel Oracle.

                      Après tu ne précises pas qu'est-ce qui modifie les données, ni ce que tu entends par rafraîchir (juste mise-à-jour de l'affichage ou changement des données?)...

                      Sinon tu ferais mieux de créer ton propre sujet et d'expliquer clairement ton problème plutôt que de déterrer un vieux machin de plus de 3 ans.

                      -
                      Edité par letalkram il y a environ 1 heure


                      c'est fait ici mais aucune réponse ... Je vais suivre tes conseilles merci !
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Keep Calm Code C
                        24 mai 2019 à 2:30:34

                        Tu peut utiliser les classe observable et Observer

                        • Partager sur Facebook
                        • Partager sur Twitter

                        actualiser un jtable en java

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown