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
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
Livres en rapport
|
Derniers Blogs
[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|