Bonjour,

j'ai un JTable dans laquel je récupère les clients d'une base de données.
J'aimerai ajouter des boutons "modifier" dans ma dernière colonne à toutes les lignes, afin de pouvoir faire un update d'un client.

Nom : TableClient.PNG
Affichages : 1419
Taille : 23,1 Ko

Ma classe TabUpdateClient
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
package be.iepscfjemelle.nicolay.projet_sgbd.vues;
 
import be.iepscfjemelle.nicolay.projet_sgbd.controler.Controler;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import static java.awt.Component.CENTER_ALIGNMENT;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
 
/**
 * Class qui va me permettre de de choisir un client dans une table pour faire
 * une modification
 *
 */
public class TabUpdateClient extends JDialog {
 
    /**
     * Attributs
     */
    private final Controler contr;
    private final ArrayList list;
 
    /**
     * Attributs graphique
     */
    private JPanel mainPanel, panelhaut;
    private JLabel label;
    private JTable tableau;
 
    /**
     * Constructeur
     *
     * @param list
     * @param contr
     */
    public TabUpdateClient(ArrayList list, Controler contr) {
        this.contr = contr;
        this.list = list;
        initComponent();
    }
 
    private void initComponent() {
        //Config de la fenêtre
        setTitle("Liste des clients");
        setSize(1200, 700);
        setResizable(true);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        Container contenu = getContentPane();
 
        //Config du label et de la table.
        //création de mon panel principal
        mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout());
        contenu.add(mainPanel);
 
        //Création du panel du haut
        panelhaut = new JPanel();
        mainPanel.add(panelhaut, BorderLayout.NORTH);
 
        //Creation et config du tableau
        tableau = new JTable(new TabModelUpdateClients(this.list));
        tableau.getTableHeader().setBackground(Color.blue);//fond entête colonne
        tableau.getTableHeader().setForeground(Color.WHITE);//Couleur police entêtecolonne
        JScrollPane tabContainer = new JScrollPane(tableau);
        tableau.setAutoCreateRowSorter(true);//Permet le tri en cliquant sur le entête de colonne   
        //tableau.removeColumn(tableau.getColumnModel().getColumn(0));//je chache la colonne id
        mainPanel.add(tabContainer, BorderLayout.CENTER);
 
        //ajout du label au panel du haut
        label = new JLabel("Nombres de clients: " + tableau.getRowCount(), (int) CENTER_ALIGNMENT);
        Font font = new Font("Arial", Font.BOLD, 20);
        label.setFont(font);
        panelhaut.add(label);
 
        /**
         * TableCellRenderer pour les String, qui permet de donné un rendu aux
         * cellule d'un tableau, via une classe anonyme. Si Paire, fond blanc,
         * impaire fond gris légé.
         */
        tableau.setDefaultRenderer(Object.class,
                 new TableCellRenderer() {
            private final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
 
            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                Component cel = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                if (row % 2 == 0) {
                    cel.setBackground(Color.WHITE);
                } else {
                    cel.setBackground(Color.LIGHT_GRAY);
                }
                return cel;
            }
        }
        );
 
        //fenetre de confirmation quand clic croix
        addWindowListener(
                new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e
            ) {
                int confirmed = JOptionPane.showConfirmDialog(null, "Voulez-vous quitter la fenêtre?", "Quitter modification client", JOptionPane.YES_NO_OPTION);
                if (confirmed == JOptionPane.YES_OPTION) {
                    setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
                } else {
                    setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
                }
            }
        }
        );
 
        /**
         * méthode qui va permettre de recréer un objet à partir d'un clic de
         * souris dans ma table.
         *
         * @param event
         */
        /*tableau.addMouseListener(new java.awt.event.MouseAdapter() {//class anonyme         
            @Override
            public void mouseClicked(java.awt.event.MouseEvent event) {
                int row = tableau.rowAtPoint(event.getPoint());//renvoie le numéro de la ligne
                //on récupère les info dans la ligne clickée et dans chaque colonne pour recréer un objet à partir d'un clic dans une colonne
                Client clientSelected = new Client();
                clientSelected.setId((int) tableau.getModel().getValueAt(row, 0));        
                clientSelected.setPrenom((String) tableau.getModel().getValueAt(row, 1));             
                clientSelected.setNom((String) tableau.getModel().getValueAt(row, 2));    
                //clic sur une ligne client affiche une deuxième fenêtre avec boutons
                //qui permet de voir les films loués par un client sous forme de tableau ou de graphique.
                gest.afficheFilmsLouesClient(clientSelected.getId(), clientSelected.getPrenom(), clientSelected.getNom());          
            }
        });*/
    }
 
}
Ma class TabModelUpdateClients:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
 
 
package be.iepscfjemelle.nicolay.projet_sgbd.vues;
 
import be.iepscfjemelle.nicolay.projet_sgbd.model.Client;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
 
/**
 * Table modèle avec la colonne et bouton modifier
 */
public class TabModelUpdateClients extends AbstractTableModel {
 
    /**
     * Attributs
     */
    private final ArrayList list;
    private final String[] columnNames = {"id", "numéro national", "Nom", "Prénom", "Téléphone", "Email", "Date de naissance", "Adresse", "Modification"};
 
    /**
     * Constructeur
     * @param list 
     */
    public TabModelUpdateClients(ArrayList list) {
        this.list = list;
    }
 
    /**
     * Renvoie un nom par défaut pour la colonne.
     *
     * @param col /nom de colonne
     * @return String
     */
    @Override
    public String getColumnName(int col) {
        String result = "";
        switch (col) {
            case 0:
                result = columnNames[0];
                break;
            case 1:
                result = columnNames[1];
                break;
            case 2:
                result = columnNames[2];
                break;
            case 3:
                result = columnNames[3];
                break;
            case 4:
                result = columnNames[4];
                break;
            case 5:
                result = columnNames[5];
                break;
            case 6:
                result = columnNames[6];
                break;
            case 7:
                result = columnNames[7];
                break;
            case 8:
                result = columnNames[8];
                break;
            default:
                break;
        }
        return result;
    }
 
    /**
     * Retourne le nombre de lignes dans le modèle. Un JTable utilise cette
     * méthode pour déterminer le nombre de lignes à afficher. Cette méthode
     * devrait être rapide, car elle est appelée fréquemment pendant le rendu.
     *
     * @return int
     */
    @Override
    public int getRowCount() {
        if (list == null) {
            return 0;
        } else {
            return list.size();
        }
    }
 
    /**
     * Renvoie le nombre de colonnes du modèle. Un JTable utilise cette méthode
     * pour déterminer le nombre de colonnes à créer et à afficher par défaut.
     *
     * @return int
     */
    @Override
    public int getColumnCount() {
        return columnNames.length;
 
    }
 
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Client client = (Client) list.get(rowIndex);
        switch (columnIndex) {
            case 0:
                return client.getIdClient();
            case 1:
                return client.getNumeroNational();
            case 2:
                return client.getNomClient();
            case 3:
                return client.getPrenomClient();
            case 4:
                return client.getTelephoneClient();
            case 5:
                return client.getMailClient();
            case 6:
                return client.getDateNaissanceClient();
            case 7:
                return client.getAdresseClient();
        }
        return null;
    }
 
}
J'ai cherché comment ajouter ces boutons, mais je coince.