Java 用于JPanel操作的基于RGB的随机颜色设置器';不行,颜色总是黑色的
我编写了使用RGB生成随机颜色的代码,并用它填充多边形,所以每个多边形使用“util.random”都是不同的颜色。然而,每次我运行这段代码时,所有8个多边形都会被黑色填充。xxx是JPanel的变量名Java 用于JPanel操作的基于RGB的随机颜色设置器';不行,颜色总是黑色的,java,swing,jframe,Java,Swing,Jframe,我编写了使用RGB生成随机颜色的代码,并用它填充多边形,所以每个多边形使用“util.random”都是不同的颜色。然而,每次我运行这段代码时,所有8个多边形都会被黑色填充。xxx是JPanel的变量名 public void randcol(){ Graphics g = xxx.getGraphics(); Random r = new Random(); int rand1 = r.nextInt(256); int rand
public void randcol(){
Graphics g = xxx.getGraphics();
Random r = new Random();
int rand1 = r.nextInt(256);
int rand2 = r.nextInt(256);
int rand3 = r.nextInt(256);
g.setColor(new Color(rand1, rand2, rand3));
}
public void colorize(){
Graphics g = xxx.getGraphics();
randcol();
g.fillPolygon(tr1);
randcol();
g.fillPolygon(tr2);
randcol();
g.fillPolygon(tr3);
randcol();
g.fillPolygon(tr4);
randcol();
g.fillPolygon(tr5);
randcol();
g.fillPolygon(tr6);
randcol();
g.fillPolygon(tr7);
randcol();
g.fillPolygon(tr8);
}
你可以写一个函数,它给你一个随机的颜色
public Color getRandomColor(){
Random r = new Random();
int rand1 = r.nextInt(256);
int rand2 = r.nextInt(256);
int rand3 = r.nextInt(256);
return new Color(rand1, rand2, rand3);
}
public void colorize(){
Graphics g = xxx.getGraphics();
g.setColor(getRandomColor());
g.fillPolygon(tr1);
g.setColor(getRandomColor());
g.fillPolygon(tr2);
g.setColor(getRandomColor());
//...
}
调用getGraphics()
时,每次都会得到图形对象的不同实例。因此,不能用其他方法设置图形对象的颜色
相反,您应该返回一个Color对象。然后,在绘制多边形之前,colorize()
方法将调用此方法来设置图形对象的颜色
但是,这仍然是错误的方法,因为Swing组件可以绘制多次,并且每次重新绘制时,当前逻辑将再次随机化颜色
因此,正确的解决方案是创建包含以下内容的自定义对象:
Random r=new Random()如果连续快速调用,code>将提供相同的颜色序列。原因是“随机”实际上是基于当前时间(以毫秒为单位)的伪随机。从这个“种子”中,它将产生一个可复制(使用相同种子)的数字序列。解决方案是将其声明为类属性,并同时或在构造函数中实例化。
public void randcol(){
Graphics g = xxx.getGraphics();
...
}
public void colorize(){
Graphics g = xxx.getGraphics();
...