TableViewer.getElementAt()返回一个已过滤的元素

问题描述 投票:0回答:2

我正在尝试自动选择过滤表中的第一项。

我基本上做了以下事情:

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立即尊重过滤?

java swt jface
2个回答
1
投票

根据我的经验,选择第一个(可见)元素的最可靠方法是 - 仅限一次 - 绕过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
投票

好吧,我发现了什么是错的,这是我自己的错。我设置的过滤器是可变的,所以它可以或多或少严格过滤。问题是我在设置选择后激活了更严格的过滤。

无论如何,谢谢大家的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.