Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JMenu按钮组与JToolbar按钮组同步_Java_Swing_Menu_Toolbar_Action - Fatal编程技术网

Java 将JMenu按钮组与JToolbar按钮组同步

Java 将JMenu按钮组与JToolbar按钮组同步,java,swing,menu,toolbar,action,Java,Swing,Menu,Toolbar,Action,想象一下,我正在用JavaSwing制作一个简单的字处理器。我已经编写了一组操作来执行文本对齐。菜单栏上有一张菜单: View Left Justify Center Jusitfy Right Justify 看法 左对齐 中央司法 正当理由 这包括JRadioButtonMenuItems和一个按钮组,以确保在任何时候只选择一个项目 另外,假设我有一个等价的工具栏,由JToggleButtons和ButtonGroup组成,以确保在任何时候只有button是活动的 “Left J

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

View Left Justify Center Jusitfy Right Justify 看法 左对齐 中央司法 正当理由 这包括JRadioButtonMenuItems和一个按钮组,以确保在任何时候只选择一个项目

另外,假设我有一个等价的工具栏,由JToggleButtons和ButtonGroup组成,以确保在任何时候只有button是活动的

“Left Justify”JRadioButtonMenu和JToggleButton使用相同的操作初始化,依此类推


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

在大量搜索我找到的信息后,查看一下I。基本上,您可以将其添加到操作的actionPerformed方法中:

action.putValue(Action.SELECTED_KEY, Boolean.TRUE);
这会帮你完成所有的工作


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

如果您使用的是Swing动作,那么如果动作本身被激活,组件应该被自动禁用/启用。您可以将自己注册为操作的propertyListener,也可以监视其他更改。查看哪些属性可用的详细列表。

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


observer模式的一个最大优点是耦合性非常低,因此您不需要进行大量重构来实现链接、修改链接或在将来删除链接。

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

谢谢。但要应用这种模式,似乎需要进行大量的重构。似乎如果我这样做的话,我必须为每一项专门编码。我希望有一种更智能的方法来自动确定这一点,因为菜单项和工具栏项共享相同的操作。