begin process at 2012 02 13 12:35:06
  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 comment creer pdf avec itext et netbeans [ par amleader ] bonjour j'ai telechargé le jar itext depuis et je travaile avec netbeans 6.9.1 j'ai écrit dans une servelet le code suivant: [b] import com.ite [serialisation] JTABLE pb [ par bidani ] salut,j'arrive a serialiser une jtable mais le petit probleme suibvant apparait :(la serialisation marche si je rajoute ou supprime des lignes sans l Changer le nom de la colonne d'un JTable [ par Ombitious_Developper ] Salut :Voici un code pour créer un JTable avec des colonnes ayant des noms, mais ce dernier n'affiche rien :import javax.swing.*;import javax.swing.ta [JTable] Récupérer l'entête des colonnes [ par greglover ] Bonjour,je cherche à récupérer l'entete des colonnes de ma Jtable pour qu'ils soient présent dans ma PdfTable.Voici mon code actuelle, il fonctionne t


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 2,668 sec (3)

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