为什么KeyAdapter无法理解shift = =?

时间:2014-05-12 09:06:52

标签: java key

到电脑:

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

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

1 个答案:

答案 0 :(得分:1)

  

为什么这不起作用?

您要问的是单个值(e.getKeyCode())是否等于VK_ShiftVK_1。除非这两个具有相同的值(他们没有),if条件永远不会满足。

文档非常清楚:

  

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

     

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

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

也许您应该查找KEY_TYPED个事件(使用KeyAdapter.keyTyped())并使用e.getKeyChar()代替。