0
在我的簡單程序中,球的起點是x=0, y=0
。計時器也設置在每個Timer動作上,x增加a,y增加b。 a和b的初始值都是1.並且這是有效的:當運行程序Moving1.java
時,球從框架的上方和左方向右和向下。在Java中添加KeyListener?
但是,我試圖添加KeyEvents,以便我可以在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();
}
}
您是否在某處添加了「addKeyListener」? – khelwood
文檔:http://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html – Gimby
您的''Moving1''現在是''KeyListener''的一個實例,但是您沒有告訴任何組件它應該使用KeyListener ... – f1sh