JavaFX使用fx:id或id将节点动态添加到窗格中



我可以在带有for next循环的窗格上创建节点,但没有能力要为这些节点指定fx:id或id这可能是第一吗?如果是,我需要向代码中添加什么?或者,我可以选择将信息写入带有for next循环的FXML文件吗?

    private void MakeNode(){
    for (int A = 1; A <= 42; A++){
    if(A==1){
        X=40;
        Y=40;
    }else if(A>1 && A<=7){
        X = X + 120;
        Y = 40;
    }else if(A==8){
        X = 40;
        Y = 160;
    }else if(A>8&& A<=14){
        X = X + 120;
        Y = 160;
    }else if(A==15){
        X = 40;
        Y = 280;
    }else if(A>15&& A<=21){
        X = X + 120;
        Y = 280;
    }else if(A==22){
        X = 40;
        Y = 400;
    }else if(A>22&& A<=28){
        X = X + 120;
        Y = 400;
    }else if(A==29){
        X = 40;
        Y = 520;
    }else if(A>29&& A<=35){
        X = X + 120;
        Y = 520;
    }else if(A==36){
        X = 40;
        Y = 640;
    }else if(A>36&& A<=42){
        X = X + 120;
        Y = 640;
    }
        cirA = new Circle(X,Y,16);
        //fxid = cir.concat(String.valueOf(A));
        //fxid = cir+String.valueOf(A);
        //cirA.setId(fxid);
        cirA.setFill(Color.YELLOW);
        cirA.setStroke(Color.BLACK);
        cirA.setStrokeWidth(4.0);
        pane.getChildren().add(cirA);
    }
}

fx:id只是一种将FXML中定义的元素引用到控制器的机制。如果您无论如何都在控制器中定义节点,那么根本不需要(或者实际上根本没有办法使用)fx:id

当你创建Circle时,你已经有了它的引用。所以只要在那里做你需要的任何事情。这里有一个简单的例子(我清理了您的代码,使其不那么冗长):

private void makeNode() {
    for (int circleIndex = 0 ; circleIndex < 42 ; circleIndex++) {
        int column = circleIndex % 7 ;
        int row = circleIndex / 7 ;
        double x = 40 + 120 * column ;
        double y = 40 + 120 * row ;
        Circle circle = new Circle(x, y, 16);
        circle.setFill(Color.YELLOW);
        circle.setStroke(Color.BLACK);
        circle.setStrokeWidth(4.0);
        pane.getChildren().add(circle);
        circle.setOnMouseClicked(e -> {
            System.out.println("Clicked on ["+column+", "+row+"]");
        });
    }
}

相关内容

  • 没有找到相关文章

最新更新