【问题标题】:Sync JMenu ButtonGroups with JToolbar ButtonGroups将 JMenu ButtonGroups 与 JToolbar ButtonGroups 同步
【发布时间】:2009-08-13 08:57:09
【问题描述】:

想象一下,我正在使用 Java Swing 制作一个简单的文字处理器。我已经编写了一组操作来执行文本对齐。在 MenuBar 我有一个菜单:

看法 左对齐 中心对齐 右对齐

这由 JRadioButtonMenuItems 和一个 ButtonGroup 组成,以确保在任何时候只选择一个项目。

另外,假设我有一个由 JToggleButtons 和一个 ButtonGroup 组成的等效工具栏,以确保在任何时候只有按钮可以处于活动状态。

“左对齐”JRadioButtonMenu 和 JToggleButton 使用相同的 Action 进行初始化,以此类推。

我的问题是:同步这两个组的最佳方法是什么?如果我单击工具栏上的“右对齐”图标,我希望菜单中的组相应地更新,反之亦然。

【问题讨论】:

    标签: java swing menu toolbar action


    【解决方案1】:

    经过大量搜索,我找到了信息here。基本上,您可以将其添加到您的操作的 actionPerformed 方法中:

    action.putValue(Action.SELECTED_KEY, Boolean.TRUE);
    

    这将为您完成所有工作!

    不幸的是,Sun 的官方教程没有涵盖这方面(或者至少我没有发现),因此很难发现这样一种简单的方法来解决我的问题。

    【讨论】:

      【解决方案2】:

      Observer pattern我的朋友。菜单栏观察工具栏,工具栏观察菜单栏。它们都是观察者和可观察的。每个人都有自己的监听器,当发生变化事件时,它会用参数中的新值通知观察者(另一个)。

      观察者模式的一大优势是耦合度非常低,因此您不需要进行大量重构来实现链接、修改它或在将来删除它。

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 谢谢。但是为了应用这种模式,似乎需要进行大量的重构。看来,如果我这样做,我必须专门为每个项目编写代码。鉴于菜单项和工具栏项共享相同的操作,我希望有一种更智能的方法来自动确定这一点。
        【解决方案4】:

        如果您使用的是 Swing 动作,则组件应自动禁用/启用(如果动作本身是)。您可以将自己注册为操作的 propertyListener 以及监视其他更改。查看http://java.sun.com/javase/6/docs/api/javax/swing/Action.html 了解可用属性的详细列表。

        【讨论】:

          【解决方案5】:

          另一方面(又是我),您可以只在外部类中编写 1 个侦听器。菜单和工具栏的监听器。当 1 更改时,侦听器将它们都设置为新值。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-15
            • 2018-06-11
            • 2018-06-10
            • 2015-05-29
            相关资源
            最近更新 更多