Listener sur JTable [Résolu]

Signaler
Messages postés
23
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
12 août 2013
-
cs_BXH
Messages postés
23
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
12 août 2013
-
Bonjour à tous & à toutes !

Voici mon problème :
J'ai créer une table JTable et je souhaite maintenant ajouter des ActionListener sur certaines de mes colonnes.

Je m'explique :
Je possède 5 colonnes au total dont 3 booléenes que nous appelleront respectivement (bool1, bool2, bool3)
Je souhaiterais que, quand je coche le premier de ces champs (bool1) les 2 autres (bool2, bool3) soient automatiquement mit à jour avec la valeur true (coché) sur la ligne donnée.
Inversement, je souhaiterais que si je décoche bool2 ou bool3, bool1 soit automatiquement mit à jour sur false (décoché).

J'ai cherché à droite à gauche sur internet pour différents tutoriels mais je ne tombe jamais sur les mêmes méthodes...
Faut il que j'utilise un TableModelListener ? un SelectionListener ? Un ActionListener comme sur les radios ?
Bref...je suis un peu perdu.

Merci d'avance !

2 réponses

Messages postés
23
Date d'inscription
mercredi 9 août 2006
Statut
Membre
Dernière intervention
12 août 2013

J'ai réussi en surchargeant la méthode setValueAt(...) de ma classe modèle en fait.
Voici le code si jamais quelqu'un rencontre le même type de problématique :


public void setValueAt(Object value, int row, int col) {
    if (DEBUG) {
        System.out.println("Setting value at " + row + "," + col
                           + " to " + value
                           + " (an instance of "
                           + value.getClass() + ")");
    }
 
    data[row][col] = value;
    fireTableCellUpdated(row, col);
    
    int numRows = getRowCount();
    for (int i=0; i < numRows; i++) {
    	if (row i && col 0 && (Boolean) data[i][0]) {
    		data[i][4] = true;
        	data[i][5] = true;
        	fireTableCellUpdated(i, 4);
        	fireTableCellUpdated(i, 5);
        }
    	else if (row i && col 0 && !(Boolean) data[i][0]) {
    		data[i][4] = false;
        	data[i][5] = false;
        	fireTableCellUpdated(i, 4);
        	fireTableCellUpdated(i, 5);
        }
    	else if (!(Boolean) data[i][4] || !(Boolean) data[i][5]) {
    		data[i][0] = false;
    		fireTableCellUpdated(i, 0);
        }
    	else if ((Boolean) data[i][4] && (Boolean) data[i][5] && ((row == i && col == 4) || (row == i && col == 5))) {
    		data[i][0] = true;
    		fireTableCellUpdated(i, 0);
        }
    	
    }
    
    if (DEBUG) {
        System.out.println("New value of data:");
        printDebugData();
    }
}
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
259
Bonjour,

JE te conseil d'utiliser un ChangeListener pour abonner un composant aux modifications d'un autre.

Voilà la doc : http://docs.oracle.com/javase/tutorial/uiswing/events/changelistener.html
http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/event/ChangeListener.html