我是Java的新手,所以我正在创建一个简单的程序,在窗口中输出不同的随机颜色像素,并不断更新。程序将输出原始像素数组,但不会不断变化。 我期待的可能问题:
以下是代码:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
public class Renderer extends Applet {
static int[][] tilemap;
static int rows, columns;
@Override
public void init() {
setSize(800, 480);
setBackground(Color.BLACK);
createTilemap();
}
@Override
public void paint(Graphics g) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
// int mod_i = 16 * i;
// int mod_j = 16 * j;
switch (tilemap[i][j]) {
case 0:
g.setColor(Color.RED);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
case 1:
g.setColor(Color.BLUE);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
case 2:
g.setColor(Color.YELLOW);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
case 3:
g.setColor(Color.WHITE);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
case 4:
g.setColor(Color.GREEN);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
case 5:
g.setColor(Color.CYAN);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
case 6:
g.setColor(Color.MAGENTA);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
case 7:
g.setColor(Color.ORANGE);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
case 8:
g.setColor(Color.PINK);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
case 9:
g.setColor(Color.DARK_GRAY);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
case 10:
g.setColor(Color.BLACK);
// g.fillRect(mod_i, mod_j, 16, 16);
g.fillRect(i, j, 16, 16);
break;
}
}
}
}
public static void createTilemap() {
tilemap = new int[800][480];
rows = tilemap.length;
columns = tilemap[1].length;
Random r = new Random();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
tilemap[i][j] = r.nextInt(11);
}
}
}
public void run() {
char condition = 'y';
while (condition != 'n') {
createTilemap();
repaint();
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
答案 0 :(得分:2)
您需要包含该行
super.paint( g );
在您的paint
方法中,否则您的显示内容实际上不会发生变化。