基于JTree的选择在JPopupMenu中显示/隐藏JMenuItems

时间:2009-12-14 21:12:39

标签: java swing dynamic jtree jpopupmenu

当我右键单击JTree中的节点时,我有一个显示JPopupMenu的JTree。基于JTree中选择的节点,在JPopupMenu中隐藏/显示或启用/禁用某些JMenuItem的最佳方法是什么?

首先想到的解决方案是将一个TreeSelectionListener添加到JTree中以获取'value changed'事件。在事件处理代码中,我将使用TreeSelectionEvent的getNewLeadSelectionPath()方法来获取最新选择的路径,并使用生成的TreePath对象的getLastPathComponent()来获取所选节点。从这里我将有一系列IF语句访问我的JPopupMenu对象并执行隐藏/显示特定JMenuItems所需的修改。

但是,有些事情对此感到不安,所以我决定问我是否有更好的方法。

2 个答案:

答案 0 :(得分:1)

获取所选树节点是直截了当的,应该按照您的描述工作。要修改弹出菜单,我建议使用Action。这样您就不必修改实时菜单,也可以添加例如一个JToolBar,其中包含与菜单中的项目相同的相同操作。

答案 1 :(得分:1)

我选择在自己的应用程序中解决这个问题的方法是使用DefaultMutableTreeNode类的“userObject”属性,该属性允许您只需要存储所需的任何数据。我有各种类型的东西,它们从定义“createPopupMenu()”方法的抽象基类扩展而来。然后,在选择监听器中(正如您在问题中描述的那样),我获取用户对象并要求它创建适合所选对象的弹出菜单并显示该对象。