我正在使用JPanel
和Graphics
来制作游戏。我已经实施了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();
}
答案 0 :(得分:2)
默认情况下,您的JPanel无法调焦。添加
setFocusable(true);
这样做。
答案 1 :(得分:0)
以下是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()));
}
}
}