gpt4 book ai didi

java - 无法使用 javafx.application 创建网格 Pane

转载 作者:行者123 更新时间:2023-12-01 11:09:22 25 4
gpt4 key购买 nike

所以我一直在尝试创建一个由 1 和 0 组成的矩阵,然后搜索 1 的最大平方( block )。我想使用 GridPane 来显示矩阵。但是,由于这一行 grid.add(z,i,j); 我不断收到错误我怎样才能解决这个问题?我在做什么/不明白导致它无法编译和运行?这是我的代码:

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package cs211;


import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.RowConstraints;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Stage;

/**
*
* @author KeQinWu
*/


public class LargestBlock extends Application{
public Group root=new Group();
public GridPane grid=new GridPane();
public int[][] xy=new int[10][10];
public void init(){
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
xy[i][j]=(int)(Math.random()*2);
}
}
}
public GridPane addGridPane(){
grid.setHgap(10);
grid.setVgap(10);
grid.getColumnConstraints().add(new ColumnConstraints(10)); // column 1 is 10 wide
grid.getRowConstraints().add(new RowConstraints(10)); // column 1 is 10 wide
Text z=new Text("0");
Text o=new Text("1");
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(xy[i][j]==0)
grid.add(z,i,j);
if(xy[i][j]==1)
grid.add(o, i, j);
}
}
return grid;
}
@Override
public void start(Stage stage){
init();
BorderPane bp=new BorderPane();
bp.setCenter(addGridPane());
bp.getChildren();
root.getChildren().add(bp);
Scene scene=new Scene(root,250,250,Color.BEIGE);
stage.setTitle("Num Pane");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args){
Application.launch(args);
}
}

最佳答案

所以问题是您尝试多次添加子项(Text zText o),从而导致此错误:

java.lang.IllegalArgumentException: Children: duplicate children added: parent    = Grid hgap=10.0, vgap=10.0, alignment=TOP_LEFT

将构造函数移动到循环内部:

    for(int j=0;j<9;j++){
if(xy[i][j]==0)
Text z = new Text("0");
grid.add(z,i,j);
if(xy[i][j]==1)
Text o = new Text("1");
grid.add(o, i, j);
}

这会在每次需要实例时创建一个新实例,而不是在开始时创建单个实例。

关于java - 无法使用 javafx.application 创建网格 Pane ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32554831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com