首页 > 其他分享 >6.Group组件

6.Group组件

时间:2024-12-18 21:41:46浏览次数:4  
标签:primaryStage Button button1 getChildren 组件 Group root

关于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消失后

标签:primaryStage,Button,button1,getChildren,组件,Group,root
From: https://www.cnblogs.com/qinbaoyang/p/18554825

相关文章

  • Element Plus组件库el-select组件多选回显踩坑
    前情公司有经常需要做一些后台管理页面,我们选择了ElementPlus,它是基于Vue3,面向设计师和开发者的组件库,是Vue框架生态中比较火的UI组件库,组件库丰富易用,组件链接:一个Vue3UI框架|ElementPlus,项目中经常会用到el-select多选功能,组件自带的多选交互也是非常棒的,标签回显示......
  • Shadcn UI 实战:打造可维护的企业级组件库
    "我们真的需要自己写一套组件库吗?"上周的技术评审会上,我正在和团队讨论组件库的选型。作为一个快速发展的创业公司,我们既需要高质量的组件,又想保持灵活的定制能力。在对比了多个方案后,我们选择了shadcn/ui这个相对较新的解决方案。说实话,最开始我对这个决定也有些担忧。毕......
  • LOOP GROUP用法
    1、分组根据维度分组,处理内表中不同维度值的数据TYPES:BEGINOFty_alv,matnrTYPEmarc-matnr,"物料werksTYPEmarc-werks,"工厂bdmngTYPEresb-bdmng,"数量zjTYPEresb-bdmng,"汇总checkboxTYPEchar......
  • 深入探索ArkWeb:构建高效且安全的Web组件
    深入探索ArkWeb:构建高效且安全的Web组件本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者......
  • 设计一个可复用的 ArkWeb 基础组件架构
    引言在华为鸿蒙开发环境中,ArkWeb组件是构建跨平台Web应用的重要工具。为了提高开发效率和组件复用性,我们需要设计一个健壮、可扩展的ArkWeb基础组件架构一、架构设计原则模块化模块化是组件设计的基础,它允许我们将复杂的系统分解为可管理的模块。在ArkWeb组件中,我们可......
  • GaussDB——PageStore组件
    PageStore是一个分布式存储,对外提供SAL接口,SQL节点通过SAL接口进行日志和页面的持久化服务,PageStore对象间的映射关系如下图所示。PageClusterManagerControlServer(集群管理):页面集群管理控制服务负责整个存储节点的管理,VFS和StoreSpace的管理,以及Slice的分配和调度。VFS:虚拟......
  • GaussDB DCS组件
    云原生数据库支持DCS一是为了DCS能够支持持久化能力,二是构建一站式的云数据库服务能力。DCS原来是一个sharenothing的分布式集群,有自己的通信管理,集群管理和客户端。在云原生数据库中,DCS是作为一个组件集成到整个服务中,主要提供字符串(String)、哈希(Hash)、列表(List)、集合结构(Set、S......
  • JMeter简介、基本组件、基本测试步骤
    一、JMeter简介定义JMeter是一款开源的性能测试工具,主要用于对软件应用程序进行负载测试、功能测试和性能测量。它是用Java语言编写的,因此可以在多种操作系统上运行,如Windows、Linux和MacOS等。用途性能测试方面:能够模拟大量用户并发访问系统,以此来评估系统在不同负载......
  • Spring Cloud常用组件及其配置
    一、Eureka(服务注册与发现)EurekaServer配置application.yml配置示例:server:port:8761eureka:instance:hostname:localhostclient:register-with-eureka:falsefetch-registry:false解释:server.port:指定EurekaServer运行的端口,这里是8761......
  • 动画组件
    animation  ctrl+6打开动画面板 脚本控制 新版动画组件animator组件动画控制器   脚本控制 无退出时间可立刻执行动画切换 布尔切换后仍持续 脚本控制 过度会更自然  ......