The*_*nny 0 java swing boolean keylistener output
我一直在创建一个测试程序来测试角度上的移动是如何工作的,即使这不是我的问题所在,也是我的问题/困惑所在的程序.这个错误(?)不会影响我的程序的工作方式,除非用户想要键入每个键的混搭,看看会发生什么,这正是我做的...
我有一个关键的监听器,在每个按键和键释放时,在数组中设置一个布尔值:
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
int a = KeyEvent.VK_LEFT; // int value of 37
int b = KeyEvent.VK_UP; // 38
int c = KeyEvent.VK_RIGHT; // 39
int d = KeyEvent.VK_DOWN; // 40
int aa = KeyEvent.VK_G; // 71
int bb = KeyEvent.VK_H; // 72
if(key == a || key == b || key == c || key == d) {
player.setKeyValue(key - 37, true); // keyReleased is exactly the same but with a false
}
if(key == aa || key == bb) {
player.setKeyValue((key - 71) + 4, true);
}
}
Run Code Online (Sandbox Code Playgroud)
我的面板画了哪些按键被按下了,我注意到并非我按下的所有按键都被画到屏幕上.我很困惑,认为它与缓冲图像太小有关,所以我仔细检查了一下,奇怪的是它没有.我决定将阵列中的所有布尔值打印到控制台,我发现,实际上,某些键实际上并没有在物理上被按下.
以下是我在按下不同键时收到的一些输出:
// booleans are in order: Left, up, right, down, g, h
true, false, true, false, false, true
true, false, true, false, true, true
true, false, true, false, false, false
Run Code Online (Sandbox Code Playgroud)
我不确定为什么会这样,但我感觉它与JVM在给定时间可以容纳的内存量有关.
虽然这对我来说没有任何障碍,但知道这种情况发生的原因和原因会很好吗?
我严重怀疑它与JVM在给定时间可以容纳的内存量有什么关系.
很难说最好的方法是做你想做的事.
考虑类似的事情:
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
int keyIndex = -1;
switch(key)
{
case KeyEvent.VK_LEFT: keyIndex = 0; break;
case KeyEvent.VK_UP: keyIndex = 1; break;
case KeyEvent.VK_RIGHT: keyIndex = 2; break;
case KeyEvent.VK_DOWN: keyIndex = 3; break;
case KeyEvent.VK_G: keyIndex = 4; break;
case KeyEvent.VK_H: keyIndex = 5; break;
default:
System.out.format("Unexpected KeyCode [%d]\n", key);
break;
}
if(keyIndex != -1){ player.setKeyValue(keyIndex, true); }
}
Run Code Online (Sandbox Code Playgroud)
这种方法摆脱了很多困难,并且如果你得到意想不到的钥匙,也会尝试通知你.不知道更多,很难给你一个更好的答案,但我提出的那个肯定不是最好的 - 它只是调试的一个步骤.我的猜测类似于KeyEvents或整数(对应于KeyCodes)的ArrayList可能是更好的选择.
您可以编辑它以始终显示密钥代码,这样您就可以立即看到生成的密钥代码.