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

5
假设我使用Java Swing制作一个简单的文字处理器。我编写了一组操作来执行文本对齐。在菜单栏上,我有一个菜单:
查看 左对齐 居中对齐 右对齐
其中包括JRadioButtonMenuItems和ButtonGroup,以确保任何时候只有一个项目被选中。
另外,假设我有一个等效的工具栏,由JToggleButtons组成,同样使用ButtonGroup来确保任何时候只有一个按钮处于活动状态。
“左对齐”JRadioButtonMenu和JToggleButton使用相同的Action进行初始化,并且其他项目也是如此。
我的问题是:同步两个组的最佳方法是什么?如果我在工具栏上点击“右对齐”图标,我希望更新菜单中的组,反之亦然。
5个回答

2

我经过大量搜索后,在这里找到了相关信息。基本上,你可以将以下内容添加到你的actionPerformed方法中:

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

这将为您完成所有的工作!

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


1

观察者模式,我的朋友。菜单栏观察工具栏,而工具栏观察菜单栏。它们都是观察者和被观察者。每个人都有自己的监听器,在更改事件上,通过参数将新值通知给观察者(另一个)。

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


0

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

0

0
另一方面(我再次提醒),您可以在外部类中编写一个监听器。一个监听器用于菜单,一个用于工具栏。当其中一个发生变化时,监听器将两者都设置为新值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接