题
我正在使用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”,它确实有用。而不是“行动”为菜单栏做贡献。
这是一个SWT错误还是我错过了什么?
的Torsten。
解决方案
更新:我的重复错误还包含一个解决方法。 错误网址是: 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