我正在開發一個當前有2個視圖的Eclipse插件。在我的第一個視圖中,我有一個在TableViewer
(名稱和連接狀態)中顯示的連接列表。在我的第二個視圖中,我想要將表加載到數據庫(連接)中。通過單擊連接上的菜單項(「查看詳細信息」)來完成此加載。這些表格將顯示在TreeViewer
中,因爲他們也可以有孩子。我試圖做這種方式:基於Eclipse插件中另一個視圖呈現視圖
我的視圖類:
public class DBTreeView extends ViewPart {
private TreeViewer treeViewer;
private Connection root = null;
public DBTreeView() {
Activator.getDefault().setDbTreeView(this);
}
public void createPartControl(Composite parent) {
treeViewer = new TreeViewer(parent);
treeViewer.setContentProvider(new DBTreeContentProvider());
treeViewer.setLabelProvider(new DBTreeLabelProvider());
}
public void setInput(Connection conn){
root = conn;
treeViewer.setInput(root);
treeViewer.refresh();
}
}
我做了一個setInput
方法是從連接與菜單項註冊的操作稱爲查看與爲當前選擇的連接參數:
MViewContentsAction類:
public void run(){
selectedConnection = Activator.getDefault().getConnectionsView().getSelectedConnection();
Activator.getDefault().getDbTreeView().setInput(selectedConnection);
}
在我ContentProvider類:
public Object[] getChildren(Object arg0) {
if (arg0 instanceof Connection){
return ((Connection) arg0).getTables().toArray();
}
return EMPTY_ARRAY;
}
其中EMPTY_ARRAY是...空數組
我面臨的問題是,當在調試模式下,不以某種方式執行這段代碼:
Activator.getDefault().getDbTreeView().setInput(selectedConnection);
而且還單擊菜單項時樹視圖中沒有任何反應。有任何想法嗎? 謝謝
是的,似乎是正確的方式來做我的情況。但是現在我一直在調試,看起來TreeView上的createPartControl在打開它時根本不會被調用!我似乎無法想象爲什麼會發生這種情況......只要我弄清楚發生了什麼,我會嘗試你的建議。 – AndaP 2011-05-24 11:46:57
是的,我想,但是第一個視圖被調用,而第二個視圖不被調用。我在啓動/第一次打開視圖時在它們中都放置了斷點 – AndaP 2011-05-24 12:42:02
@Azshara - 如果已經創建了視圖,則不會調用createPartControl。因此,例如,如果您從一個角度打開視圖,然後切換到另一個視圖並在那裏打開視圖,則該方法不會再被調用。 – Sandman 2011-05-24 12:50:35