在我的简单程序中,球的起点是x=0, y=0
。还设置了一个计时器,在每个计时器操作中,x 增加 a,y 增加 b。 a 和 b 的初始值都是 1。这样就可以了:运行程序 Moving1.java
时,球从框架的上、左移动到右、下。
但是,我也尝试添加 KeyEvents,以便可以更改 KeyEvents 中 a 和 b 的值,但它们不起作用。由于某种原因,程序似乎不会执行任何 KeyEvent。如何修复?主 KeyEvent 是 keyPressed,但我已将 b = 0
写入每个 KeyEvent,它应该对球的方向生效。
如果有人可以帮助我解决这个问题,我想我可以向 keyPressed Event
添加正确的软件,例如:
public void keyPressed (KeyEvent e) {
int KeyCode = e.getKeyCode();
if (KeyCode == KeyEvent.VK_LEFT) {
a = -1;
b = 0;
}
}
等等。
但这是我的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Moving1 extends JPanel implements KeyListener {
int x, y;
int a = 1, b = 1;
Timer timer;
public Moving1() {
x = 0;
y = 0;
timer = new Timer(30, new TimerListener());
}
private class TimerListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
x += a; // add horizontal
y += b; // add vertical
repaint();
}
}
public void keyPressed(KeyEvent e) {
b = 0;
}
public void keyReleased(KeyEvent e) {
b = 0;
}
public void keyTyped(KeyEvent e) {
b = 0;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillOval(x, y, 10, 10);
}
public static void main(String[] args) {
JFrame f = new JFrame("Moving1");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Moving1 m = new Moving1();
f.add(m);
f.setSize(500, 500);
f.setVisible(true);
m.timer.start();
}
}
最佳答案
您没有将 KeyListener
添加到任何内容,因此它无法处理任何事件。将以下行放入主程序中,这样事件就会发生。
f.addKeyListener(m);
关于java - 在Java中添加KeyListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44024211/