在Java中移动对象时遇到问题
我试图创建一个在单击箭头按钮时移动的球。但是,当我单击箭头按钮时,球没有响应。我试图创建一个在单击箭头按钮时移动的球。但是,当我单击箭头按钮时,球没有响应。这是我的密码:在Java中移动对象时遇到问题,java,swing,animation,actionlistener,keylistener,Java,Swing,Animation,Actionlistener,Keylistener,我试图创建一个在单击箭头按钮时移动的球。但是,当我单击箭头按钮时,球没有响应。我试图创建一个在单击箭头按钮时移动的球。但是,当我单击箭头按钮时,球没有响应。这是我的密码: package ball.main; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.
package ball.main;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Ball extends JPanel implements ActionListener, KeyListener {
Timer t = new Timer(5, this);
int x = 0;
int y = 0;
int velX;
int velY;
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
g.fillOval(x, y, 20, 20);
t.start();
}
@Override
public void actionPerformed(ActionEvent e) {
if (x < 0) {
x = 0;
}
if (x > 580) {
x = 580;
}
if (y < 0) {
y = 0;
}
if (y > 580) {
y = 580;
}
x += velX;
x += velY;
repaint();
}
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == KeyEvent.VK_UP) {
velY = -1;
}
if (code == KeyEvent.VK_DOWN) {
velY = 1;
}
if (code == KeyEvent.VK_RIGHT) {
velX = 1;
}
if (code == KeyEvent.VK_LEFT) {
velX = -1;
}
}
@Override
public void keyReleased(KeyEvent e) {
velX = 0;
velY = 0;
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
package ball.main;
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入javax.swing.JPanel;
导入javax.swing.Timer;
公共类Ball扩展JPanel实现ActionListener、KeyListener{
定时器t=新定时器(5,此);
int x=0;
int y=0;
int velX;
内在的;
公共组件(图形g){
超级组件(g);
g、 setColor(Color.GREEN);
g、 椭圆形(x,y,20,20);
t、 start();
}
@凌驾
已执行的公共无效操作(操作事件e){
if(x<0){
x=0;
}
如果(x>580){
x=580;
}
if(y<0){
y=0;
}
如果(y>580){
y=580;
}
x+=velX;
x+=0;
重新油漆();
}
@凌驾
按下公共无效键(按键事件e){
int code=e.getKeyCode();
if(code==KeyEvent.VK_UP){
velY=-1;
}
if(code==KeyEvent.VK_DOWN){
fly=1;
}
if(code==KeyEvent.VK_RIGHT){
velX=1;
}
if(code==KeyEvent.VK_左){
velX=-1;
}
}
@凌驾
公共无效密钥已释放(密钥事件e){
velX=0;
f=0;
}
@凌驾
public void keyTyped(KeyEvent e){
//TODO自动生成的方法存根
}
}
我的代码有什么问题 答案是使用而不是KeyListener切勿在绘制方法中启动计时器对象。paintComponent()方法仅用于绘制。