Bonsoir !
Je cherche à effectuer l'affichage d'une popup sur une JTable. Jusque là, pas vraiment de soucis, mais ça se corse quand j'essaie de rendre un des JMenuItem de la popup enabled ou non en fonction d'une info contenue dans une row de la JTable en question.
Donc, ça donne qqchose comme ça :
Sauf que systématiquement, je récupère l'id de la row précédemment cliquée, ou -1 lorsque je clique la première fois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 popupMenu.addPopupMenuListener(new PopupMenuListener() { public void popupMenuWillBecomeVisible(PopupMenuEvent e) { int row = myTable.getSelectedRow(); System.out.println("Ligne sélectionnée : " + row); // Ici la logique pour désactiver un des JMenuItem selon que // la row a ou non la valeur adéquate } });
J'imagine qu'il s'agit d'un soucis dans la mise en place de la jpopup et des listeners, mais je n'ai pas vraiment d'idées où chercher...
Si quelqu'un a déjà rencontré le soucis, je suis preneur de toute aide !
Merci d'avance
EDIT : Je précise que pour les listeners dans les JMenuItem, je n'ai pas ce soucis car je passe par JTable.rowAtPoint()
EDIT 2 : De plus, j'ai exactement le même problème avec ce code-ci
EDIT 3 : Je me rapproche, mais maintenant le clic droit ne fonctionne plus quand la popup est toujours ouverte, donc je dois faire un clic gauche quelque part pour fermer la popup, et un nouveau clic droit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 myTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { int currentSelectedRow = e.getFirstIndex(); System.out.println("Ligne sélectionnée : " + currentSelectedRow); } });
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 myTable.addMouseListener(new MouseListener() { public void mousePressed(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON3) { JTable source = (JTable) e.getSource(); int row = source.rowAtPoint(e.getPoint()); int column = source.columnAtPoint(e.getPoint()); if (!source.isRowSelected(row)) source.changeSelection(row, column, false, false); System.out.println("Ligne sélectionnée : " + source.getSelectedRow()); } } });
Partager