程序不重绘?

时间:2013-11-29 02:19:07

标签: java applet awt paint repaint

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

}

1 个答案:

答案 0 :(得分:2)

您需要包含该行

super.paint( g );

在您的paint方法中,否则您的显示内容实际上不会发生变化。