greglover
Messages postés58Date d'inscriptionmardi 16 janvier 2007StatutMembreDernière intervention10 mars 2008
-
4 févr. 2007 à 14:51
aminewas
Messages postés13Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention31 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.
// 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();
}
}
}
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 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 ....
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 4 févr. 2007 à 17:10
Salut:
Ma phrase résume tout.
Supposons de cette méthode calcul la 3eme colonne.
public void calcul () {
// Faire du calcul
// ...
// Un fois le caclul est terminé, il faut rafraîchier notre table
fireTableDataChanged ();
}
__________________________________________________________
A.B. : Je vais apprendre et apprendre et apprendre ....
greglover
Messages postés58Date d'inscriptionmardi 16 janvier 2007StatutMembreDernière intervention10 mars 2008 4 févr. 2007 à 18:01
j'ai trouvé qu'il fallait l'utiliser avec mon model, j'ai donc fais cela :
model.fireTableDataChanged();
mais je n'ai pas pu le faire dans ma méthode de calcul car model n'était pas reconnu.
Je l'ai donc fais ici :
// 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);
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 4 févr. 2007 à 19:10
Pardon, j'ai pensé que tu utilises déja la classe AbstractTableModel.
Dans ton dernier code, logique que le résultat soit négatif.
Il faut que tu obtiens la référence de ton JTable que tu es en train d'afficher.
JTable table = ...;
// ...
TableModel tm = table.getModel ();
// Rafraîchissement
tm.fireTableDataChanged ();
__________________________________________________________
A.B. : Je vais apprendre et apprendre et apprendre ....
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 4 févr. 2007 à 23:57
Salut:
Je me suis habitué à travailler avec AbstractTableModel pour faire tous les traitements reliés à un JTable car c'est plus clair.
Quels sont les types des données de tes colonnes? On va essayer AbstractTableModel tu vas voir c'est très facile et très propre.
__________________________________________________________
A.B. : Je vais apprendre et apprendre et apprendre ....
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 5 févr. 2007 à 14:43