我编写了使用RGB生成随机颜色并用其填充多边形的代码,以便使用“ util.Random”使每个多边形都具有不同的颜色。但是,每次我运行此代码时,所有8个多边形都被填充为黑色。xxx是JPanel的变量名。
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 void randcol(){
Graphics g = xxx.getGraphics();
...
}
public void colorize(){
Graphics g = xxx.getGraphics();
...
调用时getGraphics()
,每次都会获得Graphics对象的不同实例。因此,您不能使用其他方法设置Graphics对象的Color。
相反,您的randcol()
方法应该返回一个Color对象。colorize()
然后,该方法将调用此方法以在绘制多边形之前设置Graphics对象的颜色。
但是,这仍然是错误的方法,因为Swing组件可以多次绘制,并且每次重新绘制时,您当前的逻辑将再次随机化颜色。
因此,正确的解决方案是创建一个包含以下内容的自定义对象:
该对象应在课程开始时生成一次。然后,将所有这些对象保留在ArrayList中,并且绘制方法遍历ArrayList以绘制每个对象。
有关此方法的工作示例,请参见:自定义绘画方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句