0

次のアクション バーを指定して、他の SWT ウィジェット (ラベルなど) を追加できるようにしたいと考えています。実際の APIを考えると、IAction オブジェクトの追加しか許可されていないため、これがどのように可能かわかりません。

普通のものですが、私が話していることをより明確にするために画像をアップロードすることにしました

4

2 に答える 2

2

それは不可能です(そして、それは良いことだと思います。さもなければ、異なるソースからのプラグインを一貫して探すことができません)。

代替案:

  • アクションバーは、ビューがアクティブな場合にのみ表示されます。また、ビューコンテンツ領域が表示され、必要なウィジェットをいくつでも配置できます。したがって、検索ビューの一番上に現在の検索語が表示されるのと同じように、そのラベルを一番上に追加できます。
  • ビュー自体の名前(上のタブとして表示されているもの)を変更できます。ただし、これが頻繁に発生する場合は、タブバーのタブの再レイアウトが煩わしいため、お勧めしません。
  • そのラベルにある種の状態情報を表示したい場合は、チェックボックスまたはラジオボタン付きのドロップダウンボタンを使用してそれを行うことができます。たとえば、検索ビューの検索履歴や、コンソールビューのアクティブなコンソール選択ドロップダウンなどです。
于 2012-12-25T06:48:45.697 に答える
1

IActionBars通常の API を使用して、他のコントロールを に追加できます。以下は、これを達成する方法を示すコードです。新しい「プラグイン プロジェクト」ウィザードで作成された標準ビュー サンプルを変更しました。

...
public void createPartControl(Composite parent) {
    viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new ViewContentProvider());
    viewer.setLabelProvider(new ViewLabelProvider());
    viewer.setSorter(new NameSorter());
    viewer.setInput(getViewSite());
    makeActions();
    hookContextMenu();
    hookDoubleClickAction();
    contributeToActionBars();
}

private void hookContextMenu() {
    MenuManager menuMgr = new MenuManager("#PopupMenu");
    menuMgr.setRemoveAllWhenShown(true);
    menuMgr.addMenuListener(new IMenuListener() {
        public void menuAboutToShow(IMenuManager manager) {
            SampleView.this.fillContextMenu(manager);
        }
    });
    Menu menu = menuMgr.createContextMenu(viewer.getControl());
    viewer.getControl().setMenu(menu);
    getSite().registerContextMenu(menuMgr, viewer);
}

private void contributeToActionBars() {
    IActionBars bars = getViewSite().getActionBars();
    fillLocalPullDown(bars.getMenuManager());
    fillLocalToolBar(bars.getToolBarManager());
}

private void fillLocalPullDown(IMenuManager manager) {
    manager.add(action1);
    manager.add(new Separator());
    manager.add(action2);
}

private void fillContextMenu(IMenuManager manager) {
    manager.add(action1);
    manager.add(action2);
    // Other plug-ins can contribute there actions here
    manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}

private void fillLocalToolBar(IToolBarManager manager) {
    manager.add(action1);
    manager.add(action2);
    manager.add(new LabelContributionItem());
    manager.add(new ComboContributionItem());
}

private class LabelContributionItem extends ControlContribution {
    public LabelContributionItem() {
        super("someLabelId");
    }

    @Override
    protected Control createControl(Composite parent) {
        Label label = new Label(parent, SWT.NONE);
        label.setText("Hello");
        return label;
    }
}

private class ComboContributionItem extends ControlContribution {
    public ComboContributionItem() {
        super("someComboId");
    }

    @Override
    protected Control createControl(Composite parent) {
        Combo combo = new Combo(parent, SWT.NONE);
        return combo;
    }
}
...

お役に立てれば。

于 2012-12-29T17:39:57.937 に答える