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

rai*_*106 1 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();
    }


}




}
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 8

这是错误:

if(this.Y>=450);   <----
{
    up=true;
    down=false;
}
Run Code Online (Sandbox Code Playgroud)

删除它;,它按预期工作.

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