我有2个具有相同列名的CustomTable。它们使用expandratio宽度创建。 我向它们添加了resizecolumnlisteners,所以当table1中的用户列也调整table2时,反之亦然。问题是用
调整大小List<Values> list;// list of objects in table;
table1.addresizeColumnListener(new resizeColumnListener(){
private void resizeColumn(Event)
{
for(int i=0; i<list.size(); i++)
{
table2.setColumnWidth(list.get(i), table1.getColumnWidth(list.get(i)));
}
}
表中的只更改了侦听器被触发的列,所有其他列都没有更改,只有当我再次单击任何列时,table2中的所有列的宽度都是从table1设置的。
答案 0 :(得分:0)
我的stackoverflow信誉级别太低,无法添加评论 - 所以我写了这个答案。
首先:你使用哪个版本的Vaadin?我无法找到您使用的功能:
table1.addresizeColumnListener(...)
在Vaadin最新文档是addColumnResizeListener。
我怀疑为什么在通知一个列已更改后,您想要更改所有列的大小?我想在每个列大小更改后,应该发出 Table.ColumnResizeEvent 。
答案 1 :(得分:0)
我认为您面临的问题是,当您在浏览器中重新调整某些内容时,它不会立即发送到服务器。对服务器的更新将与下一个更新请求一起发送到服务器。这就是为什么你得到了UI的延迟更新(如果我理解正确的话)。
要解决此问题,您可以尝试以下代码。请注意 setImmediate(true)。这基本上告诉Vaadin,当用户修改表属性时,您希望立即将对表的任何更新发送到服务器。
试试这个:
table1.setImmediate(true);
table1.addColumnResizeListener(new ColumnResizeListener(){
@Override
public void columnResize(ColumnResizeEvent event) {
table2.setColumnWidth(event.getPropertyId(), event.getCurrentWidth());
}
});
table2.setImmediate(true);
table2.addColumnResizeListener(new ColumnResizeListener(){
@Override
public void columnResize(ColumnResizeEvent event) {
table1.setColumnWidth(event.getPropertyId(), event.getCurrentWidth());
}
});