6.Group组件

打印 上一主题 下一主题

主题 899|帖子 899|积分 2697

关于Group组件的简单介绍


  • 首先,Group组件自己并不是一个“布局”类的组件,它只是一个容器,没有提供调解内部组件展示位置的方法,也就是说,当我们将多个组件(比如button)放在group中时,他们(根据流式规则?)会全部挤在窗口的左上角,当然,假如我们没有设置组件的大小的话,那么大小也是默认的。
  • 假如我们想要调解组件的位置,可以使用组件的方法来调解,比如Button的setLayoutX()setLayoutY()
  • 涉及到的类
    1.Group类,一个容器,可以装一些组件
  • 涉及到的方法(今后以后无参构造方法,不在介绍,默认已经使用)
    1.getChildren().add()  将组件添加进入它的孩子列表
  1. Group group=new Group();
  2. group.getChildren().add();
复制代码
2.getChildren().addAll() 将多个组件一并添加进入group中(这里以button为例)
  1. group.getChildren().addAll(b1,b2,b3)
复制代码
比如下面的例子
  1. /*这里我们只粘贴了application的start方法,启动类不在展示,从此以后也是如此*/
  2. @Override
  3.     public void start(Stage primaryStage) throws Exception {
  4.         Button button1=new Button();
  5.        //Button的方法preHeight(),可以改变按钮大小
  6.         button1.prefHeight(20);
  7.         button1.prefWidth(40);
  8.         Button button2=new Button();
  9.         Button button3=new Button();     
  10.         Group root=new Group();
  11.         root.getChildren().add(button1);
  12.         root.getChildren().add(button2);
  13.         root.getChildren().add(button3);
  14.         Scene scene=new Scene(root);
  15.         primaryStage.setScene(scene);
  16.         primaryStage.setTitle("JavaFx");
  17.         primaryStage.setWidth(800);
  18.         primaryStage.setHeight(800);
  19.         primaryStage.setOpacity(0.7);
  20.         primaryStage.show();
  21.     }
复制代码

我们使用Button的方法,调解位置之后
  1. import java.net.URL;
  2. import javafx.application.Application;
  3. import javafx.application.HostServices;
  4. import javafx.scene.Cursor;
  5. import javafx.scene.Group;
  6. import javafx.scene.Scene;
  7. import javafx.scene.control.Button;
  8. import javafx.scene.image.Image;
  9. import javafx.stage.Modality;
  10. import javafx.stage.Stage;
  11. import javafx.stage.StageStyle;
  12. public class Lanch extends Application {
  13.     @Override
  14.     public void start(Stage primaryStage) throws Exception {
  15.         Button button1=new Button("b1");   
  16.         button1.setPrefWidth(50);
  17.         button1.setPrefHeight(25);
  18.         button1.setLayoutX(0);
  19.         button1.setLayoutY(0);
  20.         Button button2=new Button("b2");
  21.         button2.setPrefWidth(50);
  22.         button2.setPrefHeight(25);
  23.         button2.setLayoutX(60);
  24.         button2.setLayoutY(0);
  25.         Button button3=new Button("b3");  
  26.         button3.setPrefWidth(50);   
  27.         button3.setPrefHeight(25);
  28.         button3.setLayoutX(120);
  29.         button3.setLayoutY(0);
  30.         
  31.         Group root=new Group();
  32.         root.getChildren().add(button1);
  33.         root.getChildren().add(button2);
  34.         root.getChildren().add(button3);
  35.         Scene scene=new Scene(root);
  36.         primaryStage.setScene(scene);
  37.         primaryStage.setTitle("JavaFx");
  38.         primaryStage.setWidth(800);
  39.         primaryStage.setHeight(800);
  40.         primaryStage.show();
  41.     }
  42. }
复制代码

我们发现位置已经被调解好了
3.getChildren().clear()清理部署在它上面的所有组件,getChildren().remove(int index)按苏索引清除掉某个组件
我们实现点击b1,b3消散的逻辑
  1. @Override
  2.     public void start(Stage primaryStage) throws Exception {
  3.       
  4.         Button button1=new Button("b1");   
  5.         button1.setPrefWidth(50);
  6.         button1.setPrefHeight(25);
  7.         button1.setLayoutX(0);
  8.         button1.setLayoutY(0);
  9.    
  10.         Button button2=new Button("b2");
  11.         button2.setPrefWidth(50);
  12.         button2.setPrefHeight(25);
  13.         button2.setLayoutX(60);
  14.         button2.setLayoutY(0);
  15.         Button button3=new Button("b3");  
  16.         button3.setPrefWidth(50);   
  17.         button3.setPrefHeight(25);
  18.         button3.setLayoutX(120);
  19.         button3.setLayoutY(0);
  20.         Group root=new Group();
  21.         root.getChildren().add(button1);
  22.         root.getChildren().add(button2);
  23.         root.getChildren().add(button3);
  24.         
  25.          /*
  26.          * 实现一个点击b1,b3消失的逻辑
  27.          */
  28.          button1.setOnMouseClicked(e->{
  29.                root.getChildren().remove(2);
  30.          });//使用lamda表达式简化匿名类的书写
  31.         Scene scene=new Scene(root);
  32.         primaryStage.setScene(scene);
  33.         primaryStage.setTitle("JavaFx");
  34.         primaryStage.setWidth(800);
  35.         primaryStage.setHeight(800);
  36.         primaryStage.show();
  37.     }
复制代码
点击按钮前

点击按钮后

特别注意:我们假如修改group的一些属性,那么它的子组件的对应属性也会跟着改变
一些代码
  1. [/code][i]last but not least[/i]:以下是JavaFx文档中Group类文档*
  2. [url=https://openjfx.cn/javadoc/22/javafx.graphics/javafx/scene/Group.html]https://openjfx.cn/javadoc/22/javafx.graphics/javafx/scene/Group.html[/url]
  3. 4.[i]contains(double localX, double localY)[/i]是Group的爷爷类中实现的方法,功能是判断点(localX,localY)上是否是子组件的左上角点坐标
  4. 代码如下
  5. [code]System.out.println(root.contains(0,0));
复制代码

5.getChildren().toArray()将子组件以数组的形式拿出来
代码如下
  1.   /*
  2.   * 将Group中的子组件拿出来
  3.   */
  4.         Object[] object=root.getChildren().toArray();
  5.         for(Object o:object){
  6.             Button button=(Button)(o);
  7.             button.setPrefHeight(75);
  8.         }
复制代码

6.设置一个监听事件,监听group中的组件数目改变
[code] root.getChildren().addListener(new ListChangeListener() {            @Override            public void onChanged(Change

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表