【问题标题】:Show/Hide JMenuItems in a JPopupMenu based on a JTree's selection根据 JTree 的选择在 JPopupMenu 中显示/隐藏 JMenuItems
【发布时间】:2009-12-14 21:12:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: java swing dynamic jtree jpopupmenu


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2017-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多