Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java KeyStroke.getKeyStroke修改器已更改_Java_Awt - Fatal编程技术网

Java KeyStroke.getKeyStroke修改器已更改

Java KeyStroke.getKeyStroke修改器已更改,java,awt,Java,Awt,我有一个问题,为什么这个按键的修改器从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) { // ge

我有一个问题,为什么这个按键的修改器从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());
    }
}

主CUPL它位于击键的
mapNewModifiers
方法中

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;
}
它使
\u DOWN\u MASK
s变为较旧的修改器
\u MASK
s。这样做是出于性能原因

例如

InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK
产生192个,其中

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

最终值是按位“或”运算的结果

如果您查看了
\u掩码
修改器

InputEvent.SHIFT_MASK
InputEvent.CTRL_MASK
InputEvent.ALT_MASK
InputEvent.META_MASK
InputEvent.ALT_GRAPH_MASK
这些产品

1
2
8
4
32

(请记住,还有鼠标按钮遮罩)这些可以很容易地按位或“和”转换为单个
int
value

与512->520相同。似乎它是向上舍入到下一个十位数。修饰符是位或位组合在一起的,这允许它们携带多个修饰符,例如[CTRL]和[ALT]以及[SHIFT]。为了检测这些修饰符,您需要对修饰符执行AND操作,例如
if((e.getModifiers()&InputEvent.SHIFT\u MASK)!=0)
。也有可能会使用
InputEvent.CTRL\u MASK
。。。