bonjour,
je cherche a améliorer mon code :
j'ai un JXTreeTable auquel je joins un JPopupMenu, le contenu du popupmenu changer en fonction de la ou je suis.
j'ai donc mit un ecouteur sur mon JXTree et je met a jour le popupmenu selon la ou je suis. avec cette facon il est mit a jour a chaque changement de selection meme s'il n'est pas affiché.
ca marche pas de soucis, mais je prefererai le mettre a jour uniquement sur un click droit (au moment de son affichage).
une idée? (pas un mouseEvent)
le JPopupMenu :
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 package altersigroot.structure.treetable; import altersigroot.ENV; import altersigroot.structure.ASMapContext; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; /** * * @author johann Sorel */ public class ASPopupMenu extends JPopupMenu{ private ASTreeTable tree; /** Creates a new instance of ASPopupMenu */ public ASPopupMenu(ASTreeTable tree) { this.tree = tree; tree.getTree().addTreeSelectionListener( new ASPopTreeListener(this)); } } class ASPopTreeListener implements TreeSelectionListener{ private ASPopupMenu pop; public ASPopTreeListener(ASPopupMenu menu){ pop = menu; } public void valueChanged(TreeSelectionEvent e) { final Object obj = e.getPath().getLastPathComponent() ; pop.removeAll(); if( obj instanceof ASMapContextNode){ JMenuItem mi = new JMenuItem("Activer"); mi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ENV.KERNEL.setActiveMapContext( ((ASMapContextNode)obj).getContext() ); } }); pop.add(mi); }else if( obj instanceof ASPackageNode){ ... }else if( obj instanceof ASLayerNode){ ... } pop.revalidate(); } }
Partager