【问题标题】:Why is my KeyListener not reading keys?为什么我的 KeyListener 不读取密钥?
【发布时间】:2015-02-02 17:56:28
【问题描述】:

我正在使用JPanelGraphics 来制作游戏。我已经实现了一个KeyListener,并将它添加到我的JPanel。但是,我无法让它读取键码。我添加了一个打印语句,我认为只要按下一个键就会打印出来,但我按下的所有键都没有返回代码。这是我的JPanel 构造函数:

public Game()
{
    super();
    JPanel mazepanel = new JPanel();
    this.add(mazepanel);
    this.setVisible(true);
    this.addMouseListener(this);
    this.addKeyListener(this);
}

这是我的KeyListener

public void keyTyped(KeyEvent kb)
{
    System.out.println("Key pressed: " + kb.getKeyCode());
    if (kb.getKeyCode() == KeyEvent.VK_UP)
    {
        forward = true;
    }
    else if (kb.getKeyCode() == KeyEvent.VK_LEFT)
    {
        left = true;
    }
    else if (kb.getKeyCode() == KeyEvent.VK_RIGHT)
    {
        right = true;
    }
    else if (kb.getKeyCode() == KeyEvent.VK_DOWN)
    {
        back = true;
    }
    else
    {

    }

    this.repaint();
}

【问题讨论】:

  • 改用keyPressedkeyReleased
  • 我都试过了,都没有做任何事情。
  • 这个 JPanel 也必须有焦点。如果你想避免焦点问题,你可以改用键绑定。
  • Game是一个JPanel,在main方法中添加到我的frame中。

标签: java swing user-interface keyboard


【解决方案1】:

默认情况下,您的 JPanel 不可聚焦。添加

setFocusable(true);

做到这一点。

【讨论】:

  • 程序仍然没有读取任何键。我已将面板和框架都设置为可聚焦。
  • 只是面板需要可聚焦。你在什么地方添加了监听器?框架还是面板?
  • 监听器被添加到我的mouseListener旁边的面板中,效果很好。
【解决方案2】:

这是一个很好的 KeyListener 示例:

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class KeyboardExample extends JPanel {

    public KeyboardExample() {
        KeyListener listener = new MyKeyListener();
        addKeyListener(listener);
        setFocusable(true);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Mini Tennis");
        KeyboardExample keyboardExample = new KeyboardExample();
        frame.add(keyboardExample);
        frame.setSize(200, 200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public class MyKeyListener implements KeyListener {
        @Override
        public void keyTyped(KeyEvent e) {
        }

        @Override
        public void keyPressed(KeyEvent e) {
            System.out.println("keyPressed="+KeyEvent.getKeyText(e.getKeyCode()));
        }

        @Override
        public void keyReleased(KeyEvent e) {
            System.out.println("keyReleased="+KeyEvent.getKeyText(e.getKeyCode()));
        }
    }
}

来自http://www.edu4java.com/en/game/game4.html

【讨论】:

    猜你喜欢
    • 2011-07-30
    • 2013-07-27
    • 2017-08-09
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 2015-12-16
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多