我写了一些应用程序并想向它添加一些键盘输入。我的主类扩展了一个 JPanel,所以我可以将 keyAdapter 添加到构造函数中。keyAdapter 是一个名为“InputAdapter”的新类,它通过 keyPressed() 和 keyReleased() 方法扩展了 keyadapter。单击或释放控制台应打印一些字符串,例如此处的“测试”
我不知道为什么,但控制台不会打印任何文本。此外,当我告诉它将精灵可见性变为 false 时,也没有任何反应。
所以我猜 KeyAdapter 不能正常工作,所以有人可以仔细看看我的代码行吗?
我想这个问题与我编写的其他实现的类无关,因为当删除它们时,键盘输入无效的问题仍然存在。
包 com.ochs.game;
public class Game extends JPanel implements Runnable{
private static final long serialVersionUID = 1L;
public static final int WIDTH = 320;
public static final int HEIGHT = 240;
public static final int SCALE = 3;
public boolean isRunning;
public Game() {
addKeyListener(new InputAdapter());
setFocusable(true);
requestFocus();
start();
}
public void start() {
isRunning = true;
new Thread(this).start();
}
public void stop() {
isRunning = false;
}
public void run() {
init();
while(isRunning) {
update();
repaint();
try {
Thread.sleep(5);
} catch (InterruptedException e) {
System.out.println("Thread sleep failed.");
}
}
}
public void init() {
}
public void update() {
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
}
public static void main(String[] args) {
Game gameComponent = new Game();
Dimension size = new Dimension(WIDTH*SCALE, HEIGHT*SCALE);
JFrame frame = new JFrame("Invaders");
frame.setVisible(true);
frame.setSize(size);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.add(gameComponent);
}
public class InputAdapter extends KeyAdapter {
@Override
public void keyPressed(KeyEvent arg0) {
System.out.println("Test");
}
@Override
public void keyReleased(KeyEvent arg0) {
System.out.println("Test");
}
}
}