首页 > 解决方案 > JFrame 与容器

问题描述

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

他们为什么这样做?是因为这个JFrame类总是有一个预定义的窗口,你可以操纵它的某些方面,但是Container和其他类给你更多的自由来创建一个窗口?

对于我的问题(我不知道它是否真实)在JFrame课堂上的一个例子,关闭按钮总是转到窗口的右角,但如果我这样做,你可以把它放在你喜欢的任何地方。(如果可以回答是或否)。

标签: javaswingjframeawtcontainers

解决方案


所以我的问题是他们为什么这样做

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

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

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

根窗格

*从如何使用根窗格

这意味着如果你从这个类扩展,你必须愿意管理很多额外的复杂性,很多开销只是为了显示一些组件。

原则上,最好使用组合而不是继承,这就引出了第二点。

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

相反,如果您从一个基类开始,例如JPanel,您可以随时将它添加到您想要的任何容器中,它总体上增加了该类的灵活性和可重用性。

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

是和不是。框架边框由外观委托定义,因此您实际上并没有从正确的位置开始。

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

无论如何,最好支持用户期望,将关闭按钮放在不寻常的地方可能会使 UI “漂亮”,但会降低用户体验 - 作为一般指导方针,无论如何都不要降低用户体验很棒的程序或 UI,用户不会因此而喜欢你 - 但这是另一个(非常广泛的)问题


推荐阅读