SWT错误地检测到组合键

时间:2016-08-05 07:17:56

标签: java swt windows-10

我的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

的任何想法

我使用的是最新的Eclipse 4.6(SWT 3.105.0)中的SWT。

2 个答案:

答案 0 :(得分:1)

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

因此,这与SWT没有具体关系。

要避免此问题,用户应使用标准Alt(左Alt)键。

答案 1 :(得分:-1)

您是否尝试过禁用快捷方式来更改Windows 10中的语言。