我正在使用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。
答案 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