Bonjour tout le monde,
J'ai un JPanel qui contient un JTable et JComboBox :
j'initialise le comboBox comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 private JComboBox citereRechercheComboBox; private JTable listeRdvTable;
et le JTable comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()); }
Jusqu'au là c'est bon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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"); } } }
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.
Partager