改进我的键盘输入 (KeyListener) Java
Posted
技术标签:
【中文标题】改进我的键盘输入 (KeyListener) Java【英文标题】:improve my KeyBoard Input (KeyListener) Java 【发布时间】:2019-01-03 15:06:51 【问题描述】:问题在于空闲运行循环的 poll 方法。 另外,要添加 Windows 按钮,我必须将数组增加到 524。
keys = 新布尔值[524]; 轮询 = 新 int[524];
我想摆脱循环,但我还没有弄清楚如何。
如何去掉轮询循环来解决添加大数字按钮的问题?
class KeyBoardInput implements KeyListener
private final boolean[] keys;
private final int[] polled;
KeyBoardInput()
keys = new boolean[256];
polled = new int[256];
public boolean keyDownOnce(int keyCode)
return polled[keyCode] == 1;
public void poll()
for(int i = 0; i < keys.length; i++) // <-this
if(keys[i])
polled[i]++;
else
polled[i] = 0;
@Override
public void keyTyped(KeyEvent e)
@Override
public void keyPressed(KeyEvent e)
int keyCode = e.getKeyCode();
if( keyCode >= 0 && keyCode < keys.length )
keys[ keyCode ] = true;
@Override
public void keyReleased(KeyEvent e)
int keyCode = e.getKeyCode();
if( keyCode >= 0 && keyCode < keys.length )
keys[ keyCode ] = false;
调用 KeyBoardInput 的类。
@Override
public void run()
running = true;
while(running)
gameLoop();
private void gameLoop()
processInput();
private void processInput()
keyboard.poll();
if(keyboard.keyDownOnce(KeyEvent.VK_SPACE))
System.out.println("VK_SPACE");
if(keyboard.keyDownOnce(KeyEvent.VK_C))
System.out.println("VK_C");
if(keyboard.keyDownOnce(KeyEvent.VK_ALT))
System.out.println("VK_ALT");
【问题讨论】:
【参考方案1】:我解决了问题,事实证明这是可能的。
@Override
public synchronized void keyPressed(KeyEvent e)
if (e.getKeyCode() == KeyEvent.VK_SPACE)
System.out.println("VK_SPACE");
if (e.getKeyCode() == KeyEvent.VK_C)
System.out.println("VK_C");
【讨论】:
解决方案很简单。以上是关于改进我的键盘输入 (KeyListener) Java的主要内容,如果未能解决你的问题,请参考以下文章