菜单项加速键仅在显示菜单项后才起作用

时间:2008-10-27 12:40:41

标签: java swt

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

的Torsten。

3 个答案:

答案 0 :(得分:1)

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

基本上,解决方法是在create()上调用ApplicationWindow,然后调用getMenuBarManager().updateAll(true);,这将强制所有菜单项初始化。

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

答案 1 :(得分:0)

AFAIK setAccelerator(.)除了向MenuItem添加相应的文字外,别无其他。您有责任注册KeyUp事件并对其做出反应。

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

答案 2 :(得分:0)

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