フォームを使用してEclipseRCPアプリケーションを作成する方法を学び、そのために必要なものの簡単なプロトタイプを作成しています。Windowsx64プラットフォームで64ビットのEclipse3.7とJava1.7を使用しています。
私がやろうとしていることはかなり標準的です。アプリの左側のビューにはツリー(ViewTree
)が含まれ、右側のビュー(ViewDetail
)は日食フォームを使用してツリーの選択に関する詳細情報を表示します。私ViewTree
は選択プロバイダーになるようにViewDetail
設定し、リッスンするように設定されていViewTree
ます。ViewDetail
新しいツリーを選択するたびに更新したいと思います。
関連するコードは次のViewTree
とおりです。
public class ViewTree extends ViewPart
{
private TreeViewer treeViewer;
public ViewTree() {
super();
}
@Override
public void createPartControl(Composite parent) {
treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
getSite().setSelectionProvider(treeViewer);
treeViewer.setLabelProvider(new TreeObjLabelProvider());
treeViewer.setContentProvider(new TreeObjContentProvider());
}
関連するコードは次のViewDetail
とおりです。
public class ViewDetail extends ViewPart implements ISelectionListener
{
private FormToolkit toolkit;
private ScrolledForm form;
private Composite compParent;
public ViewDetail() {}
@Override
public void createPartControl(Composite parent) {
toolkit = new FormToolkit(parent.getDisplay());
form = toolkit.createScrolledForm(parent);
compParent = parent;
// register as a selection listener with the workbench
getSite().getPage().addSelectionListener(ViewTree.ID, (ISelectionListener) this);
}
フォームViewDetail
を消去し、新しい選択ごとに新しい情報で再描画するため、selectionChanged(IWorkbenchPart part, ISelection selection)
ViewDetailの関数で
form.dispose();
、フォームを消去してから、次のコマンドを使用してフォームを再作成します。
form = toolkit.createScrolledForm(compParent);
次に、選択されたオブジェクトのタイプを判別してビルドします。それに応じてフォーム。
問題は、ツリーでオブジェクトを選択すると、フォームが破棄されてViewDetail
空白になることです。ウィンドウのサイズが変更されるまで、ビューには何も表示されません。フォームが作成されたら、次のように呼び出してフォームを更新しようとします
form.getBody().layout();
が、これは役に立たないようです。次に何を試すべきかについてのアイデアはありますか?