为什么我的 2D 迷宫没有用 JComponent 绘制?

更新:我找出了问题并将其写在下面。如果您想在 GitHub 上查看完整的可编译代码:https : //github.com/scohen40/cohen-mco364-fall-2018/tree/ mazeGUI/src/main/java/cohen/maze


我有一个 2D 单元格阵列,每个单元格有 4 个墙。我的 generateMaze() 类从一个随机点开始并挖出一个迷宫。那部分工作正常,当我在控制台中打印出迷宫时,一切都很好。

我的下一个目标是在 JPanel 中使用 JComponent 绘制迷宫。问题是我得到的只是左上角的一个粗线框。这是绘画代码:


public class AnimatedMaze extends JComponent {

private Maze maze;

private int componentHeight;

private int componentWidth;

private int seventhHeight;

private int seventhWidth;


protected void paintComponent(Graphics g) {

    super.paintComponent(g);


    componentHeight = this.getHeight();

    componentWidth = this.getWidth();

    seventhHeight = componentHeight/7;

    seventhWidth = componentWidth/7;


    maze = new Maze(7, 7);

    g.setColor(Color.black);


    paintMaze(g);


}


/**

 * The paintMaze() method runs through the generated maze and paints the existing walls.

 * @param g

 */

void paintMaze(Graphics g) {

    for (int x = 0; x < maze.getHeight(); x++) {

        System.out.println("|");

        for (int y = 0; y < maze.getWidth(); y++) {

            Cell current = maze.getMaze()[x][y];

            if(current.isWestWall()) {

                g.drawLine(x, y, x, y + seventhHeight);

            }

            if(current.isNorthWall()){

                g.drawLine(x, y,x + seventhWidth, y);

            }

            if(current.isEastWall()) {

                g.drawLine(x + seventhWidth, y, x+ seventhWidth, y + seventhHeight);

            }

            if(current.isSouthWall()) {

                g.drawLine(x, y + seventhHeight, x + seventhWidth, y +seventhHeight);

            }


        }

    }

}


}

您可以在控制台中看到生成的迷宫,但在 JPanel 中它只是一个盒子。

http://img.mukewang.com/618ca8510001794412910907.jpg

斯蒂芬大帝
浏览 194回答 2
2回答

富国沪深

在您的绘画代码中,您需要将每个 x 和 y 坐标乘以“seventhHeight”,否则您将无法绘制正确的坐标。

幕布斯6054654

基于 Krzysztof Cichocki 的回答,他意识到坐标的工作方式与行和表不同。在将所有内容乘以第七高度后,我将 x 切换为 y,反之亦然。此外,我对任何坐标所做的任何添加现在总是第七高度,以使所有内容成比例。这是绘制方法的当前代码:&nbsp; &nbsp; void paintMaze(Graphics g) {&nbsp; &nbsp; for (int x = 0; x < maze.getHeight(); x++) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("|");&nbsp; &nbsp; &nbsp; &nbsp; for (int y = 0; y < maze.getWidth(); y++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cell current = maze.getMaze()[x][y];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(current.isWestWall()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g.setColor(Color.black);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g.drawLine((y+1)*seventhHeight, x*seventhHeight, (y+1)*seventhHeight, x*seventhHeight + seventhHeight);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(current.isNorthWall()){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g.drawLine((y+1)*seventhHeight, x*seventhHeight,(y+1)*seventhHeight + seventhHeight, x*seventhHeight);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(current.isEastWall()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g.drawLine((y+1)*seventhHeight + seventhHeight, x*seventhHeight, (y+1)*seventhHeight + seventhHeight, x*seventhHeight + seventhHeight);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(current.isSouthWall()) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; g.drawLine((y+1)*seventhHeight, x*seventhHeight + seventhHeight, (y+1)*seventhHeight + seventhHeight, x*seventhHeight +seventhHeight);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}这是现在发生的事情:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java