Listener sur JTable

Résolu
cs_BXH Messages postés 23 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 12 août 2013 - 24 janv. 2012 à 19:45
cs_BXH Messages postés 23 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 12 août 2013 - 25 janv. 2012 à 11:26
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

cs_BXH Messages postés 23 Date d'inscription mercredi 9 août 2006 Statut Membre Dernière intervention 12 août 2013 2
25 janv. 2012 à 11:26
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();
    }
}
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
25 janv. 2012 à 07:46
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
0
Rejoignez-nous