TableViewer.getElementAt() 返回过滤后的元素
TableViewer.getElementAt() returning a filtered element
我正在尝试自动 select 已过滤 table 中的第一项。
我基本上是在做以下事情:
table = new TableViewer(...);
table.addFilter(filter);
table.setContentProvider(contentProvider);
table.setInput(input);
first = table.getElementAt(0);
table.setSelection(new StructuredSelection(first));
令人惊讶的是(取决于过滤器)我可以获得从 getElementAt(0)
中过滤掉的元素。结果是,最终不会 select 编辑任何项目。
我试过在获取具有相同结果的元素之前调用 table.refresh()
。
如果我稍后调用 getElementAt(0)
,我确实得到了正确的第一个元素(没有被过滤掉)。
如何让 getElementAt
立即遵守过滤?
根据我的经验,select 第一个(可见)元素最可靠的方法是 - 仅此一次 - 绕过 JFace,依赖其内部数据模型,并使用 SWT API select 第一个 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;
}
几年来,我一直在使用此代码成功地处理排序表、筛选表和虚拟表。
好吧,我发现了问题所在,这是我自己的错。我设置的过滤器是可变的,所以它可以或多或少地严格过滤。问题是我在设置选择后激活了更严格的过滤。
谢谢大家的帮助。
我正在尝试自动 select 已过滤 table 中的第一项。
我基本上是在做以下事情:
table = new TableViewer(...);
table.addFilter(filter);
table.setContentProvider(contentProvider);
table.setInput(input);
first = table.getElementAt(0);
table.setSelection(new StructuredSelection(first));
令人惊讶的是(取决于过滤器)我可以获得从 getElementAt(0)
中过滤掉的元素。结果是,最终不会 select 编辑任何项目。
我试过在获取具有相同结果的元素之前调用 table.refresh()
。
如果我稍后调用 getElementAt(0)
,我确实得到了正确的第一个元素(没有被过滤掉)。
如何让 getElementAt
立即遵守过滤?
根据我的经验,select 第一个(可见)元素最可靠的方法是 - 仅此一次 - 绕过 JFace,依赖其内部数据模型,并使用 SWT API select 第一个 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;
}
几年来,我一直在使用此代码成功地处理排序表、筛选表和虚拟表。
好吧,我发现了问题所在,这是我自己的错。我设置的过滤器是可变的,所以它可以或多或少地严格过滤。问题是我在设置选择后激活了更严格的过滤。
谢谢大家的帮助。