メニュー項目のアクセラレーションキーは、メニュー項目が表示された後にのみ機能します
質問
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