Как скрыть / удалить столбец в таблице SWT - PullRequest
15 голосов
/ 29 июня 2011

Какой подход использовать, чтобы иметь возможность скрывать / удалять столбцы в таблице в SWT (в частности, в плагине Eclipse)?

  1. A не может передать эту функцию в строки, так как мне нужно вставить искрыть (или удалить) как строки, так и столбцы.
  2. Я пытался удалить их с помощью TableColumn.dispose (), но в соответствии с ColumnWeightData в макете не был удален, и не удалялся сброс всего макета таблицы с помощью нового TableLayout.информация о столбцах из макета.
  3. Я попытался создать все необходимые столбцы и скрыть с помощью setWidth (0) те, которые должны быть скрыты / удалены.Пример кода, который я написал, здесь .Этот подход не хорош: 3.1.Это не масштабируется.В моем случае максимальное количество столбцов может составлять несколько тысяч, и лишь немногие действительно нужны пользователю.3.2.Работа с изменением размера - действительно ад.AFAIU, даже после setResizable (false) столбец может быть изменен, если размер родительского компонента изменен.Чтобы справиться с этим, мне нужно написать огромные слушатели для родительского компонента.Я еще не пробовал.

Так что мне следует

  1. Дальнейшее изучение удаления столбцов таблицы и использовать его?
  2. Стек с setWidth (0) дляКакое-то время, поскольку я еще не сталкивался с проблемами масштабирования?
  3. Посмотрите в сторону некоторых сторонних компонентов таблиц (Nattable ...)?- Если да, желательно с открытым исходным кодом, так как мой Eclipse-плагин с открытым исходным кодом.

Ответы [ 2 ]

21 голосов
/ 29 июня 2011

Мы делаем это на многих наших столах здесь.

Сначала мы убедимся, что пользователь не видит, что мы делаем.

table.setRedraw( false );

Затем мы удаляем все столбцы.

while ( table.getColumnCount() > 0 ) {
    table.getColumns()[ 0 ].dispose();
}

А потом мы добавляем нужные.

ArrayList<Column> columns = getShownColumns();

for ( Column column : columns ) {
    TableColumn tableColumn = new TableColumn( table, column.getStyle() );
    tableColumn.setText( column.getTitle() );
    tableColumn.setWidth( column.getWidth() );
}

И, наконец, мы позволяем пользователю увидеть, что мы сделали.

table.setRedraw( true );
3 голосов
/ 29 июня 2011

Я воссоздаю столбцы таблицы каждый раз только с видимыми столбцами.Если вы используете бит стиля SWT.VIRTUAL, это будет достаточно быстро.Установите table.setRedraw(false), удалите данные из таблицы, удалите все столбцы таблицы, заново создайте необходимые и снова установите данные.Затем установите table.setRedraw(true).Это сводит к минимуму мерцание.

Я все это сделал, все работало нормально, утилизация TableColumns сработала, как и ожидалось.

Использование SWT.VIRTUAL не для слабонервных.Это подразумевает другую обработку вашей таблицы.Сначала вы можете попробовать без этого посмотреть, достаточно ли это быстро.

Мне очень странно иметь таблицу с тысячами столбцов и показывать только несколько из них пользователю.С нативными реализациями Table я ожидаю проблем с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...