5

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

看法
  左对齐
  中心对齐
  右对齐

这由 JRadioButtonMenuItems 和一个 ButtonGroup 组成,以确保在任何时候只选择一个项目。

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

“左对齐” JRadioButtonMenu 和 JToggleButton 使用相同的 Action 进行初始化,其他项目以此类推。

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

4

5 回答 5

2

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

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

这将为您完成所有工作!

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

于 2009-08-13T12:36:05.247 回答
1

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

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

于 2009-08-13T19:01:02.473 回答
0

看看中介者设计模式

于 2009-08-13T10:25:55.917 回答
0

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

于 2009-08-13T12:42:48.503 回答
0

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

于 2009-08-13T19:04:26.523 回答