Colorier une ligne de JTable NetBeans

Messages postés
64
Date d'inscription
vendredi 24 octobre 2008
Dernière intervention
27 février 2018
- 20 août 2016 à 18:44 - Dernière réponse :
Messages postés
15826
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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());}
    }
Afficher la suite 

Votre réponse

3 réponses

Messages postés
15826
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 20 août 2016 à 20:55
0
Merci
Bonsoir,

Quelle est ta question ?
Messages postés
64
Date d'inscription
vendredi 24 octobre 2008
Dernière intervention
27 février 2018
- 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
Messages postés
15826
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
16 novembre 2018
- 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.
Commenter la réponse de KX

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.