矩形没有按照我想要的方式移动

时间:2014-08-15 09:39:55

标签: java swing paintcomponent

我已经编写了这个java代码,我希望蓝色矩形像一个边界球一样四处移动。但是当我试图运行代码时,它似乎停留在一个位置并且在一行中移动。以下是代码。

import javax.swing.*;
import java.awt.*;

public class MoveBody extends JFrame {
    BallPanel ballpanel;
    JFrame frame;

    int X=15;
    int Y=15;


    boolean up=false;
    boolean down=true;
    boolean left=false;
    boolean right=true;




    public static void main(String[]args)
    {

        new MoveBody().go();
    }


    private void go()
    {

            frame = new JFrame("Test");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            ballpanel = new BallPanel();

            frame.getContentPane().add(BorderLayout.CENTER, ballpanel);
            frame.setVisible(true);
            frame.setResizable(false);
            frame.setSize(500,500);
            frame.setLocation(375, 55);
            moveIt();
    }



class BallPanel extends JPanel
{
    public void paintComponent(Graphics g)
    {
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
        g.setColor(Color.WHITE);
        g.fillRect(10, 10, this.getWidth()-10,this.getHeight()-10);
        g.setColor(Color.BLUE);
        g.fillRect(X,Y, 50, 50);
    }
}

public void moveIt()
{

    while(true)
    {
        if(this.Y>=450);
        {
            up=true;
            down=false;
        }

        if(this.X<=10)
        {
            right=true;
            left=false;
        }

        if(this.Y<=10)
        {
            down=true;
            up=false;
        }

        if(this.X>=450)
        {
            right=false;
            left=true;
        }

        if(left) X-=5;
        if(right) X+=5;
        if(up) Y-=5;
        if(down) Y+=5;

        try
        {
            Thread.sleep(50);
        }catch(Exception e){}

        frame.repaint();
    }


}




}

1 个答案:

答案 0 :(得分:8)

这是错误:

if(this.Y>=450);   <----
{
    up=true;
    down=false;
}

删除;,它按预期工作。

(通过尾随;结束if语句并执行{ ... }块,无论条件如何。这就是为什么广场如此迅速地上下反弹。)