java - 程序不重新绘制?

标签 java applet awt paint repaint

我是 Java 新手,所以我正在制作一个简单的程序,在窗口中输出不同的随机颜色像素,并不断更新。程序将输出原始的像素数组,但它不会不断变化。 我预计可能出现的问题:

  • repaint() 不正确。
  • 数组未正确生成新的随机数

这是代码:

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();
            }
        }
    }

}

最佳答案

您需要包含该行

super.paint( g );

在您的 paint 方法中,否则您的显示实际上不会改变。

关于java - 程序不重新绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20277388/

相关文章:

java - Java中的语音识别

java - 在 public void 中返回一个变量

java - 使用小程序更新数据库

Java WebStart 不允许多个实例

Java-填充重叠的多边形

java - 嵌入式 jetty : server html file from resource folder

java - 如何验证 YAML on Play 中没有重复条目?

java - setBackground 不适用于第一次但第二次,为什么?

java - 如何在actionListener(java)中共享变量

java - 未调用 paintComponent