Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 返回已筛选元素的TableViewer.getElementAt()_Java_Swt_Jface - Fatal编程技术网

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)如果您觉得有答案解决了问题,请单击绿色复选标记将其标记为“已接受”。这有助于将注意力集中在仍然没有答案的老帖子上。