2

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

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

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

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

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

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

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

谢谢。

4

2 回答 2

3

我认为你应该再读一遍那句话

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

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

当您packJFrame.

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

于 2012-08-30T16:10:58.063 回答
1

布局管理器之所以如此工作,是因为他们必须弄清楚他们管理的容器及其子容器的大小。做到这一点的最好方法是尽可能深入并通过再次返回(自下而上)开始计算其大小。如果一个容器有其他容器作为子容器,则这是递归完成的。

例如:

  • 我们有一个JPanel j1
  • 在 j1 中有一个 JButton
  • j1 在另一个面板 j2 内

现在计算 j2 大小的最好方法是一直到 jbutton 。它计算出 JButton 的大小是 50 x 50 像素。这意味着 j1 的大小是 50 x 50 加上它包含的任何孩子。假设它的大小为 200 x 200。在这种情况下,j2 知道它的孩子是 200 x 200,并在计算其大小时考虑到这一点。最后它达到 500 x 500 的大小(对于 j2)。

于 2012-08-30T16:03:04.210 回答