我正在尝试在我的表格中选择一些项目,但我不希望它们被揭示。
问题是调用方法(如下所示)会自动导致在showSelected()
内调用Table.class
,这不是我想要的。
tableViewer.getTable().setSelection(lastSelectedIndices);
我已尝试使用tableViewer设置选择,但由于某种原因它不起作用
例如:tableViewer.setSelection(new StructuredSelection (lastSelectedIndices), false);
这行代码不会导致任何选择。
无论如何,我可以选择表格行而不是让它们显露出来吗?
在我的系统中,每次网格刷新后我都需要调用setSelection
,这样用户就不会丢失他选择的项目。当用户向下滚动网格时出现问题 - >如果在该点发生刷新,则网格会跳回到所选项目所在的位置。当用户向下滚动一个表并突然滚动条跳到顶部时,它看起来很奇怪。
非常感谢任何帮助!
- 设置表格的代码 -
// 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));
}
}
});
}
答案 0 :(得分:1)
尝试使用Table.select(indexes)
来阻止泄露。
但是使用TableViewer.refresh()
实际应该保留选择。只是一个疯狂的猜测,但也许你在TableViewer上设置任何输入之前尝试TableViewer.setUseHashlookup(true)
。
你使用VIRTUAL表吗?如果是这样,请先试用它,不要使用VIRTUAL标志。
答案 1 :(得分:0)
这只是一个提示,但也许它适合你。
尝试使用setSelection()
方法,如下所示:
tableViewer.getTable().setSelection(lastSelectedIndices, false);
如果要使选择可见,则应将最后一个参数(布尔值)设置为true,否则设置为false。