package Main;

import javafx.application.Application;
import javafx.collections.ListChangeListener;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;

import java.util.Objects;

public class Main extends Application
{
    public static void main(String[] args)

    {
        launch(args);
    }

    public void start(Stage primaryStage) throws Exception
    {
        Button b1 =new Button("B1");
        Button b2 =new Button("B2");
        Button b3 =new Button("B3");

        Group group =new Group();

        group.getChildren().addAll(b1,b2,b3);//添加所有的

        group.contains(0,0);//检测坐标(0,0)处是否有组件(子节点左上角的坐标)返回的是布尔值
        System.out.println(group.contains(1,0));//检测该
        group.setOpacity(0.5);//group包括子组件设置透明度
        //     group设置的东西会影响子组件
       // group.setAutoSizeChildren(false); //关闭预设
       // group.getChildren().remove(b1); //删除group中的组件b1

        //设置初始位置
        b1.setLayoutX(0);
        b1.setLayoutY(0);
        //设置宽高
        b1.setPrefWidth(50);
        b1.setPrefHeight(50);

        b2.setLayoutX(100);
        b2.setLayoutY(0);

        b3.setLayoutX(200);
        b3.setLayoutY(0);

        Object[] lbj =group.getChildren().toArray();//获取group中的组件变成数组

        for(Object l:lbj)//数组循环
        {

            Button  BU= (Button)l;//转换类型 (没懂为什么要转类型好像是一样的)
            //System.out.println(l.getClass().getName());
            //System.out.println(BU.getClass().getName());
            BU.setPrefHeight(100);//
            BU.setPrefWidth(100);

        }
        // foreach数组遍历(局限性不能改变数组中的值)
        //for(类型 变量名:集合) {
        //    语句块;
        //}

        b1.setOnAction(new EventHandler<ActionEvent>() {

            public void handle(ActionEvent event)
            {
                Button b4 =new Button("B4");
                group.getChildren().add(b4);
            }
        });//给b1一个点击事件

        group.getChildren().addListener(new ListChangeListener<Node>() {

            public void onChanged(Change<? extends Node> c)
            {
                System.out.println("当前子组件数量="+c.getList().size());
            }
        });//监听子组件的改变事件

        Scene scene = new Scene(group);

        primaryStage.setScene(scene);
        primaryStage.setTitle("javafx Group");
        primaryStage.setHeight(800);
        primaryStage.setWidth(800);
        primaryStage.show();
    }
}

运行结果

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/999e1f4e-f633-4751-82b6-71ae14295985/J0CY8CBFS2I9MCLTHJW.png

额外知识点 foreach 数组遍历

  Object[] lbj =group.getChildren().toArray();//获取group中的组件变成数组

        for(Object l:lbj)//数组循环
        {

            Button  BU= (Button)l;//转换类型 (没懂为什么要转类型好像是一样的)
            //System.out.println(l.getClass().getName());
            //System.out.println(BU.getClass().getName());
            BU.setPrefHeight(100);//
            BU.setPrefWidth(100);

        }
        // foreach数组遍历(局限性不能改变数组中的值)
        //for(类型 变量名:集合) {
        //    语句块;
        //}