Java Swing:如何正确实例化GUI并传递域对象?

时间:2011-10-22 22:21:20

标签: java oop swing design-patterns

我有一个带有嵌套面板的GUI(带有嵌套面板的标签等)。我需要将域对象传递给深层嵌套的面板。我可以想到两种方式:

  • 在一个地方实例化所有gui对象,比如帧类。那 会使传递域对象变得简单,但Frame类会 是巨大的,几乎无法维持。

  • 每个面板都有自己的类,我们在其中实例化并布局其中 组件。现在它易于维护,课程干净,但如何 我传递链接我的域对象?我不想连锁 他们通过面板的构造者,甚至不知道他们的 所有脑干。顶级面板将拥有大量这些对象 从...开始。

Niether的方式似乎是一种洗礼。你通常如何接受这个?

2 个答案:

答案 0 :(得分:2)

当我整合Java Swing GUI时,我有一个每个主要GUI元素的数据模型。请注意,这不是MVC模式。这更像是一个本地MV模式。如果需要,可以将GUI元素侦听器视为“控制器”。

  

每个面板都有自己的类,我们在其中实例化和布局它   组件。现在它易于维护和课程干净,但如何   向下传递我的域对象链吗?

你有正确的想法,虽然你不应该做太多的传球。

我的JFrame(或JApplet)将具有关联的全局类型字段的模型类。此模型类的实例通常会传递给children元素。这是为了允许子元素在选择菜单选项时作出正确反应(作为示例)

我的JPanel(s)将有一个关联的模型类,用于维护文本或按钮子元素的状态。

更复杂的子元素,如JListJTree,已经有了相关的数据模型。为方便起见,我可能会将这些关联的数据模型包装到JPanel模型类中。

子元素将触发某种选择或动作侦听器。除了与父级关联的模型类之外,其中一些侦听器可能需要访问模型类。在这种情况下,您将不得不将模型类的实例传递给侦听器。

答案 1 :(得分:0)

这是一种责任链模式。我要做的是创建一个包含所有显示对象的地图,并将其从构造函数传递给构造函数。这样每个实例都可以从地图中获取所需的内容,而无需关心其他内容。