Bonjour,
J'ai besoin d'afficher un JPopupMenu sur une JTable même lorsque celle-ci est vide. Pour y arriver, j'ai surchargé la méthode configureEnclosingScrollPane() de ma JTable :
J'ai ensuite placé le listener suivant sur ma JTable :
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 @Override protected void configureEnclosingScrollPane() { super.configureEnclosingScrollPane(); Container container = getParent(); if ( container instanceof JViewport ) { JViewport viewport = (JViewport) container; viewport.addMouseListener(new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { Component source = (Component) e.getSource(); MouseEvent evt = SwingUtilities .convertMouseEvent(source, e, JTableClickable.this); for (MouseListener l : getListeners(MouseListener.class) ) { l.mouseClicked(evt); } } @Override public void mousePressed(MouseEvent e) { Component source = (Component) e.getSource(); MouseEvent evt = SwingUtilities .convertMouseEvent(source, e, JTableClickable.this); for (MouseListener l : getListeners(MouseListener.class) ) { l.mousePressed(evt); } } @Override public void mouseReleased(MouseEvent e) { Component source = (Component) e.getSource(); MouseEvent evt = SwingUtilities .convertMouseEvent(source, e, JTableClickable.this); for (MouseListener l : getListeners(MouseListener.class) ) { l.mouseReleased(evt); } } }); } }
Je récupère bien mon évènement lors du click approprié, mon JPopupMenu s'affiche mais pas correctement; Il ne disparait jamais et l'effet de "rollover" est absent. Pourtant les actions sont bien effectuées lorsque je clique dessus.
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 private class InternalTablePopupListener extends MouseAdapter { private JPopupMenu popup; public InternalTablePopupListener() { popup = new JPopupMenu(); popup.add(new AbstractAction("Say plop"){ @Override public void actionPerformed(ActionEvent e) { System.out.println("PLOP"); } }); } @Override public void mousePressed(MouseEvent e) { maybeShowPopup(e); } @Override public void mouseReleased(MouseEvent e) { maybeShowPopup(e); } protected void maybeShowPopup(MouseEvent e) { System.out.println("maybeShowPopup : "+e.isPopupTrigger()); if ( e.isPopupTrigger() ) { popup.setLocation(e.getLocationOnScreen()); popup.setVisible(true); } } }
L'un d'entre vous à t'il une idée ? Pour ma part je suis assez perdu.
Je pensais que la cause venait du MouseEvent qui était produit par le JScrollPane et non pas la JTable mais après avoir convertit l'évènement avec SwingUtilities je constate que celà ne change rien.
Merci de votre aide.
Partager