java - 如何发布仅包含键盘字符(无修饰符)的 SWT 键事件?

标签 java eclipse events keyboard swt

是否可以发布包含焦点小部件应接收的字符的 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 中的相关类(SWTKeyboardStrategyKeyboardLayout)。

作为替代方案,该页面列出了使用 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/

相关文章:

java - 如何使用spring boot读取jsp文件?

java - Double.valueOf() java.lang.NumberFormatException

eclipse - 调试: working with generated Java code instead of Xtend code

eclipse - EGit 与 Eclipse,这是什么意思?

java - 在 Java 项目上激活 Spartan Refactoring 插件

python - 在 Kivy 中构建一个简单的进度条或加载动画?

java - 在 Java 3D 中拾取形状

WPF 事件,声明式还是处理程序?

javascript - <span>s inside <a> 不要在 Chrome 中触发 "onclick"事件

java - 如何为所有 CompletableFuture 全局设置线程池