Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中移动对象时遇到问题_Java_Swing_Animation_Actionlistener_Keylistener - Fatal编程技术网

在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()方法仅用于绘制。