用于JPanel操作的基于RGB的随机颜色设置器不起作用,颜色始终为黑色

孔子

我编写了使用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组件可以多次绘制,并且每次重新绘制时,您当前的逻辑将再次随机化颜色。

因此,正确的解决方案是创建一个包含以下内容的自定义对象:

  1. 要绘制的多边形
  2. 多边形的颜色。

该对象应在课程开始时生成一次。然后,将所有这些对象保留在ArrayList中,并且绘制方法遍历ArrayList以绘制每个对象。

有关此方法的工作示例,请参见:自定义绘画方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章