Mise à jour (refresh) d'une JTable

greglover Messages postés 58 Date d'inscription mardi 16 janvier 2007 Statut Membre Dernière intervention 10 mars 2008 - 4 févr. 2007 à 14:51
aminewas Messages postés 13 Date d'inscription mercredi 10 octobre 2007 Statut Membre Dernière intervention 31 mars 2010 - 31 mars 2010 à 19:09
Bonjour,

j'ai une JTable qui récupère des infos d'une bdd. Les cellules peuvent être éditées et le contenu renvoyé à la bdd par l'intermédiaire d'un bouton.

La dernière colonne de ma JTable est calculé en fonction des 3 avants dernière. Le problème c'est que le résultat ne s'affiche qu'une fois passé par le menu et revenu dans ce panel. Du coup, le contenu de la colonne calculé ne s'envoi vers la bdd que si là j'appuie sur le bouton valider (au moment ou j'ai envoyé les 3 autres infos, le calcul était fait mais n'était pas visible dans la JTable.

Pour que vous compreniez mieux, voici mon code

J'espère que vous pourrez m'aider

Merci beaucoup d'avance




public class Garderie extends JPanel {

    private static final long serialVersionUID = 1L;
   
    private test fenetre;

    private JPanel entete;
   
    private JPanel main;
   
    private JScrollPane scrollPane;

    public JLabel lbl_effectif = null;
   
    public JTable table = null;
   
    public JLabel lbl_intitule = null;

    private JButton btn_menu = null;
   
    private JButton btn_valider = null;
   
