java - JFrame 与容器
问题描述
我读到使用JFrame
该类出现的窗口是一个Container
具有预定义功能(最小化、关闭)的窗口,但我发现没有使用JFrame
该类但其他类(其中一个Container
)的人要困难得多。
他们为什么这样做?是因为这个JFrame
类总是有一个预定义的窗口,你可以操纵它的某些方面,但是Container
和其他类给你更多的自由来创建一个窗口?
对于我的问题(我不知道它是否真实)在JFrame
课堂上的一个例子,关闭按钮总是转到窗口的右角,但如果我这样做,你可以把它放在你喜欢的任何地方。(如果可以回答是或否)。
解决方案
所以我的问题是他们为什么这样做
有两个“主要”原因。首先是关于整体良好的编程。
我们倾向于建议避免从我们没有添加任何新功能或可重复特性的类进行扩展。如果扩展 from 的全部原因JFrame
只是为了显示一些组件,那么它确实不是一个好的选择或起点。
JFrame
也是一个复杂的复合成分。也就是说,它实际上由许多其他分层组件组成,这些组件协同工作以提供整体体验。
*从如何使用根窗格
这意味着如果你从这个类扩展,你必须愿意管理很多额外的复杂性,很多开销只是为了显示一些组件。
原则上,最好使用组合而不是继承,这就引出了第二点。
从任何类扩展都会将您锁定在该类用例中。在 的情况下JFrame
,您只能通过 显示该类管理的内容JFrame
,没有灵活性或可重用性的入口点。
相反,如果您从一个基类开始,例如JPanel
,您可以随时将它添加到您想要的任何容器中,它总体上增加了该类的灵活性和可重用性。
对于我的问题(我不知道它是否真实)在 JFrame 类中的一个示例,关闭按钮总是转到窗口的右角,但如果我这样做,你可以把它放在你喜欢的任何地方。(如果可以用是或否回答)
是和不是。框架边框由外观委托定义,因此您实际上并没有从正确的位置开始。
大多数外观委托将框架边框委托给本机平台,在 Windows 的情况下,是的,关闭按钮在右侧,在 Mac 上它在左侧。
无论如何,最好支持用户期望,将关闭按钮放在不寻常的地方可能会使 UI “漂亮”,但会降低用户体验 - 作为一般指导方针,无论如何都不要降低用户体验很棒的程序或 UI,用户不会因此而喜欢你 - 但这是另一个(非常广泛的)问题
推荐阅读
- javascript - 更新到 Angular 8 后找不到模块 @angular/common/http/src/params
- java - 如何在获取请求上发送多个参数
- c# - 如何在gridview中读取动态添加的texbox值
- javascript - 在 React 中动态渲染图像非常困难
- javascript - Safari 在所有脚本都准备好之前不会呈现,不像 Chrome 或 Firefox
- c++ - 如何使用作为模板参数的模板
- angular - 如何从ngrx商店获取价值
- react-native - 带有标题下拉菜单的导航适用于世博小吃,但不适用于 CLI
- c - 处理有符号整数数组,就好像它包含无符号值一样
- c# - 如何为 Microsoft OAuth2 提供程序的本机应用程序指定 localhost loopback redirect_uri?