java - 用于 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 组件可以多次绘制,并且每次重新绘制时,您当前的逻辑都会再次随机化颜色。
因此,正确的解决方案是创建一个自定义对象,其中包含:
- 要绘制的多边形
- 多边形的颜色。
该对象应在课程开始时生成一次。然后将所有这些对象保存在 ArrayList 中,并且您的绘制方法会遍历 ArrayList 以绘制每个对象。
有关此方法的工作示例,请参阅:自定义绘画方法。
推荐阅读
- javascript - 使用 javascript 使 div 出现或消失
- ios - 添加 UITableView backgroundView 与 UIView 与 UIButton
- javascript - 一键多动作
- python-3.x - Django 2.0 操作错误:游标“_django_curs_139683611834112_1”不存在
- php - 更新 php&mysql : 未定义的索引
- firebase - 如何在云功能返回之前从实时数据库中正确获取用户配置文件以获取他们的用户名?
- java - 确定方法是否返回原语的最佳方法?
- r - 逻辑回归错误:测试数据中分类列中的新级别
- xquery - Marklogic 升序返回不正确的排序顺序
- php - PHP提交到txt文件