Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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 击键。getKeyStroke(int,int)修饰符是否被覆盖?_Java_Awt_Keystroke - Fatal编程技术网

Java 击键。getKeyStroke(int,int)修饰符是否被覆盖?

Java 击键。getKeyStroke(int,int)修饰符是否被覆盖?,java,awt,keystroke,Java,Awt,Keystroke,下面的代码“在我看来”应该是这样的:在遇到CTRL掩码时,将其移除(并将其取出),插入(或插入)ALT掩码,然后创建一个具有ALT掩码而不具有CTRL掩码的新击键。事实上,我已经验证了“修饰符”设置是否正确 然而,当传递一个包含CTRL掩码的击键时,我实际上从例程中得到的是一个同时包含两个掩码(CTRL和ALT)的击键 我曾经直接返回方法结果,并尝试在“k2”的中间步骤中添加,但似乎有什么内容被覆盖了,但这没有帮助 想一想到底出了什么问题 public KeyStroke getKeyStore

下面的代码“在我看来”应该是这样的:在遇到CTRL掩码时,将其移除(并将其取出),插入(或插入)ALT掩码,然后创建一个具有ALT掩码而不具有CTRL掩码的新击键。事实上,我已经验证了“修饰符”设置是否正确

然而,当传递一个包含CTRL掩码的击键时,我实际上从例程中得到的是一个同时包含两个掩码(CTRL和ALT)的击键

我曾经直接返回方法结果,并尝试在“k2”的中间步骤中添加,但似乎有什么内容被覆盖了,但这没有帮助

想一想到底出了什么问题

public KeyStroke getKeyStoredToSystem (KeyStroke k) {
  int modifiers = k.getModifiers();
  if ((modifiers & InputEvent.CTRL_DOWN_MASK) != 0) {
    modifiers &= ~InputEvent.CTRL_DOWN_MASK;
    modifiers |= InputEvent.ALT_DOWN_MASK;
    KeyStroke k2 = KeyStroke.getKeyStroke(k.getKeyCode(), modifiers); 
    return k2; 
  } 
  else {
    return k; 
  }      
}

方法
getKeyStoredToSystem
确实返回两个掩码(CTRL和ALT)。这是由于未删除的旧式和弃用的
Event.CTRL\u MASK
。这是固定的方法:

public KeyStroke getKeyStoredToSystem(KeyStroke k) {
    int modifiers = k.getModifiers();
    // If modifiers contains CTRL_DOWN_MASK
    if ((modifiers & InputEvent.CTRL_DOWN_MASK) != 0) { 
        // Remove CTRL_DOWN_MASK
        modifiers &= ~InputEvent.CTRL_DOWN_MASK; 
        // Remove deprecated CTRL_MASK
        modifiers &= ~Event.CTRL_MASK;  
        // Add ALT_DOWN_MASK
        modifiers |= InputEvent.ALT_DOWN_MASK;
        return KeyStroke.getKeyStroke(k.getKeyCode(), modifiers);
    } else {
        return k;
    }
}
您可以在测试方法中看到结果:

@Test
public void mytest() throws KeyStoreException {
    KeyStroke ks = KeyStroke.getKeyStroke("ctrl pressed Z");
    KeyStroke actual = getKeyStoredToSystem(ks);
    
    Assert.assertEquals(actual.toString(),"alt pressed Z");
}