0

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

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

但是,对此感觉有些不对劲,所以我决定问 SO 是否有更好的方法。

4

2 回答 2

1

获取选定的树节点很简单,应该可以按照您的描述工作。要修改弹出菜单,我建议使用Action。这样您就不必修改实时菜单,还可以添加例如JToolBar,其中包含与菜单中的项目相同的反应方式的相同操作。

于 2009-12-14T21:32:37.223 回答
1

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

于 2009-12-14T21:35:39.527 回答