Problème avec listner de JTable avec JComboBox
Bonjour tout le monde,
J'ai un JPanel qui contient un JTable et JComboBox :
Code:
1 2
| private JComboBox citereRechercheComboBox;
private JTable listeRdvTable; |
j'initialise le comboBox comme ç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
| citereRechercheComboBox.setModel(new javax.swing.DefaultComboBoxModel(
new String[] { "Patient en cours", "Rendez-vous du jour",
"Tous les rendez-vous", " " }));
citereRechercheComboBox
.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
citereRechercheComboBoxItemStateChanged(evt);
}
});
private void citereRechercheComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {
//Recherche des rendez-vous par date du jour.
if(getCitereRechercheComboBox()
.getSelectedIndex() == Constantes.CRITERE_RECHERCHE_UN){
java.sql.Date sDate = new java.sql.Date(System.currentTimeMillis());
this.setDateRdvTextfield(new JDateChooser(sDate));
}
//Recherche de tout les rendez-vous : cacher les labels.
if(getCitereRechercheComboBox()
.getSelectedIndex() == Constantes.CRITERE_RECHERCHE_DEUX){
this.nomPatientLabel.setText("");
this.prenomPatientLabel.setText("");
this.dateRDVLabel.setText("");
}
getUtilitaire().viderTable(null, this, null, null);
getRendezVousPatientControl().remplirTableRDV(this, getCitereRechercheComboBox()
.getSelectedIndex());
} |
et le JTable comme ç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
| listeRdvTable.setModel(new javax.swing.table.DefaultTableModel(
new Object[][] {
}, new String[] { "Nom", "Prénom", "Date RDV", "Heure RDV" }) {
/**
*
*/
private static final long serialVersionUID = 1L;
boolean[] canEdit = new boolean[] { false, false, false, false };
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit[columnIndex];
}
});
listeRdvTable.setName("listeRdvTable"); // NOI18N
jScrollPane1.setViewportView(listeRdvTable);
Dimension dim = new Dimension(dimensionTexteField.width + 200,
dimensionTexteField.height * 5);
jScrollPane1.setPreferredSize(dim);
listeRdvTable.getColumnModel().getColumn(0).setHeaderValue("Nom"); // NOI18N
listeRdvTable.getColumnModel().getColumn(1).setHeaderValue("Prénom"); // NOI18N
listeRdvTable.getColumnModel().getColumn(2).setHeaderValue("Date RDV"); // NOI18N
listeRdvTable.getColumnModel().getColumn(3).setHeaderValue("Heure RDV"); // NOI18N
//Ajout du listner.
ListSelectionModel listSelectionModel = listeRdvTable.getSelectionModel();
listSelectionModel.addListSelectionListener(new ControleurTableResultat());
public class ControleurTableResultat implements ListSelectionListener{
public void valueChanged(ListSelectionEvent listSelectionEvent){
if (listSelectionEvent.getValueIsAdjusting())
return;
ListSelectionModel lsm = (ListSelectionModel)listSelectionEvent.getSource();
if (lsm.isSelectionEmpty()) {
System.out.println("No rows selected");
}
else{
int selectedRow = lsm.getMinSelectionIndex();
System.out.println("The row "+selectedRow+" is now selected");
}
}
} |
Jusqu'au là c'est bon.
Alors si je change la sélection dans les lignes dans le JTable ça marche bien,(lorsque je debug le listner se lance deux fois, j'ai deux fois le message dans la console).
Mais le problème vient de ce scénario : si je sélectionne une ligne dans le tableau et je change la valeur du comboBox, dans ce cas là le listner se lance plusieurs fois (boucle infinie) et voici la sortie que j'ai :
par exemple je sélectionne la ligne 4 et je change dans le combo, voici la console:
The row 3 is now selected
The row 2 is now selected
The row 1 is now selected
The row 0 is now selected
No rows selected
No rows selected
No rows selected
No rows selected
No rows selected
==>SVP avez-vous une idée pour ça?
Merci d'avance.