有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaSWT错误地检测密钥组合

我的Windows 10上有两种语言(英语和俄语)。我运行以下代码段:

public static void main(String[] args) throws Exception {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setSize(640, 480);
    shell.setLocation(500, 250);
    shell.setText("SWT");

    FillLayout layout = new FillLayout();
    shell.setLayout(layout);

    shell.addKeyListener(new KeyAdapter() {
        @Override
        public void keyPressed(KeyEvent e) {
            List<String> keys = new ArrayList<>();
            if ((e.stateMask & SWT.CTRL) != 0) {
                keys.add("Ctrl");
            }
            if ((e.stateMask & SWT.ALT) != 0) {
                keys.add("Alt");
            }
            if ((e.stateMask & SWT.SHIFT) != 0) {
                keys.add("Shift");
            }
            keys.add(Character.toString((char) e.keyCode));
            System.out.println(keys);
        }
    });

    shell.open();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }

    display.dispose();
}

当语言设置为英语且我按Right Alt + T时,程序将正确打印[Alt, t]

但是,当我将语言切换为俄语并按Right Alt+T时,程序将打印[Ctrl, Alt, t]。这是不正确的,因为我没有按Ctrl键

这很烦人,因为我们的Eclipse RCP密钥绑定(如Alt+F7Alt+Shift+F5)不能正常工作

知道为什么SWT错误地检测Ctrl

我正在使用最新的Eclipse4.6(SWT3.105.0)中的SWT


共 (2) 个答案

  1. # 1 楼答案

    由于历史原因,非美国键盘布局中使用的AltGr(右Alt)键由操作系统自动转换为Ctrl + Altsee Wikipedia about this

    所以这与SWT没有特别的关系

    为了避免这个问题,用户应该只使用标准的Alt(左Alt)键

  2. # 2 楼答案

    您是否尝试过在windows 10中禁用更改语言的快捷方式