在应用程序重启后,我应该怎样做才能让我的矩形出现(并在应用程序关闭之前保持不变)?我的代码:
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();
}
}
现在我在其他地方每秒出现一个矩形。我希望它能在我的应用程序重新启动后更改位置。
答案 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吸入黑洞