我有一个问题,为什么这个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());
}
}
答案 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
值