2

例如,您能解释一下 Horizo​​ntalLayoutContainer 和 HBoxLayoutContainer 之间的区别吗?

4

2 回答 2

5

阅读 JavaDoc 5 分钟后发现HBoxLayoutContainer

  • 支持自动溢出
  • 每个孩子都以最小和最大尺寸布置(在容器的轴上,所以这里在水平轴上,因此是最小/最大宽度)
  • 可能在孩子之间分配剩余空间(flex

鉴于HorizontalLayoutContainer

  • (可能)在孩子不适合时滚动
  • 以固定的宽度和高度(或它们的固有大小)布置其子项。

我的理解是在引擎盖下HBoxLayoutContainer使用 CSS3灵活盒模型HorizontalLayoutContainer,而宁愿使用display: inline-boxor float(或由 JavaScript 控制的等价物,可能使用position: absolute

于 2012-07-24T12:42:18.723 回答
0

一些例子会有所帮助。假设您在窗口中有一个固定大小的面板。您想用垂直堆栈的小部件填充面板,所以它看起来像这样:

[Select all]
[ ] Check box #1
[ ] Check box #2
...
[ ] Check box #n

如果列表太长,您需要复选框的垂直滚动条,但“全选”按钮不应滚动。

包含所有复选框的面板应该是一个 VerticalLayoutContainer。这很明显,因为 VBoxLayoutContainer 没有 getScrollSupport() 方法。

不明显的是外部面板(包含“全选”按钮和滚动面板的面板)也需要是一个 VerticalLayoutContainer。外部面板将采用其父级给定的大小,并将强制其子级适应自身。如果外面板是 VBoxLayout 面板,则滚动条会在内面板中消失。问题是外面板会使其自身和内面板尽可能大,以包含所有复选框。由于内部面板很大,滚动条永远不会出现。由于外板非常大,它会被切断。看起来您忘记将滚动条添加到内面板,即使您的错误出现在外面板中。

第二个示例:让我们在第一行添加更多按钮。

[Select all] [Select none] [Help]
[ ] Check box #1
[ ] Check box #2
...
[ ] Check box #n

在第一个示例中,我们将 [Select all] 按钮直接放入外部面板中。在这种情况下,我们需要制作一个新面板来保存按钮。在这种情况下,您需要一个 HBoxLayoutContainer。HBoxLayoutContainer 会自动将其高度设置为内部按钮的高度,外部面板会自动为 HBoxLayoutContainer 预留足够的空间。相反,如果您使用 Horizo​​ntalLayoutContainer,则该容器不会自动设置其高度。除非您手动设置该容器的高度(糟糕!),否则它的高度将为 0!即它会消失。

总之,当您在这些容器之间进行选择时,最重要的问题是该容器将如何与其父容器交互,而不是与其子容器交互。如果您希望容器选择自己的大小(如按钮栏),请使用 HBoxLayoutContainer 或 VBoxLayoutContainer。如果您希望容器使用其父级推荐的大小(如固定大小窗口中的主面板),请使用 Horizo​​ntalLayoutContainer 或 VerticalLayoutContainer。

如果您没有从 javadocs 中得到它,请不要感到难过。我花了几个小时的阅读和反复试验来弄清楚这一点。

于 2015-02-19T16:15:47.040 回答