    private JButton btn_raz = null;

   
    /**
     * This method initializes btn_menu   
     *    
     * @return javax.swing.JButton   
     */
    private JButton getBtn_menu() {
        if (btn_menu == null) {
            btn_menu = new JButton();
            btn_menu.setBounds(new Rectangle(680, 5, 101, 19));
            btn_menu.setForeground(new Color(108, 3, 125));
            btn_menu.setText("Menu");
            btn_menu.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    fenetre.setCourantPanel(fenetre.getMenu());
                }
            });
        }
        return btn_menu;
    }
   
    private JButton getBtn_raz() {
        if (btn_raz == null) {
            btn_raz = new JButton();
            btn_raz.setBounds(new Rectangle(10, 5, 75, 19));
            btn_raz.setForeground(new Color(108, 3, 125));
            btn_raz.setText("RAZ");
            btn_raz.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    JOptionPane.showMessageDialog(null, "Attention, cette opération ne pourra être annulée !!!", "Avertissement", JOptionPane.ERROR_MESSAGE);
                    JOptionPane.showMessageDialog(null, "Vous allez remettre à zéro les jours de garde de tous les enfants !!!", "Avertissement", JOptionPane.ERROR_MESSAGE);
                    int choix = JOptionPane.showConfirmDialog(null, "Voulez vous continuez ???", "Confirmation", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
                    if (choix == 0)
                    {
                        DataBaseImpl base = new DataBaseImpl();
                        base.setParametre("127.0.0.1","root","","test");
                        try
                        {
                            base.open();
                            //RAZ de la base de donnée                            base.execute("UPDATE `enfant` SET garderie_matin_enfant 0 , garderie_soir_enfant 0 , garderie_mercredi_enfant = 0 , garderie_total_enfant = 0 WHERE garderie_enfant = 'true' AND sortie_enfant= '' ");
                            base.close();
                            JOptionPane.showMessageDialog(null, "Remise à zéro effectué", "RAZ Ok", JOptionPane.INFORMATION_MESSAGE);
                        }
                        catch(DataBaseException dbe)
                        {
                            JOptionPane.showMessageDialog(null, "Problème de base de donnée !!!", "Erreur", JOptionPane.ERROR_MESSAGE);
                        }
                        fenetre.setCourantPanel(fenetre.getMenu());
                    }
                    else{}
                }
            });
        }
        return btn_raz;
    }
   
    /**
     * This method initializes btn_menu   
     *    
     * @return javax.swing.JButton   
     */
    private JButton getBtn_valider() {
        if (btn_valider == null) {
            btn_valider = new JButton();
            btn_valider.setBounds(new Rectangle(570, 5, 101, 19));
            btn_valider.setForeground(new Color(108, 3, 125));
            btn_valider.setText("Valider");
            btn_valider.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                   
                    // Apelle de calcul pour la dernière colonne puis insertion dans la bdd
                    go_calcul();
                    JOptionPane.showMessageDialog(null, "Stop", "Erreur", JOptionPane.ERROR_MESSAGE);
                   
                    DataBaseImpl base = new DataBaseImpl();
                    base.setParametre("127.0.0.1","root","","test");
                    try
                    {
                        base.open();
                        for (int i = 0 ; i < table.getColumnCount() ; i++)
                        {
                            for (int j = 0 ; j < table.getRowCount() ; j++)
                            {                                base.execute("UPDATE `enfant` SET garderie_matin_enfant "+table.getValueAt(j, 3)+" , garderie_soir_enfant "+table.getValueAt(j, 4)+" , garderie_mercredi_enfant = "+table.getValueAt(j, 5)+", garderie_total_enfant = "+table.getValueAt(j, 6).toString().replace(",", ".")+" WHERE nom_enfant = '"+table.getValueAt(j, 0).toString().replace("'", "''")+"' AND prenom_enfant = '"+table.getValueAt(j, 1).toString().replace("'", "''")+"'");
                            }
                        }
                        base.close();
                        JOptionPane.showMessageDialog(null, "Modification prise en compte", "Confirmation", JOptionPane.INFORMATION_MESSAGE);

                    }
                    catch(DataBaseException dbe)
                    {
                        JOptionPane.showMessageDialog(null, "Problème de base de donnée !!!", "Erreur", JOptionPane.ERROR_MESSAGE);
                    }
                }
            });
        }
        return btn_valider;
    }
   
    /**
     * This is the default constructor
     */
    public Garderie(test m) {
        fenetre = m;
        setLayout(new BorderLayout());
        setBounds(new Rectangle(0, 0, 800, 570));
        add(getEntete(), BorderLayout.NORTH );
    }
   
    private JPanel getEntete() {
        if (entete == null) {
            entete = new JPanel();
            entete.setLayout(null);
            entete.setPreferredSize(new Dimension(800, 30));
            lbl_effectif = new JLabel();
            lbl_effectif.setBounds(new Rectangle(106, 3, 71, 22));
            lbl_effectif.setForeground(new Color(108, 3, 125));
            lbl_intitule = new JLabel();
            lbl_intitule.setBounds(new Rectangle(335, 3, 230, 22));
            lbl_intitule.setForeground(new Color(108, 3, 125));
            lbl_intitule.setText("N'oubliez pas d'appuyer sur le bouton =>");
            entete.add(lbl_effectif, null);
            entete.add(lbl_intitule, null);
            entete.add(getBtn_menu(), null);
            entete.add(getBtn_valider(), null);
            entete.add(getBtn_raz(), null);
        }
        return entete;
    }
   
    private JPanel getMain() {
        if (main == null) {
            main = new JPanel();
            main.setSize(800, 570);
            main.setLayout(new BorderLayout());
            scrollPane = new JScrollPane(table);
            scrollPane.setBorder(null);
            scrollPane.setPreferredSize(new Dimension(800, 570));
            main.add(scrollPane, BorderLayout.CENTER);
        }
        return main;
    }

    public void garderie()
    {
        try {
            setSize(800, 570);
            Vector columnNames = new Vector();
            Vector data = new Vector();
            try
            {
                  // Se connecter à la base de donnée
                  Class.forName("com.mysql.jdbc.Driver");
                  Connection connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/test","root","" );
                 
                  // Récupérer les données des élèves
                  Statement stmt = (Statement) connection.createStatement();                  String sql "SELECT nom_enfant,prenom_enfant,classe_enfant,garderie_matin_enfant,garderie_soir_enfant,garderie_mercredi_enfant,garderie_total_enfant FROM enfant WHERE `garderie_enfant` 'true' AND sortie_enfant='' ORDER BY nom_enfant,prenom_enfant";
                  ResultSet rs = (ResultSet) stmt.executeQuery( sql );
                 
                  // Récupérer le titre des colonnes
                  ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();
                 
                  // Récupérer le nombre de colonne
                  int columns = md.getColumnCount();

                  // Récupérer le nom des colonnes
                  for (int i = 1; i <= columns; i++)
                  {
                      if (i==7){columnNames.addElement("MONTANT TTC");break;}
                      columnNames.addElement( md.getColumnName(i).replace("_enfant", "").replace("_", " ").replace("garderie", "gard.").toUpperCase());
                  }

                  // Récupérer les données des colonnes
                  // 1. Test si ya quelquechose à lire, donc test si la classe existe
                  // 2. Remet le pointeur au début
                  // 3.Tant qu'il y a quelquechose à lire
                  if (rs.next())
                  {
                      rs.beforeFirst();
                      while (rs.next())
                      {
                          fenetre.setCourantPanel(Garderie.this);
                          Vector row = new Vector(columns);
                         
                          for (int i = 1; i <= columns; i++)
                          {
                                  row.addElement( rs.getString("nom_enfant") );
                                  row.addElement( rs.getString("prenom_enfant") );
                                  row.addElement( rs.getString("classe_enfant") );
                                  row.addElement( rs.getString("garderie_matin_enfant") );
                                  row.addElement( rs.getString("garderie_soir_enfant") );
                                  row.addElement( rs.getString("garderie_mercredi_enfant"));
                                  row.addElement( rs.getString("garderie_total_enfant"));   
                          }
                          data.addElement( row );
                      }
                  }
                  else
                  {
                      JOptionPane.showMessageDialog(null, "Problème de base de donnée !!!", "Erreur", JOptionPane.ERROR_MESSAGE);
                  }
                  // Tout fermer
                  rs.close();
                  stmt.close();
            }
            catch(Exception e){}
           
            // Créer la table avec les données de la base
            table = new JTable();
            TableModelCustom model = new TableModelCustom(data, columnNames);
            model.addEditableColumn(3);
            model.addEditableColumn(4);
            model.addEditableColumn(5);
            table.setModel(model);
           
            // Redimensionne
            for (int i=0;i<=6;i++)
            {
                TableColumn column = table.getColumnModel().getColumn(i);
                switch (i)
                {
                    case 0:column.setMaxWidth(160);column.setMinWidth(140);break;
                    case 1:column.setMaxWidth(120);column.setMinWidth(100); break;
                    case 2:column.setMaxWidth(80);column.setMinWidth(60);break;
                    case 3:column.setMaxWidth(110);column.setMinWidth(100); break;
                    case 4:column.setMaxWidth(110);column.setMinWidth(100);break;
                    case 5:column.setMaxWidth(115);column.setMinWidth(100); break;
                    case 6:column.setMaxWidth(100);column.setMinWidth(75); break;
                }
            }
           
            // Centre le contenu des cellules
            DefaultTableCellRenderer custom = new DefaultTableCellRenderer();
            custom.setHorizontalAlignment(JLabel.CENTER);
            for (int k=0; k < table.getColumnCount(); k++) {
               table.getColumnModel().getColumn(k).setCellRenderer(custom);
            }
           
            // Autorise le redimensionnement manuel et interdit le déplacement de colonne
            table.getTableHeader().setReorderingAllowed(false);
            table.getTableHeader().setResizingAllowed(true);

        }
        catch (Exception e) {}
       
        DataBaseImpl base2 = new DataBaseImpl();
        base2.setParametre("127.0.0.1","root","","test");
        try
        {
            base2.open();
            // Compter nombre d'élève dans la classe
            String nb="SELECT COUNT(*) AS nbr FROM enfant WHERE garderie_enfant = 'true' AND sortie_enfant = '' ";
            ResultSet nbr = base2.query(nb);
           
            while(nbr.next())
            {
                lbl_effectif.setText("Effectif : "+nbr.getInt("nbr"));
            }
            base2.close();
        }
        catch(SQLException e){}
        catch(DataBaseException e)
        {
            JOptionPane.showMessageDialog(null, "Problème de base de donnée !!!", "Erreur", JOptionPane.ERROR_MESSAGE);
        }
        format();
       
        add(getMain(), BorderLayout.CENTER);
    }
   
    public void format()
    {
        for (int j = 0 ; j < table.getRowCount() ; j++)
        {
            DecimalFormat df = new DecimalFormat("########.00");
            if (!table.getValueAt(j, 6).equals("0"))
                table.setValueAt(df.format(new Double(""+table.getValueAt(j, 6)+"")), j, 6);
        }
    }
   
    public void go_calcul()
    {
        Calcul_garderie un_calcul = new Calcul_garderie();
        for (int j = 0 ; j < table.getRowCount() ; j++)
        {
            DecimalFormat df = new DecimalFormat("########.00");
            double montant=un_calcul.calculer(table.getValueAt(j, 0).toString(),table.getValueAt(j, 1).toString());
            if (montant!=0)
                table.setValueAt(df.format(montant), j, 6);
            repaint();
        }
    }
}

11 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
4 févr. 2007 à 16:32
Salut:

Utilises la méthode fireTableDataChanged pour rafraîchir ton JTable une fois que le calcul de la 3eme colonne a été fait.




__________________________________________________________
A.B. :  Je vais apprendre et apprendre et apprendre ....
0
Rejoignez-nous