覆盖void org.eclipse.jface.viewers.StructuredViewer.setInput(Object input)

时间:2014-10-20 21:08:08

标签: java eclipse-plugin

我有一个扩展org.eclipse.jface.dialogs.Dialog

的类

我正在使用org.eclipse.jface.viewers.TableViewer类。

private TableViewer tableViewer = new TableViewer(newCntr, SWT.SINGLE|SWT.FULL_SELECTION|SWT.BORDER);

tableViewer.setInput(setOfObjects);

我将允许用户从UI中删除。我想用一个属性标记该对象而不是在TableViewer上列出它,而不是从集合中删除。但是,TableViewer将列出集合中的所有内容。我应该重写这个方法吗?我在下面提供了......谢谢!

public final void setInput(Object input) {
    Control control = getControl();
    if (control == null || control.isDisposed()) {
        throw new IllegalStateException(
                "Need an underlying widget to be able to set the input." + //$NON-NLS-1$
                        "(Has the widget been disposed?)"); //$NON-NLS-1$
    }
    try {
        //      fInChange= true;

        unmapAllElements();

        super.setInput(input);

    } finally {
        //      fInChange= false;
    }
}

1 个答案:

答案 0 :(得分:2)

请勿尝试覆盖setInput

而是使用TableViewer.addFilter向表格添加过滤器。

过滤器是从ViewerFilter派生的类,它可以选择显示表的哪些元素。这是一个抽象类,您提供了一个实现:

public boolean select(Viewer viewer, Object parentElement, Object element)

对于表格parentElement未使用(过滤器也可以与TreeViewer一起使用)。

如果更改过滤条件以使表查看器更新,请使用TableViewer.refresh()