0

環境

私はEclipse 3.4以上のプラグインを構築しています。mrp.viewmenuContribution が に設定されたid のビューがありますtoolbar:mrp.view。この menuContribution にはいくつかのコマンドがあり、私はこれを持っています:

<handler
    class="mrp.handlers.export"
    commandId="mrp.commands.export">
</handler>

<command
    commandId="mrp.commands.export"
    label="My command"
    style="push">
</command>

私のハンドラにmrp.handlers.exportは、次のような動的な ìsEnabled()` メソッドがあります。

@Override
public boolean isEnabled() {
    return !getMySelection().isEmpty();
}

質問

データが変更されたときにツールバーのボタンを更新するにはどうすればよいですか? (ツールバーの別のボタンをクリックすると自動的に更新されますが、そうしないと...)

私は試した..

ICommandService service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class);
service.refreshElements("mrp.commands.export", null);

しかし、それは何もしないようです。

これも:

public class Export extends AbstractHandler implements PropertyChangeListener {

@Override
public void propertyChange(PropertyChangeEvent evt) {
    setBaseEnabled(!getSelection().isEmpty());
}

    // ....
}

呼び出されますが、ビューのメニューのアイコンが更新されません (Eclipse 3.7)。私は何か間違ったことをしましたか?

4

2 に答える 2

1

ハンドラーは、有効化が変更されたときにイベントを発生させる必要があります。org.eclipse.core.commands.AbstractHandler.setBaseEnabled(boolean)を使用してハンドラーを更新すると、必要なイベントが発生します。

于 2013-06-18T12:57:30.910 に答える