0

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」をクリックした後にのみ、アプリケーションが終了します。

さまざまなアクセラレータでこれを試しましたが、同じ動作です。

ただし、「Action」の代わりに「MenuItem」を作成してメニューバーに貢献すると機能します。

これは SWT のバグですか、それとも見逃していますか?

トルステン。

4

3 に答える 3

1

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

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

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

于 2008-11-05T13:30:38.183 に答える
0

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

于 2008-11-05T10:59:51.093 に答える
0

AFAIKsetAccelerator(.)は、適切なテキストを に追加する以外に何もしませんMenuItemKeyUpイベントに登録し、それに反応する責任があります。

ウィジェットとは独立しDisplay.addFilter(SWT.KeyUp, myListener)て登録するために使用できます。Listener

于 2008-10-29T15:51:57.920 に答える