【问题标题】:Failure to Create a Grid Pane with javafx.aplication无法使用 javafx.aplication 创建网格窗格
【发布时间】:2015-09-13 21:43:16
【问题描述】:

所以我一直在尝试创建一个 1 和 0 的矩阵,然后搜索 1 的最大正方形(块)。我想使用 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);
}
}

【问题讨论】:

    标签: java javafx gridpane


    【解决方案1】:

    所以问题是您尝试多次添加子项(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);
        }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2012-10-17
      • 2021-03-09
      相关资源
      最近更新 更多