为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

斯蒂芬大帝 2021-11-11 13:20:52
更新:我找出了问题并将其写在下面。如果您想在 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 中它只是一个盒子。
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

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


查看完整回答
反对 回复 2021-11-11
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

基于 Krzysztof Cichocki 的回答,他意识到坐标的工作方式与行和表不同。在将所有内容乘以第七高度后,我将 x 切换为 y,反之亦然。此外,我对任何坐标所做的任何添加现在总是第七高度,以使所有内容成比例。这是绘制方法的当前代码:


    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.setColor(Color.black);

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

            }


            if(current.isNorthWall()){

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

            }


            if(current.isEastWall()) {

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

            }


            if(current.isSouthWall()) {

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

            }


        }

    }

}

这是现在发生的事情:

//img1.sycdn.imooc.com//618ca8680001057208040938.jpg

查看完整回答
反对 回复 2021-11-11
  • 2 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信