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