voilà, j'utilise dans mon application un tableau(JTable) alimenté par une base de données ACCESS (j'aurais bien voulu choisir une autre mais c'est imposé ).
Le problème est que dans une table de ma BdD, une colonne est de type boolean, celle ci alimente une colonne de mon tableau.
L'affichage dans le tableau du booléen donne une JCheckBox, seulement elle ne change pas de statut lors du clic.
Quelqu'un aurait une idée? Je prends toute les réponses possible
++ et Merci
Bon...j'arrive pas bien à comprendre le fonctionnement du "DefaultCellEditor"
la dernière colonne de ma JTable est alimenté par une base ACCESS et est de type booléen transformé en CheckBox avec le:
getColumnClass(int col);
.
J'ai utilisé le DefaultCellEditor comme tu m'as proposé et lorsque je lance l'application, il m'affiche bien mes JCheckBox mais lorsque je click dessus il change bien de statut seulement dès que je clic sur une autre CheckBox, il reprend son ancien statut.
Je crois que j'ai pas compris grand chose au CellEditor...
MMhhhhhh bon j'vais essayer de ne pas te submergé de code
donc voilà en gros l'initialisation de mon tableau:
/////////////////////////////////////////////////////////////
//////////////////////Paramètre Tableau//////////////////////
nbLigne = ConnectionTableau.nbLigne(nbLigne);
donnees = new Object [nbLigne][18];
donnees = DonneesTableau.donnees(donnees);
MonModele centre = new MonModele(donnees, titreColonnes);
JTable tableau = new JTable(centre);
DefaultTableCellRenderer Drenderer = new CouleurCellule();
tableau.setDefaultRenderer(String.class, Drenderer);
tableau.getTableHeader().setReorderingAllowed(false);//déplacement colonne(non)
tableau.getTableHeader().setResizingAllowed(false);//redimenssionner colonne(non)
tableau.getTableHeader().setDefaultRenderer(new CouleurColonne());
JScrollPane milieuC = new JScrollPane(tableau);
//tableau.getColumn("Clôt").setCellEditor(new BoxEditeur(new JCheckBox()));
donc "MonModele" est la clsse étendu d'AbstractTableModel
qui change mes booléen en "checkbox".
Pour ce qui est de la récupération des données de la colonne en question, j'envoi l'Object 'donnees' à la méthode 'donnees' de la classe 'DonneesTableau':
donnees = DonneesTableau.donnees(donnees);
Dans la classe 'DonneesTableau', j'ai créer un tableau de booléen (clotureTab) qui se rempli de booléen provenant de ma base ACCESS et grâce à ce tableau, je rempli mon Object donnees:
for(int i = 0; i < clotureTab.length; i++)
{
tableau[i][17] = clotureTab[i];
}
return tableau;
Voilà mon tableau est rempli, les booléen en checkbox,seul la colonne contenant les checkbox sont éditable.
Pour le CellEditor,je ne vois pas comment lui envoyer la checkbox du tableau vu qu'à la base,c'est un booléen.
dans l'exemple, je remplace le bouton par un JChecBox et quelque autre modif mais j'imagine que je suis à côté de la plaque, le résultat est que j'ai toujours ma case qui se coche et qui se décoche dès que je clic ailleurs.
Je planche dessus depuis ce matin 8h et je le vis mal .
Je vais faire travailler ce qui me reste de cerveau jusqu'à 16h30 et je posterais mon avancement.
Mais c'est déjà super sympa de ta part ton aide, merci beaucoup.
Bon, me revoilà,j'ai planché dessus encore hier soir et j'ai trouvé une solution....et oui mais elle est un peu
barbare .
j'ai pris le modèle que tu m'as passé avant hier que j'ai modifié bien sùr.
voilà ce que j'ai mis:
public Component getTableCellEditorComponent
(JTable table, Object value,
boolean isSelected, int row, int column)
{
if(value instanceof Boolean)
{
if(value == (Object)true)
{
System.out.println("je suis true et je vais devenir false");
value = (Object)false;
table.setValueAt(value, row, column);
}
else if(value == (Object) false)
{
System.out.println("je suis false et je vais devenir true");
value = (Object) true;
table.setValueAt(value, row, column);
}
}
return table;
}
J'ai testé. Le programme rentre bien dans la condition, la case se coche et se décoche à volonté et garde son statut et en regardant la valeur dans le tableau,elle change aussi (true/false).
Mais le problème est qu'à chaque fois, il me met cette erreur:
"Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: adding container's parent to itself".
je suis en train de me dire que j'envoie peut être un tableau dans la cellule .est ce que c'est possible?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.