0

我正在使用 Eclipse 3.4.1 中的库开发 SWT/JFace 应用程序。我在 Windows(Vista 32 位)和 Ubuntu 8.10 32 位上遇到以下问题:

我在 JFace ApplicationWindow 的 createMenuManager 方法中创建了一个菜单栏。我为文件、编辑和帮助添加了 MenuManagers。

然后我将 ExitAction 添加到文件 MenuManager 中,如下所示:

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 错误还是我错过了什么?

托斯滕。

4

3 回答 3

1

更新:我有一个重复的错误,其中也包含一个解决方法。错误网址是:https ://bugs.eclipse.org/bugs/show_bug.cgi?id=243758

基本上解决方法是调用create()然后强制所有菜单项被初始化ApplicationWindowgetMenuBarManager().updateAll(true);

当然,您必须在创建菜单项后调用上述方法。

于 2008-11-05T13:30:38.183 回答
0

AFAIKsetAccelerator(.)除了将适当的文本添加到您的MenuItem. 您有责任注册KeyUp事件并对其做出反应。

您可以使用独立于您的小部件Display.addFilter(SWT.KeyUp, myListener)来注册您的。Listener

于 2008-10-29T15:51:57.920 回答
0

原来这是 Eclipse 3.4 中的一个错误。我已经提交了一个错误报告:https ://bugs.eclipse.org/bugs/show_bug.cgi?id=253078

于 2008-11-05T10:59:51.093 回答