想象一下,我正在用的Java Swing一个简单的字处理器。我有一组写来完成文本对齐操作的。在菜单栏上我有一个菜单:

View
  Left Justify
  Center Jusitfy
  Right Justify

这由JRadioButtonMenuItems和ButtonGroup的,以确保只有一个项目在任一个时刻被选择。

此外,假设我有一个相应的工具栏包括JToggleButtons的和再次ButtonGroup的,以确保只有唯一的按钮可以在任何一个时间是活动的。

在“左对齐” JRadioButtonMenu和JToggleButton中都使用相同的动作与其他项目初始化,等等。

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

有帮助吗?

解决方案

我有很多搜索后我发现信息这里。基本上,你可以将它添加到你的动作的actionPerformed方法:

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

这将做所有的工作为您服务!

不幸的是,Sun官方教程不讨论这方面(或至少我没有发现它),因此,在发现这样一个简单的方法来解决我的问题的难度。

其他提示

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

一个观察者模式的巨大优势是,有非常低耦合,所以你并不需要大量的重构来实现连接,对其进行修改或在未来将其删除。

看一看的中保设计模式

如果您使用的是摇摆动作的部件应禁用/启用自动如果动作本身。您可以自己作为一个propertyListener到动作暂存器以及监视其他变化。看看 http://java.sun.com/ JavaSE的/ 6 /文档/ API /的javax /摆动/ Action.html 获得详细列表,其中属性是可用的。

在另一方面(我再一次),你可以只写1名听众在外部类。一位听众的菜单和工具栏。当1点发生变化时,收听他们两个设置为新的值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top