2014-01-23 37 views
1

我试图在屏幕上创建100个随机矩形,但它只在左上角绘制1。为什么它这样做,我该如何解决它?它应该用随机的x/y变量重复绘制矩形过程100次,但它不会。在随机位置绘画

public class MazeGame extends JPanel { 
    int x; 
    int y; 
    boolean Loc = false; 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawRect(x, y, 10, 10); 
     this.setBackground(Color.RED); 

    } 

public void makeMaze() { 
    for(int u = 1; u < 100; u++) { 
     while(Loc == false) { 
      int x = (int) (Math.random() * 100); 
      int y = (int) (Math.random() * 100); 
      System.out.println("x " + x + " " + "y " + y); 
      repaint(); 
      Loc = true; 
     } 
     Loc = false; 

    } 
} 
public void gui() { 
    MazeGame game = new MazeGame(); 
    JFrame frame = new JFrame(); 
    frame.setSize(600, 600); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(game); 
    game.makeMaze(); 

    frame.setVisible(true); 
} 
public static void main(String[] args) { 
    MazeGame game = new MazeGame(); 
    game.gui(); 
} 
} 
+0

最近的一个例子被检查[这里](http://stackoverflow.com/a/21238669/230513)。 – trashgod

回答

4

您从未设置x和y。在你的循环内部,你正在定义一个本地的x和y变量,这样实例变量就不会被设置。删除局部变量声明。

+0

好吧,这是一个愚蠢的错误,解决方法是在paintComponent方法中声明x/y,那么每次调用repaint时如何阻止它被擦除? – ImGone98

+0

现在你需要画每个矩形。你现在做的方式只会画最近的一个。 paintComponent每次都有一个新的图形对象。如果你想多出现一个,你需要存储这些点并且一次画出所有点。 – Dodd10x

+0

您的其他选项是将每个矩形绘制到您创建的BufferedImage并在paintComponent中绘制缓冲的图像。 – Dodd10x