将JMenu ButtonGroups与JToolbar ButtonGroups同步

时间:2009-08-13 08:57:09

标签: java swing menu toolbar action

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

View
  Left Justify
  Center Jusitfy
  Right Justify

这包括JRadioButtonMenuItems和一个ButtonGroup,以确保任何时候只选择一个项目。

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

使用相同的Action初始化“Left Justify”JRadioButtonMenu和JToggleButton,依此类推其他项。

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

5 个答案:

答案 0 :(得分:2)

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

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

这将为你完成所有工作!

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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