Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';t键适配器理解移位+;1 =?_Java_Key - Fatal编程技术网

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