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

JavaFX中的方块网格

吴山
2023-03-14

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

int rowNum = 10;
int colNum = 10;
int gridHeight = 10;
int gridWidth = 10;

public void start(Stage primaryStage) {
    GridPane grid = new GridPane();

    //grid.getColumnConstraints().add(new ColumnConstraints(gridWidth));
    //grid.getRowConstraints().add(new RowConstraints(gridHeight));

    Random rand = new Random();
    Color[] colors = {Color.BLACK, Color.BLUE, Color.GREEN, Color.RED};

    int n = rand.nextInt(4)+1;
    for(int row = 0; row < rowNum; row++){
           for(int col = 0; col < colNum; col++){
               Rectangle rec = new Rectangle();
               rec.setWidth(2);
               rec.setHeight(2);
               rec.setFill(colors[n]);
               GridPane.setRowIndex(rec, row);
               GridPane.setColumnIndex(rec, col);
               grid.getChildren().addAll(rec);
           }
    }

    Scene scene = new Scene(grid, 350, 250);

    primaryStage.setTitle("Grid");
    primaryStage.setScene(scene);
    primaryStage.show();
}

左上方只出现一个方块,为什么会这样呢?

共有1个答案

彭存
2023-03-14

您需要在两个循环中移动随机数生成步骤,这样您就不会使用在进入循环之前设置过一次的相同颜色。此外,您不需要随机数生成器上的加号1。允许的索引为0-3。当您请求nextInt()并输入4时,这是排他的,这意味着永远不会选择4(这是Color数组所需要的)。

您的代码应该如下所示:

for (int row = 0; row < rowNum; row++) {
    for (int col = 0; col < colNum; col++) {
        int n = rand.nextInt(4);
        Rectangle rec = new Rectangle();
        rec.setWidth(2);
        rec.setHeight(2);
        rec.setFill(colors[n]);
        GridPane.setRowIndex(rec, row);
        GridPane.setColumnIndex(rec, col);
        grid.getChildren().addAll(rec);
    }
}
 类似资料:
  • 我一直在编写迷宫算法,并希望绘制使用JavaFX生成的迷宫。 首先,我试图画一个简单的网格——但是由更小的形状组成,这样我以后就能把网格的形状变成迷宫。 我使用了小的左上角形状(像┏)和一个< code>GridPane,但是这导致了单元格之间的小的不连续。(截图和下面的代码)。我怎样才能无缝地把这些形状拼在一起?关于< code>Gridpane的想法,我是不是找错了对象? 目前已尝试绘制网格

  • 我试图将乘法VBox添加到scrollpane中的gridpane(在下面的codesnippet中称为refPane)。 它在一行中添加不超过ITEMS_PER_ROW的Vbox,并在下一行中继续。也不应该有更多的行,然后ITEMS_PER_COLUM可见。问题是,如果我添加更多的ITEMS_PER_ROW*ITEMS_PER_COLUMN到网格中,而不是obingbeingscrollable

  • 我试图在javaFX程序中显示一个4列网格。这就是我设置网格的方式。 我已将标签和文本字段分别放在列 1,3 和列 2,4 中。问题是文本字段和下一个标签之间存在间隙,因此减少了第二个文本字段的宽度。 我该如何解决这个问题?

  • 我想创建一个网格布局与响应方块。 我觉得我应该可以这样做与CSS网格布局,但有麻烦设置高度每个正方形等于宽度。 在每一个方块之间设置一条阴沟也有困难。 我用Flexbox会更好吗? 目前我的HTML看起来像这样,但将是动态的,所以更多的方块可能会被添加。当然,它需要具有响应性,因此理想情况下使用媒体查询将其折叠为一列。 使用css网格,这是我所得到的 我能够用flexbox做得更远一些,并且能够使

  • 在修复robot.awt的requires问题后,我现在在运行应用程序时遇到了另一个问题。应用程序构建没有问题。堆栈跟踪: