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 :

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
    }
});
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.

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
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);
    }
});
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
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());
        }
    }
});