到计算机:

int key = e.getKeyCode();
if(e.getKeyCode() == VK_Shift && e.getKeyCode() == VK_1){
text = "!";
}


什么也没做,但对我来说应该将其设置为感叹号。为什么不起作用?我正在尝试制作游戏,并且在聊天框中,我需要在用户执行Shift 1时将文本设置为感叹号。

最佳答案

为什么不起作用?


您在问单个值(e.getKeyCode())是否等于VK_ShiftVK_1。除非这两个值具有相同的值(它们没有),否则将永远无法满足if条件。

该文档使这一点很清楚:


虚拟键码用于报告已按下哪个键盘键,而不是由一个或多个键击组合产生的字符(如“ A”,它来自shift和“ a”)。

例如,按Shift键将导致带有VK_SHIFT键代码的KEY_PRESSED事件,而按'a'键将导致VK_A键代码。释放“ a”键后,将使用VK_A触发KEY_RELEASED事件。另外,将生成一个keyChar值为“ A”的KEY_TYPED事件。


因此,换句话说,您需要处理两个KEY_PRESSED事件,并记住第一个(shift)作为第二个(1)的上下文。

也许您应该寻找KEY_TYPED事件(使用KeyAdapter.keyTyped())并改为使用e.getKeyChar()

10-06 12:53