在我的简单程序中,球的起点是x=0, y=0
。还在每个Timer动作中设置定时器,x增加a,y增加b。 a和b的初始值都是1.这是有效的:当运行程序Moving1.java
时,球从框架的左上方向左下方移动。
但是,我也尝试添加KeyEvent,以便我可以在KeyEvents中更改a和b的值,但它们不起作用。出于某种原因,似乎程序不会进入任何KeyEvent。怎么修好?主KeyEvent是keyPressed但我已经为每个KeyEvent编写了b = 0
,它应该对球的方向生效。
如果有人可以帮我解决这个问题,我想我可以在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();
}
}
答案 0 :(得分:1)
您未将KeyListener
添加到任何内容中,因此无法处理任何事件。将以下行放在您的主要内容中,这应该会有事件发生。
f.addKeyListener(m);