メニュー項目のアクセラレーションキーは、メニュー項目が表示された後にのみ機能します

StackOverflow https://stackoverflow.com/questions/239744

  •  04-07-2019
  •  | 
  •  

質問

Eclipse 3.4.1のライブラリを使用してSWT / JFaceアプリケーションを開発しています。 Windows(Vista 32ビット)およびUbuntu 8.10 32ビットで次の問題が発生しました:

JFace ApplicationWindowのcreateMenuManagerメソッドでメニューバーを作成します。ファイル、編集、ヘルプにMenuManagerを追加します。

次に、次のようにファイルMenuManagerにExitActionを追加します。

filemenu.add(new ExitAction(this));

ExitActionは次のように定義されます:

public class ExitAction extends Action {
  final ApplicationWindow window;

  public ExitAction(ApplicationWindow w) {

    this.window = w;
    setText("E&xit");
    setToolTipText("Exit the application");
    setAccelerator(SWT.MOD1 + 'Q');    
  }
}

アプリケーションの起動時に< Ctrl + Q"を押したいアプリケーションを終了します。ただし、これは機能しません。 [ファイル]をクリックした後のみメニューバーで[CTRL + Q]をクリックします。アプリケーションは終了します。

異なるアクセラレータで同じ動作を試しました-同じ動作です。

ただし、" MenuItem"を作成すると動作します。 " Action"の代わりにメニューバーに貢献します。

これはSWTのバグですか、何か見落としがありますか?

トーステン。

役に立ちましたか?

解決

更新:重複したバグがあり、回避策も含まれています。 バグのURLは次のとおりです。 https://bugs.eclipse.org/bugs/show_bug .cgi?id = 243758

基本的に回避策は、 ApplicationWindow create()を呼び出し、次に getMenuBarManager()。updateAll(true); を呼び出すことです。初期化するすべてのメニュー項目。

もちろん、メニュー項目を作成した後に上記のメソッドを呼び出す必要があります。

他のヒント

AFAIK setAccelerator(。)は、 MenuItem に適切なテキストを追加するだけです。 KeyUp イベントに登録し、それに反応する責任があります。

Display.addFilter(SWT.KeyUp、myListener)を使用して、ウィジェットとは無関係に Listener を登録できます。

これはEclipse 3.4のバグであることが判明しました。 バグレポートを提出しました: https://bugs.eclipse.org/bugs /show_bug.cgi?id=253078

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top