2

フォームを使用して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(); が、これは役に立たないようです。次に何を試すべきかについてのアイデアはありますか?

4

2 に答える 2

0

form.layout(true)直接行います。

また

あなたも試すことができますform.reflow()

編集:

このトピックについてさらに読むには、ここを参照してください。「イベントのリッスン」セクションをお読みください。

于 2012-12-12T23:19:01.490 に答える
0

次のように呼び出すことで、サイズを変更せずにフォームを再描画することができました。

compParent.layout();

だから私はlayoutコマンドで正しい方向に進んでいました。それをトップレベルで呼び出す必要がありました。親Compositeの子であるフォームではなく、親Compositeです。助けてくれてありがとう@GGeorge。

于 2012-12-13T22:10:58.507 に答える