我已经编写了这个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();
}
}
}
答案 0 :(得分:8)
这是错误:
if(this.Y>=450); <----
{
up=true;
down=false;
}
删除;
,它按预期工作。
(通过尾随;
结束if语句并执行{ ... }
块,无论条件如何。这就是为什么广场如此迅速地上下反弹。)