Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSwing:如何正确实例化GUI并传递域对象?_Java_Oop_Swing_Design Patterns - Fatal编程技术网

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

JavaSwing:如何正确实例化GUI并传递域对象?,java,oop,swing,design-patterns,Java,Oop,Swing,Design Patterns,我有一个带有嵌套面板的GUI(带有嵌套面板等的选项卡)。我需要将域对象传递到深度嵌套的面板。我可以想出两种方法: 在一个地方实例化所有gui对象,如框架类。那个 将使传递域对象变得非常简单,但框架类将 体积庞大且难以维护 每个面板都有自己的类,我们在其中实例化和布局它的 组件。现在它很容易维护,类也很干净,但是如何 我是否将我的域对象向下传递链?我不想连锁反应 他们通过面板的构造器,甚至不应该知道他们的 存在。顶层的面板上会有很多这样的物体 首先 尼瑟的方式就像一个解决方案。您通常如何处理这

我有一个带有嵌套面板的GUI(带有嵌套面板等的选项卡)。我需要将域对象传递到深度嵌套的面板。我可以想出两种方法:

  • 在一个地方实例化所有gui对象,如框架类。那个 将使传递域对象变得非常简单,但框架类将 体积庞大且难以维护

  • 每个面板都有自己的类,我们在其中实例化和布局它的
    组件。现在它很容易维护,类也很干净,但是如何
    我是否将我的域对象向下传递链?我不想连锁反应 他们通过面板的构造器,甚至不应该知道他们的
    存在。顶层的面板上会有很多这样的物体 首先


尼瑟的方式就像一个解决方案。您通常如何处理这一问题?

这是一种责任链模式。我要做的是创建一个包含所有显示对象的映射,并将它从一个构造函数传递到另一个构造函数。这样,每个实例都可以从映射中获取它所需要的内容,而不必关心还有什么其他内容。

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

每个面板都有自己的类,我们在其中实例化和布局面板 组件。现在它很容易维护,类也很干净,但是如何维护呢 我是否将我的域对象向下传递链

你的想法是对的,虽然你不需要做很多传球

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

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

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


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

这是一个有趣的问题,我不确定专业人员如何解决这个问题,但有一种想法是域对象(不管是什么)不会直接传递给GUI,而是传递给它的模型,GUI将附加侦听器以对模型中的更改作出反应。谢谢你的提问。我将听这个帖子,看看专业人士有什么要说的。这个链接可能会很有用:。我知道我觉得它很迷人!MVC是正确的指导原则:每个视图都应该包含对它所侦听的模型的引用。依我看,这个问题没有足够的细节来说明更多。另请参见此链接。@HovercraftFullOfEels-您应该将该链接作为答案发布。很有启发性。但愿我第一次接触Swing时就知道这一点。