Codename One 在多行上垂直对齐组件

Codename One Aligning components vertically over multiple rows

我有一个容器,其中包含一些未知数量的组件(这些组件实际上也是我覆盖了 calcPreferredSize 以使其大小一致的容器)。由于组件的数量可能 > 单行可以容纳的数量,因此可能会溢出到第 2 行等

我在外部容器上使用 FlowLayout,这对一行来说效果很好。但是第二行偏移了。

所以我想要的地方:

|.X.X.X.|
|.X.X.X.|

我实际上得到:

|.X.X.X.|
|X.X.X..|

其中 X 是分量,点是间距,|是容器的侧面。

最好的方法是什么?我假设 FlowLayout 这样做是因为第 2 行第一个元素的左边距实际上应用于顶行,因此没有剩余边距将其推离容器边框。

我试过 GridLayout,但我发现每行最右边的 X 组件超出了我设置的首选大小。

跨行是这里的问题。如果您覆盖 calcPreferredSize,您实际上会阻止跨度正常工作,因为我们需要为每个组件水平和垂直分配 space。

问题是布局已确定,换行符可能需要更多 space(垂直),但布局已经设置。唯一的解决方案是回流(或多次通过),我们 "really" 不支持它,因为它包含严重的性能开销。

网格布局会将所有内容设置为相同大小。 table 布局可能是更好的选择。我建议不要覆盖 calcPreferredSize() 而只是使用 50% 作为 table 列的宽度。

我解决了这个问题,方法是在容器的左侧和顶部放置填充,然后更改组件边距,使边距位于右侧和底部,而不是顶部和左侧。这允许我在容器上使用 FlowLayout,这是更可取的,因为它不会改变其中组件的首选大小。

因此,当流式布局将组件放在第 2 行时,容器填充会迫使组件远离 "wall"。

填充和边距就像一个谜题...但通常有一种方法可以使用它来获得您想要的外观 - 我只是需要做一些思考才能做到这一点。