2009-08-13 70 views
5

想象一下,我正在用Java Swing制作一个简单的字处理器。我已经写了一组用于执行文本对齐的动作。在菜单栏上我有一个菜单:用JToolbar ButtonGroups同步JMenu ButtonGroups

 
View 
    Left Justify 
    Center Jusitfy 
    Right Justify 

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

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

“左对齐”JRadioButtonMenu和JToggleButton使用相同的Action初始化,等等与其他项目一起使用。

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

回答

2

大量搜索,我发现信息here后我。基本上,您可以将此添加到您的动作的actionPerformed方法:

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

而这将为您做所有的工作!

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

+0

这只适用于Java 6。 – 2009-08-13 16:18:59

0
+0

谢谢。但是,为了应用这种模式,似乎需要进行大量的重构。看来,如果我这样做,我必须专门为每个项目编码。我希望有一个更智能的方法来自动确定这一点,因为菜单项和工具栏项共享相同的操作。 – arooaroo 2009-08-13 11:32:11

1

Observer pattern我的朋友。菜单栏可以观察工具栏,工具栏可以观察菜单栏。他们都将是观察员和可观察的。每个人都有自己的监听者,在变化事件中,通知观察者(另一个人)参数中的新值。

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

0

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