Bonjour

J'ai créé une application qui récupère des données provenant d'une base de données Mysql et les affichent dans une JTable. J'ai ensuite ajouté des checkbox dans la 1ère colonne mais malheureusement celles-ci ne répondent pas, c'est-à-dire que quand je clique dessus,les checkbox ne sont pas cochées. Voici le code:

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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
public class PanListerUser extends JPanel{
 
public PanListerUser()
    { try {
                        Class.forName("com.mysql.jdbc.Driver");
                    } catch (ClassNotFoundException ex) {
                        //JOptionPane.showMessageDialog(null,ex.getMessage());
                       JOptionPane.showMessageDialog(null,"Impossible de charger le pilote!"+ex.getMessage());
                        //JOptionPane.showMessageDialog(null,"Impossible de charger le pilote!");
                    }
 
                 try {
            con = (java.sql.Connection) DriverManager.getConnection(url, user, passwd);
 
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Impossible d'établir la connexion!"+ex.getMessage());
        }
    actualiser();
    }
 
 public void actualiser()
   {
 
 
        btModifier.setBounds(50,325 , 150, 30);
         this.add(btModifier);
 
         btSupprimer.setBounds(240,325 , 150, 30);
         this.add(btSupprimer);
 
         labResult = new JLabel("ttt");
         labResult.setBounds(0,290 , 550, 30);
         this.add(labResult);
 
       this.setBackground(Color.yellow);
       this.setLayout(null);
         tableau = new JTable();
                  panotable = new JPanel();
 
 
            try {
                String requete = null;
               requete="select * from user ";
                         //Création d'un objet Statement
                           long start = System.currentTimeMillis();
                           state = con.createStatement();
                         //L'objet ResultSet contient le résultat de la requête SQL
                           res = state.executeQuery(requete);
                         //On récupère les MetaData
                           resultMeta = res.getMetaData();
 
                           //On récupère les meta afin de récupérer le nom des colonnes
                            ResultSetMetaData meta = res.getMetaData();
                            int nbrCol = meta.getColumnCount();
 
                            System.out.println("le nombre de colonne est: "+nbrCol);
 
                            //On initialise un tableau d'Object pour les en-têtes du tableau
                            String[] column = new String[nbrCol+1];
 
                            column[0] = "Case à cocher";
                            for(int i = 1 ; i <= nbrCol; i++)
                            column[i] = meta.getColumnName(i);
 
                            //Petite manipulation pour obtenir le nombre de lignes
                            res.last();
                            int rowCount = res.getRow();
 
                            Object[][] data = new Object[rowCount][nbrCol+1];
 
                            //On revient au départ
                            res.beforeFirst();
                            System.out.println("le nombre de ligne est: "+rowCount);
                            int j = 0;
                            //On remplit le tableau d'Object[][]
                            while(res.next()){
                                data[j][0] = new Boolean(false);
 
                                for(int i = 1 ; i <= meta.getColumnCount(); i++)
                                {
                                data[j][i] = res.getObject(i);
                                }
                                j++;                           
                            }
 
                            //On ferme le tout
                            res.close();
                            state.close();
                            long totalTime = System.currentTimeMillis() - start;
 
                            labResult.setText("La requête à été exécutée en "+totalTime+ " ms et a retourné " + rowCount + " ligne(s)");
 
            panotable.setLayout(null);
            panotable.setBounds(0,0 , 574, 300);
            //panotable.setLayout(new BorderLayout());
            ZModel model = new ZModel(data, column);
 
                        this.tableau = new JTable(model);
                        this.tableau.setDefaultRenderer(JComponent.class, new TableComponent());
 
        //JScrollPane
        js = new JScrollPane(tableau);
    //  js.setPreferredSize(new Dimension(50,50));
         js.setBounds(0,0,566,300);
        panotable.removeAll();
        panotable.add(js,BorderLayout.CENTER );
        panotable.repaint();
 
 
        this.add(panotable);
 
 
 
                     } catch (SQLException ex) {
                         JOptionPane.showMessageDialog(null,"Erreur"+ex);
                     }
 
 
   }
 
 
 //Classe modèle personnalisée
 
  class ZModel extends AbstractTableModel{
 
    private Object[][] data;
 
    private String[] title;
 
 
    //Constructeur
 
    public ZModel(Object[][] data, String[] title){
 
      this.data = data;
 
      this.title = title;
 
    }
 
 
    //Retourne le nombre de colonnes
 
    public int getColumnCount() {
 
      return this.title.length;
 
    }
 
 
    //Retourne le nombre de lignes
 
    public int getRowCount() {
 
      return this.data.length;
 
    }
 
 
    //Retourne la valeur à l'emplacement spécifié
 
    public Object getValueAt(int row, int col) {
 
      return this.data[row][col];
 
    }
 
    /**
 
* Retourne le titre de la colonne à l'indice spécifié
 
*/
 
public String getColumnName(int col) {
 
  return this.title[col];
 
}
 
//Retourne la classe de la donnée de la colonne
 
public Class getColumnClass(int col){
 
  //On retourne le type de la cellule à la colonne demandée
 
  //On se moque de la ligne puisque les types de données sont les mêmes quelle que soit la ligne
 
  //On choisit donc la première ligne
 
  return this.data[0][col].getClass();
 
}
 
//Retourne vrai si la cellule est éditable : celle-ci sera donc éditable
 
public boolean isCellEditable(int row, int col){
 
  //On appelle la méthode getValueAt qui retourne la valeur d'une cellule
 
  //Et on effectue un traitement spécifique si c'est un JButton
 
  if(getValueAt(0, col) instanceof JButton)
 
    return false;
 
  return true;
 
}
 
  }
//CTRL + SHIFT + O pour générer les imports
 
public class TableComponent extends DefaultTableCellRenderer {
 
 
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
 
    if (value instanceof JButton)
 
      return (JButton) value;
 
    //Lignes ajoutées
 
    else if(value instanceof JComboBox)
 
      return (JComboBox) value;
 
    else if(value instanceof JCheckBox)
 
      return (JCheckBox) value;
 
    else
 
      return this;
 
  }
 
}
 
}
Merci