2016-11-14 26 views
0
Action add = new Action("Add Values") { 
     @Override 
     public void run() { 
      Bike bike = new Bike(); 
      bike.setName("BMW"); 
      tableViewer.refresh(); 
     } 
    }; 

我有一个表格查看器,并在列中显示自行车名称。如果我使用动作添加一个新元素,我将我的选择添加到最顶端的元素,而不是新添加的元素。我怎样才能做到这一点。如何指向使用tableviewer的动作新添加的元素?

我有我的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; 
     } 
    } 

回答

0

我实现了使用此代码添加到行动的要求。添加到表格后,新元素的setselection指向新添加的元素。

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

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

您必须将新对象添加到您的数据模型 - 这是数据的内容提供商的回报。您目前的内容提供者似乎只是从输入数组或列表中获取数据 - 在这种情况下,您将不得不更新数组/列表并再次调用setInput。注意:使用带有表格的树内容提供程序没有意义。

模型更新后,您可以调用表格查看器refresh方法,或者您的内容提供商可以使用add(Object)方法告诉观众有关新对象的信息。

+0

更新以匹配内容提供者 –

相关问题