提问者:小点点

当按右侧ALT键(ALT Gr)时,如何防止CTRL KeyEvent被调度?


我正在使用Swing中的键事件为我的应用程序编写一个键绑定系统。我正在使用添加到画布中的KeyListener检测按键。

Canvas canvas = new Canvas()
frame.add(canvas);
canvas.addKeyListener(new KeyListener() {
    @Override
    public void keyTyped(KeyEvent e) {
    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("KEY CODE: " + e.getKeyCode() + " KEY LOCATION: " + e.getKeyLocation());
    }

    @Override
    public void keyReleased(KeyEvent e) {
    }
});

一切都按缩进方式工作,KeyListener的keyP的(KeyEvent e)方法在键盘上按下的每个键都会被调用。

当我按下前面提到的右ALT键时,问题就出现了。它导致两个连续的KeyEvents被分派。一个用于左CTRL键,一个用于右ALT键。据我所知,CTRL键的如此分派事件与实际按下CTRL键时分派的KeyEvent无法区分。

有没有办法防止在按下正确的ALT键时分派CTRL事件,或者我必须使正确的ALT键不可绑定以避免混淆行为?


共1个答案

匿名用户

基于以下答案:

当我按下键盘上的右alt键时,左侧控件被注册按下?

有些键盘在左边有一个ALT键,在右边有一个ALTGR键,如果你有一个ALTGR键,那么按下该键会触发一个偶数,告诉操作系统Alt Ctrl被按下,这是正常的。

应该提到的是,在某些Windows键盘布局中,您没有这个问题,右键ALT仅充当ALT。