Java KeyStroke.getKeyStroke修饰符已更改

时间:2014-03-16 23:59:56

标签: java awt

我有一个问题,为什么这个KeyStroke的修饰符从128变为130?

package de.roth.jsona.keyevent;
import java.awt.event.InputEvent;
import javax.swing.KeyStroke;
import com.sun.glass.events.KeyEvent;

public class KeyStrokeBug {

    public static void main(String[] args) {
        // getKeyStroke(KeyEvent, modifier)
        System.out.println(KeyEvent.VK_ENTER);

        // Prints out 128
        System.out.println(InputEvent.CTRL_DOWN_MASK);
        KeyStroke k = KeyStroke.getKeyStroke(KeyEvent.VK_0, InputEvent.CTRL_DOWN_MASK);

        // Prints out 130
        System.out.println(k.getModifiers());
    }
}

1 个答案:

答案 0 :(得分:2)

主要的奖杯是mapNewModifiers方法[{1}} ...

KeyStroke

private static int mapNewModifiers(int modifiers) { if ((modifiers & InputEvent.SHIFT_DOWN_MASK) != 0) { modifiers |= InputEvent.SHIFT_MASK; } if ((modifiers & InputEvent.ALT_DOWN_MASK) != 0) { modifiers |= InputEvent.ALT_MASK; } if ((modifiers & InputEvent.ALT_GRAPH_DOWN_MASK) != 0) { modifiers |= InputEvent.ALT_GRAPH_MASK; } if ((modifiers & InputEvent.CTRL_DOWN_MASK) != 0) { modifiers |= InputEvent.CTRL_MASK; } if ((modifiers & InputEvent.META_DOWN_MASK) != 0) { modifiers |= InputEvent.META_MASK; } return modifiers; } s设为旧修饰符_DOWN_MASK的位置。这是出于能力原因......

例如......

_MASK

生成192,其中为......

InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK

生成195,这是两种情况下InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK 值的值......

最终值是按位OR过程的结果

如果你看一下getModifiers修饰符......

_MASK

这些产生......

InputEvent.SHIFT_MASK
InputEvent.CTRL_MASK
InputEvent.ALT_MASK
InputEvent.META_MASK
InputEvent.ALT_GRAPH_MASK

(请记住,还有鼠标按键蒙版)这些很容易被点击,或者“和”成为一个1 2 8 4 32