KeyStroke.getKeyStroke(int, int) 修饰符被覆盖?
KeyStroke.getKeyStroke(int, int) modifiers getting overwritten?
下面的代码“在我看来”就像它应该的那样,在遇到 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
确实returns两个掩码(CTRL和ALT)。这是由于未删除的遗留和弃用 Event.CTRL_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");
}
下面的代码“在我看来”就像它应该的那样,在遇到 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
确实returns两个掩码(CTRL和ALT)。这是由于未删除的遗留和弃用 Event.CTRL_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");
}