6.Group组件

关于Group组件的简单介绍

  • 首先,Group组件本身并不是一个“布局”类的组件,它只是一个容器,没有提供调整内部组件展示位置的方法,也就是说,当我们将多个组件(比如button)放在group中时,他们(根据流式规则?)会全部挤在窗口的左上角,当然,如果我们没有设置组件的大小的话,那么大小也是默认的。
  • 如果我们想要调整组件的位置,可以使用组件的方法来调整,比如Button的setLayoutX()setLayoutY()
  • 涉及到的类
    1.Group类,一个容器,可以装一些组件
  • 涉及到的方法(从此以后无参构造方法,不在介绍,默认已经使用)
    1.getChildren().add() 将组件添加进入它的孩子列表
Group group=new Group();
group.getChildren().add();

2.getChildren().addAll() 将多个组件一并添加进入group中(这里以button为例)

group.getChildren().addAll(b1,b2,b3)

比如下面的例子

/*这里我们只粘贴了application的start方法,启动类不在展示,从此以后也是如此*/
 @Override
    public void start(Stage primaryStage) throws Exception {
        Button button1=new Button();
       //Button的方法preHeight(),可以改变按钮大小
        button1.prefHeight(20);
        button1.prefWidth(40);
        Button button2=new Button();
        Button button3=new Button();     



        Group root=new Group();
        root.getChildren().add(button1);
        root.getChildren().add(button2);
        root.getChildren().add(button3);



        Scene scene=new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.setTitle("JavaFx");
        primaryStage.setWidth(800);
        primaryStage.setHeight(800);
        primaryStage.setOpacity(0.7);
        primaryStage.show();
    }


我们使用Button的方法,调整位置之后

import java.net.URL;

import javafx.application.Application;
import javafx.application.HostServices;
import javafx.scene.Cursor;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Lanch extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Button button1=new Button("b1");   

        button1.setPrefWidth(50);
        button1.setPrefHeight(25);
        button1.setLayoutX(0);
        button1.setLayoutY(0);

        Button button2=new Button("b2");

        button2.setPrefWidth(50);
        button2.setPrefHeight(25);
        button2.setLayoutX(60);
        button2.setLayoutY(0);

        Button button3=new Button("b3");  

        button3.setPrefWidth(50);   
        button3.setPrefHeight(25);
        button3.setLayoutX(120);
        button3.setLayoutY(0);
        

        Group root=new Group();
        root.getChildren().add(button1);
        root.getChildren().add(button2);
        root.getChildren().add(button3);



        Scene scene=new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.setTitle("JavaFx");
        primaryStage.setWidth(800);
        primaryStage.setHeight(800);
        primaryStage.show();
    }
}

我们发现位置已经被调整好了

3.getChildren().clear()清理布置在它上面的所有组件,getChildren().remove(int index)按苏索引清除掉某个组件
我们实现点击b1,b3消失的逻辑

 @Override
    public void start(Stage primaryStage) throws Exception {
       

        Button button1=new Button("b1");   

        button1.setPrefWidth(50);
        button1.setPrefHeight(25);
        button1.setLayoutX(0);
        button1.setLayoutY(0);
   
        Button button2=new Button("b2");

        button2.setPrefWidth(50);
        button2.setPrefHeight(25);
        button2.setLayoutX(60);
        button2.setLayoutY(0);

        Button button3=new Button("b3");  

        button3.setPrefWidth(50);   
        button3.setPrefHeight(25);
        button3.setLayoutX(120);
        button3.setLayoutY(0);









        Group root=new Group();
        root.getChildren().add(button1);
        root.getChildren().add(button2);
        root.getChildren().add(button3);



        
         /*
         * 实现一个点击b1,b3消失的逻辑
         */

         button1.setOnMouseClicked(e->{
               root.getChildren().remove(2);
         });//使用lamda表达式简化匿名类的书写
 


        Scene scene=new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.setTitle("JavaFx");
        primaryStage.setWidth(800);
        primaryStage.setHeight(800);
        primaryStage.show();
    }

点击按钮前

点击按钮后

特别注意:我们如果修改group的一些属性,那么它的子组件的对应属性也会跟着改变
一些代码


last but not least:以下是JavaFx文档中Group类文档*
https://openjfx.cn/javadoc/22/javafx.graphics/javafx/scene/Group.html

4.contains(double localX, double localY)是Group的爷爷类中实现的方法,功能是判断点(localX,localY)上是否是子组件的左上角点坐标
代码如下

System.out.println(root.contains(0,0));


5.getChildren().toArray()将子组件以数组的形式拿出来
代码如下

  /*
  * 将Group中的子组件拿出来
  */
        Object[] object=root.getChildren().toArray();
        for(Object o:object){
            Button button=(Button)(o);
            button.setPrefHeight(75);
        }


6.设置一个监听事件,监听group中的组件数量改变

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

            @Override
            public void onChanged(Change<? extends Node> c) {
               System.out.println(c.getList().size());
            }
        });

点击b1使b3消失前

点击b1使b3消失后

posted @ 2024-12-18 21:41  噫~该死的碳酸饮料  阅读(18)  评论(0编辑  收藏  举报