2

"extensions" を介して作成された 2 つのビューを持つパースペクティブがあります。最初のビューにはテーブルがあり、2 番目のビューにはツリーがあります。アプリケーションが開いているときに最初のビューのみを表示し、ユーザーがテーブルからアイテムを選択したときに、このアイテム名を 2 番目のビューのテキスト フィールドに入力し、2 番目のビューが開いている間は最初のビューを非表示にします。また、ユーザーがボタンを押すと、2 番目のビューが非表示になり、最初のビューが表示されます。それは可能ですか?

アイテム名を 2 番目のビューに入れることはできましたが、ビューの表示と非表示を調整できません。

4

1 に答える 1

2

はい、ビューの表示と非表示を切り替えることができます。

1) 各ビューには一意の ID が必要です。この ID は、plugin.xml のビュー拡張の ID と一致する必要があります。

これは私の plugin.xml ビュー拡張の 1 つです。

  <view
        class="gov.bop.rabid.ui.views.PrefetchView"
        icon="icons/folder_user.png"
        id="gov.bop.rabid.ui.views.PrefetchView"
        name="Prefetch"
        restorable="true">
  </view>

の ID 定義は次のとおりPrefetchViewです。

public static final String ID = "gov.bop.rabid.ui.views.PrefetchView";

通常、ID はクラス名と同じにします。私にとっては混乱が少ないです。

2)Perspectiveクラス、createInitialLayoutメソッドでは、プレースホルダーを使用して IFolderLayout を定義する必要があります。繰り返しますが、これが私のコードです。

    IFolderLayout consoleFolder = layout.createFolder(CONSOLE_ID, 
            IPageLayout.BOTTOM, 0.75f, editorArea);
    consoleFolder.addPlaceholder(PrefetchedInmatesView.ID);
    consoleFolder.addPlaceholder(FoundInmatesView.ID);
    consoleFolder.addView(ProcessedInmatesView.ID);

    setClosable(layout, FoundInmatesView.ID, false);
    setClosable(layout, PrefetchedInmatesView.ID, false);
    setClosable(layout, ProcessedInmatesView.ID, false);

3) 他のビュー内から任意のビューにアクセスできる静的メソッドが必要です。この静的メソッドをActivatorクラスに配置しましたが、好きな場所に配置できます。

public static IViewPart getView(IWorkbenchWindow window, String viewId) {
    IViewReference[] refs = window.getActivePage().getViewReferences();
    for (IViewReference viewReference : refs) {
        if (viewReference.getId().equals(viewId)) {
            return viewReference.getView(true);
        }
    }
    return null;
}

4) 最後に、イベント コードからビューを表示および非表示にします。これが例です。

        final PhotoView view = (PhotoView) RabidPlugin.getView(window,
                PhotoView.ID);
        if (view == null)
            return;

                    *** Do stuff with the other view ***

        IWorkbenchPage page = window.getActivePage();
        page.hideView(page.findView(FoundInmatesView.ID));
于 2012-04-17T14:33:33.080 に答える