改进我的键盘输入 (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的主要内容,如果未能解决你的问题,请参考以下文章

使用 KeyListener 一次接受 2 个键盘输入

我的 KeyListener 无法读取按键输入

键盘事件KeyListener( )

键盘事件KeyListener

Java 键盘事件监听KeyListener

Java KeyListener 与键绑定