Я пытаюсь выбрать некоторые элементы в своей таблице, но я НЕ хочу, чтобы они были показаны. Проблема заключается в том, что вызов метода (см. Ниже) автоматически приводит к тому, что showSelected()
вызывается внутри Table.class
, и это не то, что я хочу.Как установить выбор в таблице swt с помощью setSelection и установить значение false?
tableViewer.getTable().setSelection(lastSelectedIndices);
Я попытался установить выделение с помощью TableViewer, но по какой-то причине он не работает Ex: tableViewer.setSelection(new StructuredSelection (lastSelectedIndices), false);
эта строка кода не вызывает ничего выбирать.
Есть ли в любом случае возможность выбора строк таблицы и НЕ вызывать их обнаружение? В моей системе мне нужно позвонить setSelection
каждый раз после обновления сетки, чтобы пользователь не потерял свой выбранный элемент. Проблема возникает, когда пользователь прокручивает сетку -> если в этот момент происходит обновление, сетка возвращается обратно туда, где находятся выбранные элементы. Это выглядит странно, когда пользователь прокручивается вниз по столу, и вдруг полоса прокрутки поднимается вверх.
Любая помощь очень ценится!
--code для создания таблицы -
// add table viewer
tableViewer = new TableViewer(this, SWT.MULTI | SWT.FULL_SELECTION | SWT.VIRTUAL);
tableViewer.setUseHashlookup(true);
tableViewer.addFilter(new GridPanelViewerFilter());
tableViewer.setComparator(new GridPanelViewerComparator());
tableViewer.setComparer(new GridPanelElementComparer());
table = tableViewer.getTable();
GridData tableGd = new GridData(SWT.FILL, SWT.FILL, true, true);
table.setLayoutData(tableGd);
table.setHeaderVisible(true);
table.setLinesVisible(true);
// set table font
setTableFont();
// listen to paint events for anti aliasing
table.addPaintListener(...etcetc
--- код для обновления таблицы -
protected void refreshGrid() {
if(!updateGrid) return;
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
try {
// check if disposed
if (isDisposed()) {
log.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, getClass().getName() + ": " + "Grid already disposed"));
return;
}
// refresh table
table.setRedraw(false);
try {
// get last selected indices from mouse down event
tableViewer.refresh(true, false);
if(lastSelectedIndices != null){
tableViewer.getTable().deselectAll();
tableViewer.getTable().select(lastSelectedIndices);
}
} catch (Exception e) {
log.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
getClass().getName() + ": " + "Error at refresh table", e));
}
table.setRedraw(true);
// process post grid refresh
postGridRefresh();
} catch (Exception e) {
log.log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, getClass().getName() + ": " + "Error during refresh grid", e));
}
}
});
}
Я использовал TableViewer.refresh() и TableViewer.setUseHashlookup (true), но выбор не сохранился. Я пробовал предложенную вами строку Table.select (индексы), но все равно приводит к прокрутке таблицы к выбранному индексы. Интересно, что этот метод не вызывает showSelection() внутри Table.class (в отличие от setSelection). Как вы думаете, какой-то другой класс/код вызывает выбор? – codegurl