当前位置: 首页 > 知识库问答 >
问题:

如何在JavaFX中无缝地从网格方块中绘制网格

仇高韵
2023-03-14

我一直在编写迷宫算法,并希望绘制使用JavaFX生成的迷宫。

首先,我试图画一个简单的网格——但是由更小的形状组成,这样我以后就能把网格的形状变成迷宫。

我使用了小的左上角形状(像┏)和一个< code>GridPane,但是这导致了单元格之间的小的不连续。(截图和下面的代码)。我怎样才能无缝地把这些形状拼在一起?关于< code>Gridpane的想法,我是不是找错了对象?

目前已尝试绘制网格

下面我的代码,其实是用Scala写的;我正在使用ScalaFX,但是在网上寻找ScalaFX的帮助简直是一场噩梦,所以我已经完全脱离了JavaFX文档——据我所知,它们几乎是一样的。

val lineLength: Int = 30

def makeClosedCell(length: Int = lineLength): Shape = {
    val wallN = Line(0,0,length,0)
    val wallW = Line(0,0,0,length)
    val closedCell: Shape = Shape.union(wallN, wallW)
    return closedCell
}

def makeOpenW(length: Int = lineLength): Shape = Line(0,0,length,0)

def makeOpenN(length: Int = lineLength): Shape = Line(0,0,0,length)

def initialiseGrid(r: GridPane, sizex: Int, sizey: Int): Unit = {
    for (i <- 0 until sizex) {
        val colConst = new ColumnConstraints()
        colConst.setPercentWidth(100.0 / sizex)
        r.getColumnConstraints().add(colConst)
    }
    for (i <- 0 until sizey) {
        val rowConst = new RowConstraints()
        rowConst.setPercentHeight(100.0 / sizey)
        r.getRowConstraints().add(rowConst)     
    }
    for(j <- sizey-1 to 0 by -1){
        for(i <- 0 until sizex){
            r.add(makeClosedCell(),i,j)
        }
        r.add(makeOpenN(),sizex,j)
    }
    for(i <- 0 until sizex){
        r.add(makeOpenW(),i,sizey)
    }
}

共有1个答案

骆磊
2023-03-14

刚找到解决办法。我发现这可以通过将精确的列和行的宽度和高度固定为与行长度相同的值来解决,如下所示:

val rowConst = new RowConstraints()
// remove: rowConst.setPercentHeight(100.0 / sizey)
rowConst.setMinHeight(length)
rowConst.setMaxHeight(length)
r.getRowConstraints().add(rowConst) 

当然,长度传递到初始化函数中。

 类似资料:
  • 我是JavaFx的新手,我想知道如何绘制网格,我想在网格角上绘制点。我应该使用网格窗格作为基础还是线条图?使用网格并在其上绘制的最佳类是什么?

  • 我是JavaFX的新手,我正在尝试制作一个棋盘。首先,我想制作一个基于数组的填充随机颜色的方格网格。我不知道为什么,但是方块没有填满网格的其余部分。我还想使用约束来设置网格的高度和宽度。 左上方只出现一个方块,为什么会这样呢?

  • 所以我试图用Java显示一个棋盘。到目前为止,我可以正确地绘制和着色一组矩形,并正确地调整窗口和矩形的大小。然而,现在我想在这些矩形上添加一个棋子的图像,我不知道如何继续。 我为棋子创建了png的图像视图,但是当我尝试像使用矩形一样将其添加到网格窗格中时,它会给我一个重复的子错误。 以下是目前为止有效的代码 创建象棋棋子的图像视图并将其绘制在矩形之上的最佳方法是什么,就像棋子在棋盘上的样子一样?我

  • 在我的项目中,我有一个包含多个值的ComboBox。当我的应用程序开始时,我执行以下操作: 其中是字符串列表。 同时,在应用程序中,可以更改此值。但是,由于我已经将此组合框添加到我的GridPane中,然后在该值更改(gui.columns)时添加到场景中,因此新值没有显示在组合框中。因为我已经添加了旧的gui.course。有没有办法用新的gui.course_P更新createTestButt

  • 问题内容: 我想提请使用Java网格(10×10),但我们必须使用来实现它的,这是我的计划至今 问题答案: 该代码有效。 只需删除25

  • 我在fxml中有一个GridPane,它有一个文本标题和4个按钮。GridPane本身是居中对齐的,但所有按钮都在网格的列内左对齐。我知道如何使用Java代码更改项目的对齐方式,但这不是理想的情况,因为我希望所有样式都使用FXML和CSS处理。有谁能建议在JavaFX的GridPane视图中居中对齐单元格元素的最佳方法吗?