随机矩形不希望处于另一个位置

时间:2014-02-04 07:57:58

标签: java random draw rectangles

在应用程序重启后,我应该怎样做才能让我的矩形出现(并在应用程序关闭之前保持不变)?我的代码:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
import java.awt.*;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;

class Rectangle extends JPanel {

    Random random1 = new Random(1000);

        int x1 = random1.nextInt(1000);
        int x2 = random1.nextInt(700);
        int x3 = random1.nextInt(600);
        int x4 = random1.nextInt(400);

         protected void paintComponent(Graphics g) 
    {
        for(int i=0; i<2; i++ ){
            int x1 = random1.nextInt(1000);
            int x2 = random1.nextInt(700);
            int x3 = random1.nextInt(600);
            int x4 = random1.nextInt(400);

            super.paintComponent(g); 

            //rectangle
            g.setColor(Color.red);
            g.fillRect(x2, x3, x1, x4);
        }
       repaint();
        }
 }

现在我在其他地方每秒出现一个矩形。我希望它能在我的应用程序重新启动后更改位置。

2 个答案:

答案 0 :(得分:1)

您需要每次使用不同的seed初始化您的Random。尝试

 Random random1 = new Random(System.currentTimeMillis());

当使用相同的种子初始化Random时,它返回相同的随机数到达时间序列。

答案 1 :(得分:1)

基本答案是,不要在paintComponent方法中随机化矩形的位置。在程序执行期间可以多次调用

class Rectangle extends JPanel {

    Random random1 = new Random(1000);

    private java.awt.Rectangle[] rects;

    public Rectangle() {
        rects = new java.awt.Rectangle[2];
        for(int i=0; i<2; i++ ){
            int x1 = random1.nextInt(1000);
            int x2 = random1.nextInt(700);
            int x3 = random1.nextInt(600);
            int x4 = random1.nextInt(400);
            rects[i] = new java.awt.Rectangle(x1, x2, x3, x4);
        }
    }

    protected void paintComponent(Graphics g) 
    {
        super.paintComponent(g); 
        g.setColor(Color.red);

        Graphics2D g2d = (Graphics2D)g;
        for(java.awt.Rectangle rect : rects){
            g2d.fill(rect);
        }
    }
}

只调用super.paintComponent一次,其中一项工作就是填补背景......

不要在任何repaint方法中调用repaint或可能导致paintXxx调用的方法,这会设置一个讨厌的无限循环,将您的PC吸入黑洞