想象一下,我正在使用Java Swing创建一个简单的字处理器。我已经编写了一组用于执行文本对齐的Actions。在MenuBar上我有一个菜单:
View Left Justify Center Jusitfy Right Justify
这包括JRadioButtonMenuItems和一个ButtonGroup,以确保任何时候只选择一个项目。
另外,想象一下,我有一个由JToggleButtons和ButtonGroup组成的等效工具栏,以确保在任何时候只有一个按钮可以处于活动状态。
使用相同的Action初始化“Left Justify”JRadioButtonMenu和JToggleButton,依此类推其他项。
我的问题是:同步两组的最佳方法是什么?如果我单击工具栏上的“右对齐”图标,我希望菜单中的组相应更新,反之亦然。
答案 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更改时,侦听器将它们都设置为新值。