为什么我不能在一个单独的线程中使用paintComponent绘制?

时间:2016-04-07 16:13:48

标签: java multithreading paintcomponent

我正在开发一款驴子游戏。打印阶段时,我想在自己的线程中运行它,但是当我把它放在一个线程中时,没有任何draw方法适用于g,这是paintComponent图形变量。我能够g.setColor但像g.fillRect这样的东西都没有用。这当前显示为空白JPanel这个类是在paintComponent方法中创建的并且已经传入了它。我知道使用BufferedImage会更好,但我不想这样做。任何帮助表示赞赏。感谢。

我的舞台课程:

import java.awt.*;
import javax.swing.*;

public class StageOne {

    int width = MainClass.width;
    int height = MainClass.height;

    public StageOne(Graphics g) {
        drawStageOne(g);
    }

    public void drawStageOne(Graphics g) {
        width = MainClass.width;
        height = MainClass.height;
        Thread t = new Thread(new Runnable() {
            public void run() {
                g.setColor(new Color(0,0,0));
                g.fillRect(0, 0, width, height);
                paintLadders(g);
                paintFloor(g);
            }
        });
        t.start();
    }

    public void paintFloor(Graphics g) {    
        int y = 0;
        for (int i = 0; i < 6; i++) {
            for (int j = 0; j < 14; j++) {
                if((j >= 7 && i == 0) || (i%2 == 0 && i != 0)) {
                    y += 3;
                }
                else if((j >= 9 && i == 5) || (i%2 == 1 && i != 5)){
                    y -= 3;
                }
                if((i%2 == 1 && j != 13) || (i%2 == 0 && j != 0) || i == 0) {
                    redFloor(g,48*j,height-y-36,3);
                }
            }
            if(i == 4) {
                y += 75;
            }
            else if(i%2 == 0) {
                y += 102;
            }
            else {
                y += 96;
            }
        }
        for (int i = 0; i < 3; i++) {
            redFloor(g,264+48*i,258,3);
        }
        System.out.println("Hello World!");
    }

    public void paintLadders(Graphics g) {
        //Ladder 1 1
        blueLadderSection(g,240,height-36,3);
        blueLadderSection(g,240,height-48,3);
        blueLadderSection(g,240,height-108,3);
        //Ladder 1 2
        blueLadderSection(g,552,height-48,3);
        blueLadderSection(g,552,height-60,3);
        blueLadderSection(g,552,height-72,3);
        blueLadderSection(g,552,height-84,3);
        blueLadderSection(g,552,height-96,3);
        //Ladder 2 1
        blueLadderSection(g,96,height-144,3);
        blueLadderSection(g,96,height-156,3);
        blueLadderSection(g,96,height-168,3);
        blueLadderSection(g,96,height-180,3);
        blueLadderSection(g,96,height-192,3);
        //Ladder 2 2
        blueLadderSection(g,288,height-132,3);
        blueLadderSection(g,288,height-144,3);
        blueLadderSection(g,288,height-156,3);
        blueLadderSection(g,288,height-168,3);
        blueLadderSection(g,288,height-180,3);
        blueLadderSection(g,288,height-192,3);
        blueLadderSection(g,288,height-204,3);
        //Ladder 3 1
        blueLadderSection(g,192,height-228,3);
        blueLadderSection(g,192,height-240,3);
        blueLadderSection(g,192,height-300,3);
        blueLadderSection(g,192,height-312,3);
        //Ladder 3 2
        blueLadderSection(g,336,height-228,3);
        blueLadderSection(g,336,height-240,3);
        blueLadderSection(g,336,height-252,3);
        blueLadderSection(g,336,height-264,3);
        blueLadderSection(g,336,height-276,3);
        blueLadderSection(g,336,height-288,3);
        blueLadderSection(g,336,height-300,3);
        blueLadderSection(g,336,height-312,3);
        //Ladder 3 3
        blueLadderSection(g,552,height-240,3);
        blueLadderSection(g,552,height-252,3);
        blueLadderSection(g,552,height-264,3);
        blueLadderSection(g,552,height-276,3);
        blueLadderSection(g,552,height-288,3);
        //Ladder 4 1
        blueLadderSection(g,96,height-348,3);
        blueLadderSection(g,96,height-360,3);
        blueLadderSection(g,96,height-372,3);
        blueLadderSection(g,96,height-384,3);
        //Ladder 4 2
        blueLadderSection(g,216,height-336,3);
        blueLadderSection(g,216,height-348,3);
        blueLadderSection(g,216,height-360,3);
        blueLadderSection(g,216,height-372,3);
        blueLadderSection(g,216,height-384,3);
        blueLadderSection(g,216,height-396,3);
        //Ladder 4 3
        blueLadderSection(g,504,height-324,3);
        blueLadderSection(g,504,height-336,3);
        blueLadderSection(g,504,height-396,3);
        blueLadderSection(g,504,height-408,3);
        //Ladder 5 1
        blueLadderSection(g,264,height-429,3);
        blueLadderSection(g,264,height-441,3);
        blueLadderSection(g,264,height-453,3);
        blueLadderSection(g,264,height-492,3);
        //Ladder 5 2
        blueLadderSection(g,552,height-444,3);
        blueLadderSection(g,552,height-456,3);
        blueLadderSection(g,552,height-468,3);
        blueLadderSection(g,552,height-480,3);
        blueLadderSection(g,552,height-492,3);
        //Ladder Pauline
        blueLadderSection(g,384,height-528,3);
        blueLadderSection(g,384,height-540,3);
        blueLadderSection(g,384,height-552,3);
        blueLadderSection(g,384,height-564,3);
        blueLadderSection(g,384,height-576,3);
        //Ladder Donkey Kong
        for (int i = 0; i < 13; i++) {
            blueLadderSection(g,192,height-528-(i*12),3);
            blueLadderSection(g,240,height-528-(i*12),3);
        }
    }

    public void redFloor(Graphics g, int x, int y, int pixelSize) {
        int[][][] grid = {{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,0,0,0},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{1,255,33,83},{1,135,0,0},{1,0,0,0},{1,0,0,0},{1,0,0,0},{1,255,33,83},{1,255,33,83},{1,135,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}};
        for(int i = 0; i < grid.length; i++) {
            for(int j = 0; j < grid[0].length; j++) {
                if(grid[i][j][0]==1) {
                    g.setColor(new Color(grid[i][j][1],grid[i][j][2],grid[i][j][3]));
                    g.fillRect(i*pixelSize+x, j*pixelSize+y, pixelSize, pixelSize);
                }
            }
        }
    }

    public void blueLadderSection(Graphics g, int x, int y, int pixelSize) {
        int[][][] grid = {{{1,0,255,255},{1,0,255,255},{1,0,255,255},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255}},{{0,0,255,255},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,255,255}},{{0,0,255,255},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255}},{{0,0,0,0},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,255,255}},{{0,0,0,0},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,255,255}},{{0,0,0,0},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,255,255}},{{0,0,0,0},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,255,255}},{{1,0,255,255},{1,0,255,255},{1,0,255,255},{1,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255},{0,0,255,255}}};
        for(int i = 0; i < grid.length; i++) {
            for(int j = 0; j < grid[0].length; j++) {
                if(grid[i][j][0]==1) {
                    g.setColor(new Color(grid[i][j][1],grid[i][j][2],grid[i][j][3]));
                    g.fillRect(i*pixelSize+x, j*pixelSize+y, pixelSize, pixelSize);
                }
            }
        }
    }
}

0 个答案:

没有答案