Accueil > Forum > > > > Problème de JTable
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
Livres en rapport
|
Derniers Blogs
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|