Codenameone 代码名一:在多行上垂直对齐组件

Codenameone 代码名一:在多行上垂直对齐组件,codenameone,Codenameone,我有一个容器,其中包含一些未知数量的组件(实际上也是容器,我在其中重写了calcPreferredSize以使其大小一致)。由于组件的数量可能大于一行中可以容纳的数量,因此第2行可能会溢出,以此类推 我在外部容器上使用FlowLayout,它可以很好地用于一行。但第二行是偏移的 所以我想要的是: |.X.X.X.| |.X.X.X.| 我实际上得到: |.X.X.X.| |X.X.X.| 其中X是组件,点是间距,|是容器的侧面 最好的方法是什么?我假设FlowLayout这样做是因为第2行上第一

我有一个容器,其中包含一些未知数量的组件(实际上也是容器,我在其中重写了calcPreferredSize以使其大小一致)。由于组件的数量可能大于一行中可以容纳的数量,因此第2行可能会溢出,以此类推

我在外部容器上使用FlowLayout,它可以很好地用于一行。但第二行是偏移的

所以我想要的是:

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

我实际上得到:

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

其中X是组件,点是间距,|是容器的侧面

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


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

这里的问题是行扩展。如果您覆盖
calcPreferredSize
您实际上是在阻止跨距正常工作,因为我们需要在水平和垂直方向上为每个组件分配空间

问题是布局已确定,然后换行符可能需要更多空间(垂直),但布局已设置。唯一的解决方案是回流焊(或多次焊),我们并不“真正”支持它,因为它包含严重的性能开销


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

这里的问题是行扩展。如果您覆盖
calcPreferredSize
您实际上是在阻止跨距正常工作,因为我们需要在水平和垂直方向上为每个组件分配空间

问题是布局已确定,然后换行符可能需要更多空间(垂直),但布局已设置。唯一的解决方案是回流焊(或多次焊),我们并不“真正”支持它,因为它包含严重的性能开销


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

我通过在容器的左侧和顶部添加填充,然后更改组件边距,使边距位于右侧和底部,而不是顶部和左侧来解决此问题。这使我能够在容器上使用FlowLayout,这是一种更可取的方法,因为它不会改变容器中组件的首选大小

因此,当flow layout将构件放置在第2行时,容器填充会迫使构件远离“墙”


填充和边距就像一个拼图…但是通常有一种方法可以使用它来获得你想要的外观-我只是需要做一些思考来正确处理这个问题。

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

因此,当flow layout将构件放置在第2行时,容器填充会迫使构件远离“墙”


填充和边距就像一个拼图…但通常有一种方法可以使用它来获得您想要的外观-我只是需要做一些思考才能正确完成此操作。

谢谢。我最初尝试过表格布局,虽然那是几周前的事了,但我真的记不清有什么不能为我工作了——我认为这和网格问题一样,组件扩展到了我设置的首选大小之外。当我今天开始尝试这一点时,我已经找到了另一个解决方案,我添加了它作为答案,解决了这个问题。我确实需要保持组件大小的一致性,因为它是一个图形元素,可以显示在屏幕的多个位置。谢谢。我最初尝试过表格布局,虽然那是几周前的事了,但我真的记不清有什么不能为我工作了——我认为这和网格问题一样,组件扩展到了我设置的首选大小之外。当我今天开始尝试这一点时,我已经找到了另一个解决方案,我添加了它作为答案,解决了这个问题。我确实需要保持组件大小的一致性,因为它是一个图形元素,可以显示在屏幕的多个位置。