JFrame与容器

时间:2018-06-25 20:44:56

标签: java swing jframe awt containers

我了解到,使用JFrame类显示的窗口是具有预定义功能(最小化,关闭)的Container,但是我发现没有使用JFrame类的人但是其他类(其中一个是Container)则要困难得多。

他们为什么这样做?是因为JFrame类始终具有预定义的窗口,您可以操纵它的某些方面,但是Container和其他类为您提供更多创建窗口的自由?

JFrame类中,我的问题的一个示例(我不知道它的真实与否)总是将关闭按钮移到窗口的右角,但是如果我用其他方式这样做,可以把它放在您喜欢的任何地方。 (如果可以用是或否回答)。

1 个答案:

答案 0 :(得分:1)

  

所以我很想问他们为什么要那样做

有两个“主要原因”。首先是关于整体良好的编程。

我们倾向于建议避免从没有添加任何新功能或可重复功能的类扩展。如果从JFrame扩展的全部原因只是为了您可以显示一些组件,那么这实际上不是一个好的选择或起点。

JFrame也是一个复杂的复合成分。也就是说,它实际上由许多其他分层组件组成,这些组件可以协同工作以提供总体体验。

RootPane

*来自How to Use Root Panes

这意味着如果您从此类扩展,您将不得不管理很多额外的复杂性,仅显示一些组件便需要大量开销。

原则上,最好使用组合而不是继承,这会导致第二点。

从任何类扩展都将您锁定在该类用例中。对于JFrame,您只能通过JFrame显示该类所管理的内容,没有灵活性或可重复使用性的入口点。

相反,如果您从一个JPanel的基类开始,则可以将其添加到所需的任何容器中,这将增加该类在所有容器中的灵活性和可重用性

  

对于我的问题(例如,我不知道它的真实与否),在JFrame类中,关闭按钮始终位于窗口的右上角,但是如果我这样做,则可以将其放置在任意位置(如果可以用是或否回答)

是,不是。框架边框是由外观委托定义的,因此无论如何您实际上并不是从正确的地方开始。

大多数外观委托将框架边框委托给本机平台,对于Windows,是的,关闭按钮在右侧,在Mac上则在左侧。

无论如何,最好能满足用户的期望,将关闭按钮放在不寻常的位置可能会使UI变得“漂亮”,但会降低用户体验-作为一般指导原则,请不要降低用户体验,无论您的程序或UI多么出色,用户都不会喜欢您-但这又是一个(非常广泛的)问题