如何使用对表格查看器的操作指向新添加的元素?

How to point to newly added element using an action to a tableviewer?

Action add = new Action("Add Values") {
        @Override
        public void run() {
            Bike bike = new Bike();
             bike.setName("BMW");
            tableViewer.refresh();
        }
    };

我有一个 table 查看器并在列中显示自行车名称。如果我使用操作添加新元素,我会将我的选择添加到最顶部的元素而不是新添加的元素。我怎样才能做到这一点。

我的 setinput 中有一个列表调用 treeviewercontentprovider

private static class TreeContentProvider implements ITreeContentProvider {
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
      }

    public void dispose() {
    }


    public Object[] getElements(Object inputElement) {
        return getChildren(inputElement);
    }

    public Object[] getChildren(Object parentElement) {

        if (parentElement instanceof Object[]) {
            return (Object[]) parentElement;
        }

        if (parentElement instanceof Collection) {
            return ((Collection) parentElement).toArray();
            }

        return new Object[0];
      }


    public Object getParent(Object element) {
            return null;
     }

    public boolean hasChildren(Object element) {
          return false;
      }
    }

您必须将新对象添加到您的数据模型中 - 即您的内容提供商 returns 的数据。您当前的内容提供者似乎只是从输入数组或列表中获取数据 - 在这种情况下,您将不得不更新 array/list 并再次调用 setInput。注意:使用具有 table.

的树内容提供程序没有意义

更新模型后,您可以调用 table 查看器 refresh 方法,或者您的内容提供商可以使用 add(Object) 方法将新对象告知查看器。

我使用添加到操作中的代码实现了要求。 setselection to the new element 指向添加到table后新添加的元素。

Action add = new Action("Add Values") {
    @Override
    public void run() {
        Bike bike = new Bike();
         bike.setName("BMW");
        tableViewer.refresh();

        tableViewer.setSelection(new StructuredSelection(bike));
    }
};