所以我有一个VerticalLayout的对象。
在没有设置高度的情况下-内部组件看起来不错:每个标签占用的空间尽可能少,并停留在顶部:

java - 如何设置vaadin布局的宽度,并且仍使内部组件占用所需的空间?-LMLPHP

但是,如果我使用filesLayout.setHeight("400px");将布局的高度设置为400px-我的3个标签中的每一个都开始占用33%的空间:

java - 如何设置vaadin布局的宽度,并且仍使内部组件占用所需的空间?-LMLPHP

我只希望标签仅占用所需的空间,而我的VerticalLayout只能设置为该长度。请帮我。

最佳答案

VerticalLayout在所有组件之间平均分配高度。
因此,使用3个组件,您将获得3行,每行占整个VerticalLayout高度的33%。

您可以使用.setExpandRatio(...)操作扩展比例

要使所有Labels放在顶部,您只需要在Label上添加一个“空” VerticalLayout als最后一个元素,并告诉VerticalLayout在最后一行使用所有“溢出”高度。

Label empty= new Label();
vl.addComponent(empty);
vl.setExpandRatio(empty, 1);


将其设置为1意味着它将占用溢出高度的1部分。

还有一个快捷方法可以在一个调用中完成这两个操作:

vl.addComponentsAndExpand(empty);


这是您的问题的答案,但是您可能会遇到以下问题:

当VerticalLayout的内容高于可用高度时,我们该怎么办?
但这是另一个问题,如果您希望有滚动条,也许面板是更好的容器。

10-04 19:32