在我的vaadin 7应用程序中,我有一个包含Tabsheet的CSSLayout。 Tabsheet包含horizontalLayout。 HorizontalLayout包含一个表。
该表具有不同数量的列(3到20之间,根据请求进行更改)。 我希望这张桌子在水平和垂直方向占据所有可用空间。
然而,纵向表格不应超出屏幕范围。因此,如果行数多于可显示的行,则表应具有垂直滚动条。 (如果我在table.setPageLength()中设置行数就是这种情况,但是我希望在不设置显式rownumbers的情况下实现这一点,因为我希望表占用所有可用空间而不管screenize等...)< / p>
水平我还想要一个滚动条,如果有更多的列,那么我们有空间。
如果我将所有内容(csslayout,tabsheet,horizontallayout,table)保留为默认值,我会得到滚动条,但是我会占用大量空间。
如果我在tabheet,horizontallayout,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);
}
答案 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);
}
}