对于我的应用程序,我需要空格键来调用独立于焦点小部件的函数,在应用程序中的任何位置,但前提是打开相应的选项卡。我发现可以在显示中添加一个过滤器,如下所示:
getShell().getDisplay().addFilter(SWT.KeyDown, new Listener() {
public void handleEvent(Event arg0) {
if( arg0.character == 32 ) { /**SPACE*/
if( mainTabs.getSelection().equals(analyseSoundFilesTab)) {
soundController.playButtonClickHandler();
}
}
}
});
在大多数情况下,这工作得很好,但是如果我通过“选项卡”或“Shift 选项卡”给按钮焦点,那就有点奇怪了 - 空格键会激活“按下的按钮”,就像点击按钮一样鼠标。我现在有点陷入困境,我不知道如何避免这种情况......
对于按钮,我实现了一个 SelectionListener。
问候。
您可以使用 TraverseListener 并使用 doin 字段禁用新闻事件检测。这是示例代码:
display.addFilter(SWT.KeyDown, new Listener() {
public void handleEvent(Event e) {
if (e.character == 32) {
System.out.printf("Space detected %s\n", e);
}
}
});
Button b1 = new Button(shell, SWT.PUSH);
b1.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent se) {
System.out.printf("Button pressed %s\n", se);
}
});
b1.addTraverseListener(new TraverseListener() {
@Override
public void keyTraversed(TraverseEvent te) {
System.out.printf("Traverse detected %s\n", te);
te.doit = true;
}
});
If addTraverseListener()
不存在,过滤后检测到您的空格按钮,因此您会看到“检测到空格...”,然后看到“按下按钮...”。现在你设置了te.doit = true
,你让 SWT 进行空格键遍历(实际上什么也不做),而不是触发关键侦听器。您可以选择检查 te.detail 以仅防止助记词遍历。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)