如果将其他布局组件设置为展开,则会隐藏Vaadin标签

时间:2015-05-07 16:54:39

标签: vaadin

如果我使用以下代码使用Vaadin创建UI,

@Override
protected void init(VaadinRequest request) {
    HorizontalLayout horizontalLayout = new HorizontalLayout();

    horizontalLayout.addComponent(new Label("Why am I not shown?"));
    Button button = new Button("expanding button");
    horizontalLayout.addComponent(button);
    horizontalLayout.setExpandRatio(button, 1);

    horizontalLayout.setWidth(100, Unit.PERCENTAGE);
    setContent(horizontalLayout);
}

我添加到horizontalLayout的标签未显示在创建的用户界面中。这是为什么?在这种情况下,我期望发生的是标签采取所需的宽度,按钮采取宽度的其余部分。但标签根本没有显示。

请不要问我为什么要扩展按钮。这只是一个MCVE,我的真实用户界面有点复杂。

1 个答案:

答案 0 :(得分:7)

默认情况下,100%的大小未定义。因此Label大小Button(默认情况下)的空间将由扩展比率0和Label单元格的多余空间共享,扩展比率为1所以所有空间都被赋予按钮的多余空间。

label.setSizeUndefined()设置为具有 HorizontalLayout horizontalLayout = new HorizontalLayout(); Label l1 = new Label("one"); Label l2 = new Label("two"); Label l3 = new Label("three"); horizontalLayout.addComponent(l1); horizontalLayout.addComponent(l2); horizontalLayout.addComponent(l3); horizontalLayout.setExpandRatio(l2, 1); 的未定义大小,并且可以按预期工作。

请注意,使用扩展比率时,相对大小的组件可能会丢失所有空间。

例如:

class LesleyGrade < ActiveRecord::Base
  scope :my_scope, select('STC_TERM_GPA, max(TERM), max(last), max(first)').group('STC_TERM_GPA').order('max(first), max(term) ASC')

end

仅显示标签“two”。