java - 为什么 Swing 布局管理器是自下而上工作的?

标签 java swing layout

http://docs.oracle.com/javase/tutorial/uiswing/layout/howLayoutWorks.html我们可以阅读:

“最终结果是,为了确定容器的最佳大小,系统确定位于容器层次结构底部的容器的大小。然后这些大小会向上渗透容器层次结构,最终确定容器的总大小。 ”

此注释与特定布局管理器无关,但似乎适用于通用布局机制。

如果经验丰富的 Java/Swing 程序员能够解释为什么这种方法比自上而下的方法更好,我将不胜感激。

在自上而下的方法中,顶级容器将告诉其组件: - 嘿,您有宽x高像素的组件可以自行布局! - 那么这些组件最终会告诉它们自己的组件做同样的事情。根据可用空间,每个组件将决定如何将其子组件布局到层次结构中。最终,在空间不足的情况下,某些组件可能会决定不自行绘制。

在我看来,这种方法(对于程序员来说)更容易理解和维护。

有人知道自上而下工作的替代布局管理器吗?

谢谢。

最佳答案

我认为你应该再次阅读那句话

The end result is that to determine the best size for the container, the system determines the sizes of the containers at the bottom of the containment hierarchy. These sizes then percolate up the containment hierarchy, eventually determining the container's total size.

这讨论了容器的最佳尺寸。这当然是由所有子组件的最佳尺寸决定的,所以最好从下到上计算。

这就是在 JFrame 上调用 pack 方法时发生的情况。

但是,最终子组件确实只能占用其父组件允许的空间。这就是 LayoutManager 发挥作用的地方:您在父组件上设置布局管理器,它将告诉子组件它们的位置和大小(通常考虑子组件指示的首选大小之类的事情)

关于java - 为什么 Swing 布局管理器是自下而上工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12200902/

相关文章:

java - 在 Swing 中切换面板和传递数据

java - 与 JavaMelody 集成后,每次 Rest 调用都会出现 404

java - 使用 Apache Beam 将重复的字符串写入 BigQuery

Java7u40 中的 javax.swing.Timer 变慢

javascript - 跨浏览器 HTML 布局的正确方法是什么?

java - 当我使用 sleep 时,JPanel 未正确更新 CardLayout

具有多线程的 Java Swing

java - 背景图片位置错误

wpf - 对齐堆栈面板中的项目?

html - 网站布局在放大和更改分辨率时调整大小