用于 JPanel 操作的基于 RGB 的随机颜色 setter 不起作用,颜色始终为黑色
RGB based random color setter for JPanel manipulation doesn't work, the color is always black
我编写代码使用 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 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());
//...
}
public void randcol(){
Graphics g = xxx.getGraphics();
...
}
public void colorize(){
Graphics g = xxx.getGraphics();
...
当您调用 getGraphics()
时,您每次都会获得不同的 Graphics 对象实例。所以你不能用不同的方法设置 Graphics 对象的 Color。
相反,您 randcol()
方法应该 return 一个 Color 对象。 colorize()
方法将在绘制多边形之前调用此方法来设置 Graphics 对象的颜色。
然而,这仍然是错误的做法,因为 Swing 组件可以被多次绘制,每次重新绘制时,您当前的逻辑都会再次随机化颜色。
因此,正确的解决方案是创建一个包含以下内容的自定义对象:
- 要绘制的多边形
- 多边形的颜色。
该对象应该在您的 class 开始时生成一次。然后你将所有这些对象保存在一个 ArrayList 中,你的绘画方法遍历 ArrayList 来绘制每个对象。
有关此方法的工作示例,请参阅:Custom Painting Approaches。
我编写代码使用 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 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());
//...
}
public void randcol(){
Graphics g = xxx.getGraphics();
...
}
public void colorize(){
Graphics g = xxx.getGraphics();
...
当您调用 getGraphics()
时,您每次都会获得不同的 Graphics 对象实例。所以你不能用不同的方法设置 Graphics 对象的 Color。
相反,您 randcol()
方法应该 return 一个 Color 对象。 colorize()
方法将在绘制多边形之前调用此方法来设置 Graphics 对象的颜色。
然而,这仍然是错误的做法,因为 Swing 组件可以被多次绘制,每次重新绘制时,您当前的逻辑都会再次随机化颜色。
因此,正确的解决方案是创建一个包含以下内容的自定义对象:
- 要绘制的多边形
- 多边形的颜色。
该对象应该在您的 class 开始时生成一次。然后你将所有这些对象保存在一个 ArrayList 中,你的绘画方法遍历 ArrayList 来绘制每个对象。
有关此方法的工作示例,请参阅:Custom Painting Approaches。