2016-11-14 24 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

更新以匹配內容提供者 –

相關問題