vaadin从另一个表调整列表

时间:2015-08-09 13:24:29

标签: vaadin

我有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设置的。

2 个答案:

答案 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());          
        }
    });