begin process at 2010 02 10 05:27:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Général

 > 

Problème de JTable


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de JTable

mardi 12 juin 2007 à 22:41:35 | Problème de JTable

greglover

Bonsoir,

j'ai un problème avec une classe importante de mon programme, problème que je n'arrive pas à résoudre sauf en "trichant un peu" ce qui double le temps d'execution du traitement (pas cool)

donc en gros j'ai une table récupérant les infos de la bdd
l'utilisateur fait ses modifications et hop la table est parsé et les valeurs renvoyés à la bdd (update)

La dernière colonne (montant facture) de la table est calculée en fonction des 3 colonnes précédentes (garderie matin, soir et mercredi).

Si je suis le traitement :

initialisation :
- je rempli la table (select)
- calcul la dernière colonne (à y réfléchir je sais pas pkoi puisque le champ garderie total enfant est justement ce montant calculé)
là, l'utilisateur entre les valeurs puis...
clic sur valider :
met à jour la bdd (update)
relance initialisation

Je me retrouve à ce moment là avec les valeurs de garderie affichées dans le tableau et entrées dans la bdd (vérification faîtes) mais le montant total qui est bien affiché dans la dernière colonne n'est pas dans la bdd.. Pour qu'il y soit j'ai alors deux solutions : soit je triche comme je l'ai fais en ajoutant un update(false) (false permettant de faire le traitement silencieusement) soit je reclic sur valider et alors le montant total est, cette fois, présent dans la bdd.

Je ne vois pas ou est mon erreur et je désespère de trouver la solution.

J'espère que quelqu'un pourra m'aider.

Cordialement

Voici la classe complète (sauf bouton inutile à la compréhension du problème) pour que vous puissiez voir l'évolution du traitement :

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.Date;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.ResultSetMetaData;
import com.mysql.jdbc.Statement;

public class Garderie extends JPanel {

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

    private JPanel entete;
   
    private JPanel main;
   
    private JScrollPane scrollPane;
   
    public JTable table = new JTable();
   
    private JButton btn_valider = null;

   
    /**
     * This is the default constructor
     */
    public Garderie(Montalembert 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));
            entete.add(getBtn_valider(), 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_prog","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 classe_enfant DESC,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);
                         
                          //récupération des valeurs de la bdd
                          //prépare la ligne
                          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"));   
                          }
                          // ajoute la ligne
                          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
            TableModelCustom model = new TableModelCustom(data, columnNames);
           
            // Rends certaines colonnes éditables
            model.addEditableColumn(3);
            model.addEditableColumn(4);
            model.addEditableColumn(5);
           
            // Application du modèle au tableau
            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(SwingConstants.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) {}

        go_calcul();
       
        // ajout du panneau
        add(getMain(), BorderLayout.CENTER);
    }
   
    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);
            }
        }
    }
   
    public void update(boolean confirm)
    {
        DataBaseImpl base = new DataBaseImpl();
        base.setParametre("127.0.0.1","root","","test_prog");
        try
        {
            base.open();
            // parse
                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();
            if (confirm){
                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);
        }
    }
   
    /**
     * This method initializes btn_valider  
     *    
     * @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.setToolTipText("Valider");
            btn_valider.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                   
                    update(true);                   
                    garderie();
                    update(false);<= la triche est ici
                   
                    btn_imprimer.setVisible(true);
                    lbl_intitule.setText("<= Et voilà !!!");
                }
            });
        }
        return btn_valider;
    }
}


mercredi 13 juin 2007 à 01:12:34 | Re : Problème de JTable

greglover

Réponse acceptée !
en fait j'ai résolu mon problème, c'est parce que ma classe Calcul calculait à partir de la bdd et non de la JTable

merci quand même


Cette discussion est classée dans : table, import, enfant, valider, garderie


Répondre à ce message

Sujets en rapport avec ce message

Mise à jour (refresh) d'une JTable [ par greglover ] 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 bo DatabaseException oui mais ou ??? [ par greglover ] Bonsoir,j'ai un soucis avec ce code source, Eclipse me sort un DataBaseException mais je ne vois pas du tout pourquoi.J'ai rien changé et cela marchai message java.lang.OutOfMemoryError [ par ulysse00 ] salut je voulais afficher mes enrgistrement  sur Jtable alors  j'ai ce  message java.lang.OutOfMemoryErrorException in thread "main" j'ai une table av JTable supprimer ligne [ par crazysetup ] Salut a tous, j'ai un problème et j'aimerais trouver la solution.J'ai créé une JTable avec un bouton ajouter qui ajoute des lignes vides et un autre s Problème changement couleur ligne [ par gregorybts ] Bonsoir,je souhaite changer la couleur des lignes ou montant_total est supérieu au montant_credit mais mon code change toute la JTable à partir du mom Colorer des cellules d'un JTable Amaguiz [ par crjohnson ] Salut les frères,Je bûche sur ce prob' depuis ce matin et je parviens toujours pas à atteindre mon but. J'aimerais colorer le fond des cellules sélect Mélange Java et Python [ par viktor76 ] Bonjour, j'essaye de créer une application Java qui appel du Python. L'application est assez simple je veux entrer un nombre et une fois cliquer sur l JSlider renderer dans une JTable [ par malawih ] Bonjour, J ai insere des JSlider dans une colonne d une JTable, en refinissant le renderer et l editor. Le probleme est que les slider ne sont pas mis afficher contenu d'une table access? [ par spy2008 ] salut , je veux afficher le contenu  d'une table Access dans un JTable ,mon code  à la compilation m'affiche cet erreur:G:\BDD\AfficherMessage.java:25 jtable [ par jeeb2009 ] bonsoir j ai un probleme avec une jtable.. je souhaite la charger et l afficher mais je n ai aucun resultat apres l execution. voici mon code: import


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,390 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales