Java 返回已筛选元素的TableViewer.getElementAt()
我正在尝试自动选择筛选表中的第一项 我基本上在做以下工作:Java 返回已筛选元素的TableViewer.getElementAt(),java,swt,jface,Java,Swt,Jface,我正在尝试自动选择筛选表中的第一项 我基本上在做以下工作: table = new TableViewer(...); table.addFilter(filter); table.setContentProvider(contentProvider); table.setInput(input); first = table.getElementAt(0); table.setSelection(new StructuredSelection(first)); 令人惊讶的是(取决于过滤器),
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
立即尊重过滤?根据我的经验,选择第一个(可见)元素的最可靠方法是——仅此一次——绕过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;
}
几年来,我一直在成功地将此代码用于排序、筛选和虚拟表。嗯,我发现了问题所在,这是我自己的错。我设置的过滤器是可变的,因此它可以或多或少地严格过滤。问题是我在设置选择后激活了更严格的过滤
无论如何,感谢大家的帮助。看看标题“过滤数据2.2”下的内容@Joel并没有真正的帮助。正如我所说,我尝试调用refresh(),但仍然得到了筛选项。检查。应用相同的逻辑。尝试使用table.getInput()。get(0)如果您觉得有答案解决了问题,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的老帖子上。