Java 为什么可以';t键适配器理解移位+;1 =?
连接到计算机:Java 为什么可以';t键适配器理解移位+;1 =?,java,key,Java,Key,连接到计算机: int key = e.getKeyCode(); if(e.getKeyCode() == VK_Shift && e.getKeyCode() == VK_1){ text = "!"; } 什么都不做,但对我来说,它应该设置为一个感叹号。为什么这样不行?我正在尝试制作一个游戏,在聊天框中,当用户执行Shift 1时,我需要将文本设置为感叹号 为什么这样不行 您正在询问单个值(e.getKeyCode())是否同时等于VK_Shift和VK_1。除非这两个值
int key = e.getKeyCode();
if(e.getKeyCode() == VK_Shift && e.getKeyCode() == VK_1){
text = "!";
}
什么都不做,但对我来说,它应该设置为一个感叹号。为什么这样不行?我正在尝试制作一个游戏,在聊天框中,当用户执行Shift 1时,我需要将文本设置为感叹号
为什么这样不行
您正在询问单个值(e.getKeyCode()
)是否同时等于VK_Shift
和VK_1
。除非这两个值相同(它们没有),否则决不能满足if
条件
文档非常清楚地说明了这一点:
虚拟键代码用于报告已按下的键盘键,而不是由一个或多个击键组合生成的字符(如“a”,来自shift和“a”)
例如,按下Shift键将导致出现带有VK_Shift keyCode的按键按下事件,而按下“a”键将导致出现VK_a keyCode。释放“a”键后,将使用VK_a触发一个key_released事件。另外,将生成一个keyChar值为“a”的key_类型的事件
因此,换句话说,您需要处理两个按下的键事件,记住第一个(shift)作为第二个(1)的上下文
也许您应该查找KEY\u-TYPED
事件(使用KeyAdapter.keyTyped()
)并改用e.getKeyChar()
。以及您对哪些事件做出反应?谢谢,不过,当我按下shift键时,情况会好得多,我得到了一个丑陋的盒子:@user3625168:我们几乎没有足够的信息来知道为什么会发生这种情况,但这听起来像是一个不同的问题。您应该将“我能检测到用户键入Shift-1吗?”与“检测到时我能做正确的事情吗?”@user3625168:您没有领会我的意思:这应该在一个单独的问题中,最好用一个简短但完整的程序来演示问题。每个问题解决一个问题。(老实说,不清楚为什么要在keyreased
中使用e.getKeyChar()
。我还是坚持使用keyTyped
)