【发布时间】:2018-02-04 13:49:14
【问题描述】:
我正在尝试为网格中的每个单元格生成随机颜色(4 种颜色之间)。我已经设法做到了,但它不断地在网格的轮廓和网格的其他元素上重新绘制自己。我怎样才能使颜色只绘制一次?而我的其他元素继续绘制自己? 这是我目前拥有的代码:
import java.awt.*;
import java.util.Random;
public class Cell extends Rectangle {
private Random random;
public Cell(int x, int y) {
super(x, y, 35, 35);
}
public void paint(Graphics g, Boolean highlighted) {
int row;
int col;
for (row=0; row < 20 ; row++ ) {
for (col =0; col <20 ; col++) {
x=col * 35;
y=row * 35;
SurfaceType(g);
}
}
g.setColor(Color.BLACK);
g.drawRect(x, y, 35, 35);
if (highlighted) {
g.setColor(Color.LIGHT_GRAY);
g.fillRect(x, y, 35, 35);
} else {
g.setColor(Color.DARK_GRAY);
g.fillRect(x, y, 35, 35);
}
}
@Override
public boolean contains(Point target){
if (target == null)
return false;
return super.contains(target);
}
public void SurfaceType(Graphics g) {
random= new Random();
int randomNumber = random.nextInt( 5);
switch (randomNumber) {
case 1: // dirt
g.setColor(new Color(102,51,0));
g.fillRect(x,y,34,34);
break;
case 2: //grass
g.setColor(new Color(102,153,0));
g.fillRect(x,y,34,34);
break;
case 3: //tree
g.setColor(new Color(0,102,0));
g.fillRect(x,y,34,34);
break;
case 4: //rock
g.setColor(new Color(182,182,182));
g.fillRect(x,y,34,34);
break;
}
}
}
这张图片显示了当我取出随机化颜色的代码时网格的样子。
这个显示包含了那部分代码:
【问题讨论】:
-
您需要edit您的问题并创建并发布一个有效的minimal reproducible example,作为代码格式的文本,我们可以编译和运行而无需修改的代码。我看到的一个问题是您上面的
paint方法,可能是在GUI 中的绘画方法中调用的方法,其中包含一些程序逻辑,用于执行随机化的代码。了解随机化不应在绘画代码中完成,而应在其他地方完成,这样它就不会受到您无法控制的重绘的影响。 -
因为你在循环部分设置了
x和y的值;因此,无论您之前将它们设置为什么值,当您完成随机颜色部分时,它们将始终设置在屏幕的右下角。 -
查看编辑以回答
标签: java random graphics colors grid