是否可以发布包含焦点小部件应接收的字符的 Key
事件?
我想制作一个简单的弹出键盘,它生成 Key
事件,并且我想让弹出键盘在键映射方面完全独立于物理键盘。
我目前看到的是,当我将字符设置为 '(' 而不生成 Shift 事件时,我得到一个 '8' (我有一个德语键盘,其中 '(' 是 Shift+8)。我假设在使用不同的键盘,“(”将再次显示为其他内容。
有什么办法可以绕过映射吗?
我当前的代码:
private void postKey(Key key) {
if(shift) {
Event ke = new Event();
ke.type = SWT.KeyDown;
ke.keyCode = SWT.SHIFT;
refWidget.getDisplay().post(ke);
}
Event ke = new Event();
ke.type = SWT.KeyDown;
ke.character = shift ? key.shifted[0] : key.normal[0];
refWidget.getDisplay().post(ke);
ke.type = SWT.KeyUp;
refWidget.getDisplay().post(ke);
if(shift) {
Event ev = new Event();
ev.type = SWT.KeyUp;
ev.keyCode = SWT.SHIFT;
refWidget.getDisplay().post(ev);
}
}
最佳答案
SWTBot wiki 有一个页面 keyboard layouts 。
如果您坚持使用 Display-post()
,那么您需要知道当前的键盘布局并将按键映射到字符 (shift + 8 -> '('),就像您已经观察到的那样。
您也许可以重用或采用 SWTBot 中的相关类(SWTKeyboardStrategy
、KeyboardLayout
)。
作为替代方案,该页面列出了使用 AWT Robot
来模拟击键的 AWTKeyboardStrategy,这可能值得尝试。
附注:如果您必须发布 Shift+x 键事件,您可以在 stateMask
中指定 Shift 键,如下所示:
Event ev = new Event();
ev.type = SWT.KeyUp;
ev.stateMask = SWT.SHIFT;
ev.keyCode = ...
关于java - 如何发布仅包含键盘字符(无修饰符)的 SWT 键事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26232694/