2009-12-14 103 views
0

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

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

然而,这件事情让人觉得很失落,所以我决定我会问是否有更好的方法。

回答

1

我选择在我自己的应用程序中解决这个问题的方法是使用DefaultMutableTreeNode类的“userObject”属性,该类允许您随存储节点一起存储所需的任何数据。我有许多类型的东西,它们都是从定义了“createPopupMenu()”方法的抽象基类中扩展而来的。然后,在选择监听器中(就像你在你的问题中所描述的那样),我得到用户对象并要求它创建一个适合于所选对象的弹出式菜单并显示它。

1

获取选定的树节点非常简单,应该按照您所描述的那样工作。要修改弹出菜单,我建议使用Action s。这样你就不必修改你的实况菜单,也可以添加例如一个JToolBar,其中包含的操作与菜单中的项目具有相同的操作方式。

相关问题