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
-
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
2
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
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
304
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