0

私のエディターでは、エディター内のテキストウィジェットに変更を加えるたびにエディターをダーティに設定する以下の機能があります。

private void setDirty(boolean b){
        isDirty = b;
        firePropertyChange(IEditorPart.PROP_DIRTY);
    }

問題は、setDirty(…) が呼び出されたときにエディター タイトルに記号「*」がダーティ状態に表示されるのを確認できたのに、「保存」メニュー項目がまだ灰色で表示されていることです (以下のスナップショットを参照)。 ここに画像の説明を入力

「保存」メニュー項目は、plugin.xml で次のように定義されています。

<extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            locationURI="menu:org.eclipse.ui.main.menu">
         <menu
               id="myProject.file"
               label="File">
            <command
                  commandId="org.eclipse.ui.file.save"
                  label="Save"
                  style="push">
            </command>
         </menu>
      </menuContribution>
      <menuContribution
            allPopups="false"
            locationURI="toolbar:org.eclipse.ui.main.toolbar">
         <toolbar
               id="myProject.toolbar1">
            <command
                  commandId="org.eclipse.ui.file.save"
                  label="Save"
                  style="push">
            </command>
         </toolbar>
      </menuContribution>
   </extension>

誰でも問題を確認できますか? 私の実装で何が問題になっていますか?

4

3 に答える 3

0

次のコードをApplicationActionBarAdvisorクラスに追加しようとしたところ、[保存]メニュー項目が有効になり、問題が解決しました。

protected void makeActions(IWorkbenchWindow window) {
        register(ActionFactory.SAVE.create(window));
    }

「register(...)」を呼び出す必要がありますか?

register(...)を呼び出さずにEclipse 3.7でRCPを実行するのは奇妙です。[保存]メニュー項目は、firePropertyChange()によって有効にできます。ただし、Eclipse4.0では機能しません。したがって、ここでこの質問を作成しました。

于 2012-10-16T04:44:59.633 に答える
0

プロパティの変更を開始した後、editorDirtyStateChanged() を呼び出してみてください。

于 2014-05-06T13:02:57.763 に答える
0

isDirty()エディター クラスでオーバーライドしましたか? 何かのようなもの:

@Override
public boolean isDirty() {
    return isDirty;
}
于 2012-10-15T14:22:49.373 に答える