在摆动 GUI 中选择继承与组合 [重复]

Posted

技术标签:

【中文标题】在摆动 GUI 中选择继承与组合 [重复]【英文标题】:Choosing between inheritance vs composition in swing GUIs [duplicate] 【发布时间】:2015-06-20 01:49:03 【问题描述】:

我习惯于使用 netbeans 拖放进行 java swing 编程,从来没有真正关心过它生成的代码。现在我正在学习编写无需拖放的 GUI 代码。

我遇到的根本问题是,我要制作的窗口是IS_A JFrame 还是HAS_A JFrame。即是否使用继承或组合。

如果 MyWindow 是 JFrame

public class MyWindow extends JFrame


如果 MyWindow 有 JFrame

 public class MyWindow
     private JFrame frame; 
 

在我看来,两者都很好。但我想应该有一个正确的方法来做到这一点。什么是正确的方法,为什么?

【问题讨论】:

【参考方案1】:

如果您希望您的类表现得像一个窗口,那么您应该从 JFrame 扩展它(至少在我看来)。据我所知,你应该这样做。

另一方面,如果您想要一个可以访问窗口的类,那么您将使用第二个选项。话虽如此,您仍然会在某些时候需要初始化一个从 JFrame 扩展的类。

编辑:问题的答案确实如此,但它也说这取决于你所追求的。如果我正确理解了答案(也许其他人可以对此发表评论),如果您有一个需要框架来将列表打印到表格的场景,您可以拥有一个 extends Frame 的类并提供一个实用方法接收一个列表并将其打印到一个表中。然后,您的逻辑将实例化此类而不是实际的 JFrame 并使用它来显示数据。

我的方法通常是,我有一个扩展 JFrame 的类,并提供了一系列使打印数据变得容易的方法。然后我会有另一个类,它链接逻辑层和视图层。该类将引用 JFrame 扩展类。

【讨论】:

@assylias 指出的问题指出,组合是首选。您对此有何看法? @DesirePRG:我试图放大我的答案。如果您还有任何疑问,请告诉我。

以上是关于在摆动 GUI 中选择继承与组合 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何添加文件选择器以摆动 GUI 表单调​​色板组件 IntelliJ IDEA

扫盲-继承与组合

Java基础08 继承

Java基础08 继承

使用通过 React GUI 触发的实体框架向 DB 添加新条目时出现重复条目

从多个表中选择***产品组合重复产品并求和数量