在这种情况下,工具栏和绘图面板是否应该相互了解?

时间:2011-11-03 14:40:53

标签: java user-interface

我有一个带有组合框的工具栏。当项目在组合框上发生变化时,它会调用绘图面板(工具栏有一个引用)来告诉绘图面板更改形状类型。现在,绘图面板有一个弹出菜单,可以改变形状类型。因此,当弹出菜单改变形状类型时,也需要通知组合框。我能想到的唯一方法是绘制面板有一个工具栏的引用,但我不喜欢循环依赖的想法。还有更好的方法吗?

由于

1 个答案:

答案 0 :(得分:2)

根据通常被认为是GUI编码的最佳方法的模型 - 视图 - 控制器模式,您将拥有模型,视图和控制器。在这种情况下,底层模型将是与组合框的状态以及弹出菜单显示的内容相对应的某个值。视图是组合框和弹出菜单。他们都是控制者,因为他们可以改变模型的状态。

因此,实现这一目标的“干净”方法是将状态单独保存在某处并在其中包含应在模型状态更改时通知的组件列表。在状态更改时,应迭代列表,并且其中的组件应更新其视图。组合框和菜单条目应该注册为“听众”。

现在,我说这是“干净”的方式,但对于一个简单的设置,你不一定 以这种方式实现它。它可以使事情复杂化并使代码不易清晰。另一方面,使用MVC方式将使未来的更改变得更容易,例如添加新的视图/控制器。在没有MVC的情况下执行此操作会导致越来越多的组件需要了解彼此的存在,而现在它们将被完全封装在模型中。