Vaadin 7新手求助:如何在子窗口的Table中添加滚动条?
嘿,作为Vaadin新手碰到这个问题太正常了,我来帮你快速搞定Table滚动条的设置~
首先看你已经写的代码,其实你已经做了关键的一步:给Table设置了固定的高度和宽度(setHeight(400, Unit.PIXELS)和setWidth(240, Unit.PIXELS))。在Vaadin的Table组件里,只要内容超出你设置的固定尺寸,滚动条会自动出现。如果没出现,大概率是下面几个小问题,逐一排查就能解决:
1. 检查Table的父容器布局设置
你的Table放在子窗口里,要确保子窗口的内容布局没有强制拉伸Table,导致它的固定尺寸失效。比如如果子窗口用的是VerticalLayout,别给布局设置setSizeFull(),不然布局会强制让Table填满整个窗口,可能掩盖了滚动条的触发条件。
正确的子窗口布局设置可以参考:
// 假设你的子窗口是这样创建的 Window subWindow = new Window("你的子窗口标题"); VerticalLayout contentLayout = new VerticalLayout(); contentLayout.setSizeUndefined(); // 让布局自适应内容,保留Table的固定尺寸 contentLayout.addComponent(fileFormatTable); subWindow.setContent(contentLayout); // 别忘了把子窗口加到主UI里 getUI().addWindow(subWindow);
2. 确认数据源有足够多的内容
滚动条只会在内容超出Table固定尺寸时才显示,如果fileFormatListContainer里只有寥寥几行数据,高度没超过400px,那自然不会出现垂直滚动条。可以先往数据源里多塞几条测试数据,看看滚动条会不会出现。
3. 强制启用滚动条(极端情况)
如果上面两步都没问题但滚动条还是不出现,你可以通过自定义CSS强制开启。先给Table加个样式名:
fileFormatTable.addStyleName("force-scroll-table");
然后在你的Vaadin主题CSS文件里添加这段样式:
.force-scroll-table .v-table-body { overflow: auto !important; } .force-scroll-table .v-table-header-wrap { overflow: auto !important; }
这样不管内容多少,滚动条都会显示(内容不够时是灰色不可用状态),不过一般不推荐用这个,自动触发的滚动条体验更好。
补充说明
从你的代码写法来看,应该用的是Vaadin 7/8版本,这些版本的Table组件默认就支持内容超出时自动显示滚动条,所以重点还是放在父布局和内容数量的排查上~
内容的提问来源于stack exchange,提问作者masiboo

