2015-08-09 2 views
0

У меня есть 2 CustomTables с одинаковыми именами столбцов. Они создаются с использованием ширины expandratio. Я добавил resizecolumnlisteners к ним, поэтому, когда пользовательский столбец в таблице1 изменит размер также table2 и наоборот. Проблема при изменении размера сvaadin изменить размер столбцов таблицы из другой таблицы

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

У меня слишком низкий уровень репутации stackoverflow, чтобы добавить комментарий - поэтому я пишу этот ответ.

Прежде всего: Какую версию Vaadin вы используете? Я не могу найти функцию, которую вы использовали:

table1.addresizeColumnListener(...) 

В Vaadin последняя документация addColumnResizeListener.

И у меня есть сомнения, почему вы хотите изменить размер всей колонки после уведомления о том, что один был изменен? Я предполагаю, что после каждого изменения размера столбца следует исправить таблицу .ColumnResizeEvent.

+0

это моя ошибка. Функция i use - addColumnResizeListener() – megabobik

0

Я думаю, что проблема, с которой вы сталкиваетесь, заключается в том, что при изменении размера в браузере он не будет сразу отправляться на сервер. Обновление сервера отправляется на сервер вместе со следующим запросом на обновление. Вот почему вы получаете отложенное обновление пользовательского интерфейса (если я правильно понял).

Для того, чтобы исправить это, вы можете попробовать код. Обратите внимание на setImmediate (true). Это в основном говорит Ваадину, что вы хотите, чтобы какое-либо обновление таблицы было отправлено на сервер немедленно, когда пользователь изменяет свойства таблицы.

Попробуйте это:

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