TableViewer.getElementAt (), возвращающий фильтрованный элемент - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь автоматически выбрать первый элемент в отфильтрованной таблице.

По сути, я делаю следующее:

table = new TableViewer(...);
table.addFilter(filter);
table.setContentProvider(contentProvider);
table.setInput(input);
first = table.getElementAt(0);
table.setSelection(new StructuredSelection(first));

Удивительно, что (в зависимости отфильтр) Я могу получить элемент, который отфильтрован из getElementAt(0).В результате ни один элемент не будет выбран.

Я пытался вызвать table.refresh(), прежде чем получить элемент с такими же результатами.

Если я позвоню getElementAt(0) на более позднем этапеЯ действительно получаю правильный первый элемент (который не отфильтрован).

Как я могу заставить getElementAt немедленно соблюдать фильтрацию?

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

По моему опыту, самый надежный способ выбрать первый (видимый) элемент - это только один раз - обойти JFace, опираться на его внутреннюю модель данных и использовать SWT API для выбора первого TableItem следующим образом:

static Object selectFirstElement(TableViewer tableViewer) {
  Object firstElement = null;
  Table table = tableViewer.getTable();
  if (table.getItemCount() > 0) {
    firstElement = table.getItem(0).getData();
    tableViewer.setSelection(new StructuredSelection(firstElement), true); // true == reveal
  }
  return firstElement;
}

Я успешно использую этот код в течение нескольких лет с отсортированными, отфильтрованными и виртуальными таблицами.

0 голосов
/ 06 мая 2019

Ну, я нашел, что было не так, и это была моя вина.Фильтр, который я установил, является изменяемым, поэтому он может фильтровать более или менее строго.Проблема заключалась в том, что я активировал более строгую фильтрацию после . Я установил выбор.

В любом случае, спасибо всем за помощь.

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