[Swing] JCheckBox dans JTable, clic difficile
Voici ce que je possède pour le moment, j'ai bien ce que je voulais :
http://img4.imageshack.us/img4/6969/jtable.jpg
Dans ma partie model j'ai une class Environment que j'ai créé. Celle ci possède des propriétés dont les deux que l'on voit dans ma jTable (user et host).
Pour créer ma jTable j'utilise une class qui extends AbstractTableModel. Celle ci récupère une ArrayList<Environment>.
Le add me sert uniquement pour l'interfaçage, il ne s'agit pas d'une propriété Environment. Sa valeur m'intéresse pour savoir sur quelles instances d'Environment je dois travailler.
Problème : Bizarrement quand je clic sur un checkbox il y a des soucis d'initialisation, le comportement du clic est étrange, des fois il ne prend pas, parfois il change lorsque je clic sur un autre checkbox. Pas étonnant, en même temps quand on voit comme je gère le boolean.
Des idées pour améliorer ça?
Code:
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
| public class EnvironmentsIntoJTable extends AbstractTableModel {
private final ArrayList<Environment> environments = new ArrayList<Environment>();
private final String[] header= {"User", "Host", "Add"};
private boolean colClass = false;
public EnvironmentsIntoJTable(ArrayList<Environment> anArrayList){
super();
for(Environment env : anArrayList){
this.environments.add(env);
}
}
public ArrayList<Environment> getEnvironments() {
return environments;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex){
switch(columnIndex){
case 0:
return this.environments.get(rowIndex).getUser();
case 1:
return this.environments.get(rowIndex).getHost();
case 2:
return this.colClass;
default:
return null;
}
}
@Override
public void setValueAt(Object val, int row, int col) {
if(col==2){
this.colClass=(boolean)val;
}
}
@Override
public boolean isCellEditable(int arg0, int arg1) {
boolean rep=false;
if (arg1==2){
rep=true;
}
return rep;
}
@Override
public Class getColumnClass(int arg0) {
Class rep = String.class;
if (arg0 == 2){
rep = Boolean.class;
}
return rep;
}
@Override
public int getColumnCount() {
return header.length;
}
@Override
public int getRowCount() {
return environments.size();
}
@Override
public String getColumnName(int column) {
return header[column];
}
} |