Colorier une ligne de JTable NetBeans

zerargui Messages postés 65 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 25 février 2019 - Modifié par KX le 20/08/2016 à 20:24
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 20 août 2016 à 21:43
Bonjour,
Voilà, j'ai 3 Jtable (Facture, Clients et produits).
avec la méthode " tbleFacturesMouseClicked" si je sélectionne un article de la facture alors une ligne de Jtable Clients correspondants au Code Client sera sélectionnée et idem pour le produit: voici un aperçu de mon code :
package MyFrames;
import java.awt.Color;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.table.DefaultTableModel;

public class ConsulFrame extends javax.swing.JInternalFrame {
    Connecter conn;
    Statement st;
    ResultSet Rs;
    String SQL;
    DefaultTableModel model1 = new DefaultTableModel();
    DefaultTableModel model2 = new DefaultTableModel();
    DefaultTableModel model3 = new DefaultTableModel();
    //= new DefaultTableModel();
    public ConsulFrame() throws InstantiationException, IllegalAccessException, SQLException {
        conn=new Connecter();
        initComponents();
        tbleFactures.setSelectionBackground(Color.RED);
        tbleFactures.setRowSelectionInterval(1, 1);
        //model3=(DefaultTableModel) tbleProduits.getModel();
        
// Pour effacer une ligne dans un Jtable...
// model3.removeRow(tbleProduits.getSelectedRow());
 //affichage de la table clients  
        
        model1.addColumn("id_cli");
        model1.addColumn("Nom");
        model1.addColumn("Prenom");
        model1.addColumn("Adresse");
        model1.addColumn("id_ville");
        model1.addColumn("No Registre");
        model1.addColumn("Telephone");
        model1.addColumn("eMail");
        try{
            st=conn.obtenirConnexion().createStatement();
            ResultSet Rs=st.executeQuery("SELECT * from clients");
            while(Rs.next()){
                model1.addRow(new Object[] {
                    Rs.getString("CodeCli"), 
                    Rs.getString("NomCli"), 
                    Rs.getString("PrenomCli"), 
                    Rs.getString("AdresseCli"),
                    Rs.getString("id_ville"),
                    Rs.getString("noReg"),
                    Rs.getString("Tel"), 
                    Rs.getString("eMail")
                });
            }
        }catch(SQLException e){System.err.println(e);}
        
        tbleClients.setModel(model1);
        
        
//affichage de la table Factures
        model2.addColumn("id_Fact");
        model2.addColumn("id_Pd");
        model2.addColumn("id_cli");
        model2.addColumn("Qte");
        model2.addColumn("Prix");
        model2.addColumn("Montant");
        model2.addColumn("Date");
        model2.addColumn("Observations");
        try{
            st=conn.obtenirConnexion().createStatement();
            Rs=st.executeQuery("SELECT * FROM ventes ");
            float tot=0; int cCli=1000;
            while (Rs.next()){
                cCli=Rs.getInt(3);
                Integer a1=Integer.parseInt(Rs.getString("QteVendue"));
                float a2=Float.parseFloat(Rs.getString("PxVente"));
                float mt=a1 * a2;
                model2.addRow(new Object[] {
                    Rs.getString("NoFact"),
                    Rs.getString("CodePd"),
                    Rs.getString("CodeCli"),
                    Rs.getString("QteVendue"),
                    Rs.getString("PxVente"),
                    Rs.getString("MontantP"),
                    Rs.getString("DateVente"),
                    Rs.getString("vObs"),
                    mt});
                tot=tot+mt;
            }
            tbleFactures.setModel(model2);
            Rs.first();

    //faire une recap de la facture
            Object[] lineVierge={"","","",""};
            Object[] recap={"","","total de la facture = ",tot};
            model2.addRow(lineVierge);
            model2.addRow(recap);
    //fonction pour afficher le nom du client de la facture 
            //Integer cCli=Rs.getInt(2);
          /*
            String nomPrenom = getNomCli(Rs.getInt(3));
            txtNomCli.setText(nomPrenom);*/
        }catch(Exception e){e.printStackTrace();}
        
//affichage de la table produits
        model3.addColumn("id_Pd");
        model3.addColumn("Designations");
        model3.addColumn("Qte");
        model3.addColumn("Px achat");
        model3.addColumn("Px Vente");
        model3.addColumn("Date vente");
        model3.addColumn("Observations");
        try{
            st=conn.obtenirConnexion().createStatement();
            ResultSet Rs=st.executeQuery("SELECT * from produits");
            while(Rs.next()){
                model3.addRow(new Object[] {
                    Rs.getString("CodePd"), 
                    Rs.getString("NomPd"), 
                    Rs.getString("QtePd"), 
                    Rs.getString("PxAchat"),
                    Rs.getString("PxVente"),
                    Rs.getString("DateVente"),
                    Rs.getString("Observation"), 
                });
            }
        }catch(SQLException e){System.err.println(e.getMessage());}
        tbleProduits.setModel(model3);
    }
   @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        panCli = new javax.swing.JPanel();
        lblPd = new javax.swing.JLabel();
        lblFact = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        tbleFactures = new javax.swing.JTable();
        jScrollPane2 = new javax.swing.JScrollPane();
        tbleProduits = new javax.swing.JTable();
        jScrollPane1 = new javax.swing.JScrollPane();
        tbleClients = new javax.swing.JTable();
        pano = new javax.swing.JPanel();
        lblCli = new javax.swing.JLabel();

