vaadin表垂直直到但不超出页面底部,根据需要滚动条

时间:2014-09-08 09:48:57

标签: layout scrollbar vaadin vaadin7

在我的vaadin 7应用程序中,我有一个包含Tabsheet的CSSLayout。 Tabsheet包含horizo​​ntalLayout。 Horizo​​ntalLayout包含一个表。

该表具有不同数量的列(3到20之间,根据请求进行更改)。 我希望这张桌子在水平和垂直方向占据所有可用空间。

然而,纵向表格不应超出屏幕范围。因此,如果行数多于可显示的行,则表应具有垂直滚动条。 (如果我在table.setPageLength()中设置行数就是这种情况,但是我希望在不设置显式rownumbers的情况下实现这一点,因为我希望表占用所有可用空间而不管screenize等...)< / p>

水平我还想要一个滚动条,如果有更多的列,那么我们有空间。

如果我将所有内容(csslayout,tabsheet,horizo​​ntallayout,table)保留为默认值,我会得到滚动条,但是我会占用大量空间。

如果我在tabheet,horizo​​ntallayout,table上使用setSizeFull(),那么我没有得到任何未使用的空间,但是我丢失了水平滚动条,我无法使用垂直滚动条到达表的末尾。

感谢任何帮助。

编辑 - 更新 - 编辑 - 更新 - 编辑 - 更新 - 编辑 - 更新

以下是示例代码。在我的屏幕上,无法向下滚动到表格的最后一行。 (同样不可能使用水平滚动条)

@Override
protected void init(@SuppressWarnings("unused") VaadinRequest request) {


     CssLayout css = new CssLayout();

        HorizontalLayout upper = new HorizontalLayout();
        OptionGroup first = new OptionGroup();
        first.addItem("AAA");
        first.addItem("BBB");
        first.addItem("CCC");
        first.addItem("DDD");
        first.addItem("EEE");
        first.addItem("Whatever");
        upper.addComponent(first);
        css.addComponent(upper);


        HorizontalLayout hl = new HorizontalLayout();
        hl.setMargin(true);
        hl.setSpacing(true);
        IndexedContainer c = new IndexedContainer();

        for (int i = 0; i < 40; i++)
            c.addContainerProperty("name" + i, String.class, "name" + i);

        Table table = new Table("Test table", c);

        for (int i = 0; i < 100; i++) {
            Integer id = (Integer) c.addItem();
            c.getItem(id).getItemProperty("name0").setValue(String.valueOf(i));
        }

        hl.addComponent(table);
        TabSheet tab = new TabSheet();
        tab.addTab(hl, "Table");
        css.addComponent(tab);

        hl.setSizeFull();
        table.setSizeFull();
        tab.setSizeFull();
        css.setSizeFull();

      setContent(css);

}

1 个答案:

答案 0 :(得分:2)

也许你没有在css布局上设置大小,或者样式有些麻烦。

最好在问题中发布一些代码,例如为什么我的代码会工作?。但是,我按照您的描述编写了一个简单的测试,并按预期工作。

修改

尝试使用VerticalLayout代替CssLayout

public class TestTableApp extends UI {

    @Override
    protected void init(VaadinRequest request) {
        VerticalLayout css = new VerticalLayout();

        HorizontalLayout upper = new HorizontalLayout();
        OptionGroup first = new OptionGroup();
        first.addItem("AAA");
        first.addItem("BBB");
        first.addItem("CCC");
        first.addItem("DDD");
        first.addItem("EEE");
        first.addItem("Whatever");
        upper.addComponent(first);
        css.addComponent(upper);


        HorizontalLayout hl = new HorizontalLayout();
        hl.setMargin(true);
        hl.setSpacing(true);
        IndexedContainer c = new IndexedContainer();

        for (int i = 0; i < 40; i++)
            c.addContainerProperty("name" + i, String.class, "name" + i);

        Table table = new Table("Test table", c);

        for (int i = 0; i < 100; i++) {
            Integer id = (Integer) c.addItem();
            c.getItem(id).getItemProperty("name0").setValue(String.valueOf(i));
        }

        hl.addComponent(table);
        TabSheet tab = new TabSheet();
        tab.addTab(hl, "Table");
        css.addComponent(tab);

        hl.setSizeFull();
        tab.setSizeFull();
        table.setSizeFull();
        css.setSizeFull();
        // this do the trick
        css.setExpandRatio(upper, 0);
        css.setExpandRatio(tab, 1);

        setContent(css);
    }
}