現在、2つのビューを持つEclipseプラグインを開発中です。私の最初のビューでは、TableViewer
(名前と接続状態)に表示されている接続のリストがあります.2番目のビューでは、データベース(接続)にテーブルをロードします。このロードは、接続上のメニュー項目をクリックすることによって行われます(「詳細の表示」)。これらのテーブルは子供を持つこともできるので、TreeViewer
に表示されます。私は、このようにそれを行うことを試みた:Eclipseプラグインの別のビューに基づくビューのレンダリング
マイViewクラス:
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クラス:私のContentProviderクラスで
public void run(){
selectedConnection = Activator.getDefault().getConnectionsView().getSelectedConnection();
Activator.getDefault().getDbTreeView().setInput(selectedConnection);
}
:
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
私は考えましたが、最初のビューのものが呼び出され、2番目のビューのものは呼び出されません。起動時に/ビューを最初に開くときに両方にブレークポイントを設定します – AndaP
@Azshara - ビューが既に作成されている場合、createPartControlは呼び出されません。たとえば、ビューをあるパースペクティブで開き、別のパースペクティブに切り替えてそこに開いた場合、このメソッドはもう一度呼び出されません。 – Sandman