        setClosable(true);
        setTitle("Consultations des Fichiers...");
        setToolTipText("");
        setName(""); // NOI18N
        setPreferredSize(new java.awt.Dimension(944, 600));

        lblPd.setBackground(new java.awt.Color(51, 51, 255));
        lblPd.setFont(new java.awt.Font("Tahoma", 0, 16)); // NOI18N
        lblPd.setForeground(new java.awt.Color(0, 51, 255));
        lblPd.setText("Fichier produits  :");

        lblFact.setBackground(new java.awt.Color(51, 51, 255));
        lblFact.setFont(new java.awt.Font("Tahoma", 0, 16)); // NOI18N
        lblFact.setForeground(new java.awt.Color(0, 51, 255));
        lblFact.setText("Fichier Factures  :");

        tbleFactures.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null}
            },
            new String [] {
                "No Facture", "id_Prod2", "id_clients", "Qte", "Prixl", "montant", "Date", "Observations"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.Integer.class, java.lang.Integer.class, java.lang.Float.class, java.lang.Float.class, java.lang.Float.class, java.lang.Object.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, true, true
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tbleFactures.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tbleFacturesMouseClicked(evt);
            }
        });
        jScrollPane3.setViewportView(tbleFactures);

        tbleProduits.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null}
            },
            new String [] {
                "id_Pd", "Designation", "Qte", "Prix achat", "Px vente", "Date", "Observations"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class, java.lang.Integer.class, java.lang.Float.class, java.lang.Float.class, java.lang.Object.class, java.lang.Object.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane2.setViewportView(tbleProduits);

        tbleClients.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null},
                {null, null, null, null, null, null, null, null}
            },
            new String [] {
                "id_clients", "Nom", "Prenom", "Adresse", "id-ville", "Registre", "tel", "eMail"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Integer.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Integer.class, java.lang.String.class, java.lang.Integer.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(tbleClients);

        pano.setBackground(new java.awt.Color(255, 255, 153));

        javax.swing.GroupLayout panoLayout = new javax.swing.GroupLayout(pano);
        pano.setLayout(panoLayout);
        panoLayout.setHorizontalGroup(
            panoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 790, Short.MAX_VALUE)
        );
        panoLayout.setVerticalGroup(
            panoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 48, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout panCliLayout = new javax.swing.GroupLayout(panCli);
        panCli.setLayout(panCliLayout);
        panCliLayout.setHorizontalGroup(
            panCliLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panCliLayout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addGroup(panCliLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panCliLayout.createSequentialGroup()
                        .addGap(133, 133, 133)
                        .addComponent(lblPd)
                        .addGap(365, 365, 365)
                        .addComponent(lblFact))
                    .addGroup(panCliLayout.createSequentialGroup()
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 460, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 463, javax.swing.GroupLayout.PREFERRED_SIZE))))
            .addGroup(panCliLayout.createSequentialGroup()
                .addGap(31, 31, 31)
                .addComponent(pano, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panCliLayout.setVerticalGroup(
            panCliLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panCliLayout.createSequentialGroup()
                .addGap(4, 4, 4)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 220, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panCliLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(lblPd, javax.swing.GroupLayout.DEFAULT_SIZE, 32, Short.MAX_VALUE)
                    .addComponent(lblFact, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panCliLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 137, Short.MAX_VALUE)
                    .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(pano, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(1103, Short.MAX_VALUE))
        );

        lblCli.setBackground(new java.awt.Color(51, 51, 255));
        lblCli.setFont(new java.awt.Font("Tahoma", 0, 16)); // NOI18N
        lblCli.setForeground(new java.awt.Color(0, 51, 255));
        lblCli.setText("Fichier Clients :");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(381, 381, 381)
                .addComponent(lblCli)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addGroup(layout.createSequentialGroup()
                .addComponent(panCli, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblCli)
                .addGap(8, 8, 8)
                .addComponent(panCli, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void tbleFacturesMouseClicked(java.awt.event.MouseEvent evt) {                                          
        int cCodeCli=0, cCodePd=0;
        String CodeCli="", CodePd="";
        JCheckBox cellBox, columnBox, rowBox;
        
        try{
            int index=tbleFactures.getSelectedRow();
            //CodePd=model2.getValueAt(index,1).toString();
            CodePd=tbleFactures.getValueAt(index, 2).toString();
            cCodePd=Integer.parseInt(CodePd);
            
            CodeCli=model2.getValueAt(index,3).toString();
            cCodeCli=Integer.parseInt(CodeCli);
            //int i=tbleFactures.getSelectedRow();
            
            selectItemTableProduits(cCodePd);
        }catch(Exception e){System.err.println(e.getMessage());}
    }                                         

// selectItemTableProduits() est la Méthode qui permet de colorier le produit selectionné...    
    public void selectItemTableProduits(int codePd){
        try{
            for (int j=0;j<model2.getRowCount();j++){
                String id_Pd=model2.getValueAt(j, 0).toString();
                int int_id_Pd=Integer.parseInt(id_Pd);
                if (int_id_Pd==codePd){
                    tbleProduits.setSelectionBackground(Color.green);
                    tbleProduits.setRowSelectionInterval(0, 1);
                    return;
                }
            }
        }catch(Exception e){System.err.println(e.getMessage());}
    }

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
20 août 2016 à 20:55
Bonsoir,

Quelle est ta question ?
0
zerargui Messages postés 65 Date d'inscription vendredi 24 octobre 2008 Statut Membre Dernière intervention 25 février 2019
20 août 2016 à 21:11
Bonsoir,
j'aimerais améliorer la méthode: "selectItemTableProduits" pour avoir une sélection automatique d'une ligne du codePd dans la Jtable produits et le codeClient dans la Jtable Clients.
exemple : en sélectionnant la facture 7 comme dans la fig ci-dessus alors la ligne 3 doit être automatiquement sélectionnée dans la Jtable clients la ligne 2 dans la jTable produits. merci
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 127
20 août 2016 à 21:43
Je ne peux pas tester ton code vu que je n'ai pas tes données en base, mais il faudrait que tu modélises tes données dans des objets, tu ne peux pas travailler uniquement sur tes composants Swing.

De plus il faut clairement séparer ton code visuel du code vraiment métier, les requêtes SQL n'ont rien à faire avec le Swing.

Remarque : NetBeans génère du code de très mauvaise qualité, on ne peut pas faire un programme correct comme cela... c'est bien pour faire du prototypage mais rien de plus.
0
Rejoignez-nous