JavaFx基础学习【四】:UI控件的通用属性

目录

前言

一、介绍

 二、继承关系

三、常用通用属性

四、属性Properties

五、属性绑定

六、属性监听

七、事件驱动

八、其他章节


前言

如果你还没有看过前面的文章,可以通过以下链接快速前往学习:

JavaFx基础学习【一】:基本认识_明天再去学习的博客-CSDN博客

JavaFx基础学习【二】:Stage_明天再去学习的博客-CSDN博客 

JavaFx基础学习【三】:Scene_明天再去学习的博客-CSDN博客 

一、介绍

Node,就是节点,在整体结构中,就是黄色那一块,红色也算

个人理解,在实际中,Node可以说是我们的UI页面上的每一个节点了,比如按钮、标签之类的控件,而这些控件,大多都是有一些通用属性的,以下简单介绍一下。

 二、继承关系

所有的UI控件,都继承了Node类,在Node类中,定义了控件的通用属性的设置

@IDProperty("id")
public abstract class Node implements EventTarget, Styleable {
.....
}

对此类感兴趣的小伙伴可以自行了解

三、常用通用属性

以下以Button控件为进行介绍:

public class App extends Application{

    @Override
    public void start(Stage primaryStage) throws Exception {
        BUtton button = new Button("我是一个按钮");
        AnchorPane anchorPane = new AnchorPane();
        anchorPane.getChildren().add(button);
        Scene scene = new Scene(anchorPane, 400, 400);


        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args )
    {
        launch(args);
    }
}

1、layoutX,设置控件在Scene场景中的x轴位置

button.setLayoutX(20);

2、layoutY ,设置控件在Scene场景中的y轴位置

button.setLayoutY(20);

3、preWidth,设置控件宽度

button.setPrefWidth(200);

4、preHeight,设置控件高度

button.setPrefHeight(200);

5、alignment,设置内容显示位置

button.setAlignment(Pos.BOTTOM_RIGHT);

6、visible,设置控件是否可视

button.setVisible(false);

7、opacity,设置控件透明度

button.setOpacity(0.5);

8、rotate,设置控件倾斜度

button.setRotate(90);

9、translateX、translateY、translateZ,控件在各个轴移动多少

button.setTranslateX(20);
button.setTranslateY(45);
button.setTranslateZ(180);

10、更多前往文档查找并且使用

四、属性Properties

上诉通用属性中,基本上都有对应的Properties子类类型,

比如,在Button控件中:

layoutX属性对应有layoutXProperty方法,返回的是DoubleProperty对象,

layoutY属性对应有layoutYProperty方法,返回的是DoubleProperty对象,

disable属性对应有disableProperty方法,返回的是BooleanProperty对象,

依次类推,具体看不同属性的返回值是哪一个Properties子类类型;

我们可以对这些属性的Property类型返回进行绑定bind或者监听addListener,细节请看下面属性绑定和属性监听章节

五、属性绑定

JavaFx中我们的属性可以与其它属性进行绑定,当其他属性的值发生改变之后,我们被绑定的属性值也将发生改变,参考如下案例:

1)属性没有进行绑定前:

public class HelloApplication extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        Button button = new Button("我是一个按钮");

        BorderPane pane = new BorderPane(button);

        Scene scene = new Scene(pane, 320, 240);

        button.setPrefWidth(160);
        button.setPrefHeight(20);


        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

运行效果:

我们做如下操作,当我们拖动窗口大小,使窗口变长,发现按钮大小固定不变,并没有随着窗口变大而调整大小:

2) 进行属性绑定,以下我们将按钮的宽度属性与窗口的宽度属性进行绑定,当窗口宽度属性发生变化的时候,我们的按钮宽度属性也随之改变。

添加如下代码:

button.prefWidthProperty().bind(pane.widthProperty().divide(2));

观察效果,当我们拖到窗口宽度使之变宽之后,可以看到,按钮的宽度也随着窗口的宽度发生变化:

以上就是关于我们的属性绑定了,更多玩法还需要小伙伴自行进行拓展哦

六、属性监听

顾名思义,如果我们控件的属性进行了改变,我们可以对这些属性进行监听

public class App extends Application{

    @Override
    public void start(Stage primaryStage) throws Exception {
        Button button = new Button("我是一个按钮");
        button.disableProperty().addListener(new ChangeListener<Boolean>() {
            @Override
            public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
                System.out.println("我是第一个按钮,我被禁用了");
            }
        });
        AnchorPane anchorPane = new AnchorPane();
        anchorPane.getChildren().add(button);

        Button button2 = new Button("禁用");
        button2.setLayoutY(50);
        button2.setOnAction(event -> {
            button.setDisable(true);
        });
        anchorPane.getChildren().add(button2);


        Scene scene = new Scene(anchorPane, 400, 400);


        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args )
    {
        launch(args);
    }
}

以上就是关于我们的属性监听了,更多玩法还需要小伙伴自行进行拓展哦

七、事件驱动

事件驱动,也就是比如我们有一个按钮,我们点击按钮、鼠标点击、鼠标释放、鼠标移入、鼠标移出、键盘事件等的事件响应

在JavaFx中,事件驱动主要相关的函数是以setOnxxx命名的,接下来简单体验一下事件驱动吧

1、setOnAction,控件基础的功能事件

button.setOnAction(actionEvent -> {
    System.out.println("点击");
});

2、setOnKeyPressed,键盘按下事件,需要对场景Scene设置

scene.setOnKeyPressed(keyEvent -> {
    System.out.println("键盘按下");
});

3、setOnKeyReleased,键盘松开事件,需要对场景Scene设置 

scene.setOnKeyReleased(keyEvent -> {
    System.out.println("键盘松开");
});

4、setOnMouseEntered,鼠标移入事件

button.setOnMouseEntered(mouseEvent -> {
    System.out.println("鼠标移入");
});

5、setOnMouseEntered,鼠标移出事件

button.setOnMouseMoved(mouseEvent -> {
    System.out.println("鼠标移出");
});

6、还有更多其他事件,详情请参考文档

八、其他章节

JavaFx基础学习【五】:FXML布局文件使用_明天再去学习的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/76191.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探讨uniapp的生命周期问题

在uniapp中,生命周期函数分为应用生命周期函数、页面生命周期函数和组件生命周期函数. 1应用声明周期 应用生命周期函数只能在 App.vue 中监听有效&#xff0c;在其他页监听无效。 onLaunch&#xff1a;当uni-app 初始化完成时触发&#xff08;全局只触发一次&#xff09;on…

Jmeter性能测试系列-性能测试需求分析

性能测试需求分析 性能测试需求分析与传统的功能测试需求有所不同&#xff0c;功能测试需求分析重点在于从用户层面分析被测对象的功能性、易用性等质量特性&#xff0c;性能测试则需要从终端用户应用、系统架构设计、硬件配置等多个纬度分析系统可能存在性能瓶颈的业务。 性…

线上售楼vr全景看房成为企业数字化营销工具

在房地产业中&#xff0c;VR全景拍摄为买家提供了虚拟看房的全新体验。买家可以通过相关设备&#xff0c;远程参观各个楼盘的样板间和实景&#xff0c;感受房屋的空间布局和环境氛围&#xff0c;极大地提高了购房决策的准确性。对于房地产开发商和中介机构来说&#xff0c;VR全…

在不破坏原有隔离状态的情况下,怎么实现网间数据安全摆渡?

随着网络技术的演进&#xff0c;网络攻击、数据窃取、数据泄露事件也愈发频繁&#xff0c;给企业造成损失和负面影响&#xff0c;企业数据防泄漏治理是大趋势&#xff0c;也是自身迫切需求。 2021年1月&#xff0c;中国农业银行因存在数据泄露风险、互联网门户网站泄露敏感信息…

《起风了》C++源代码

使用方法 Visual Studio、Dev-C、Visual Studio Code等C/C创建一个 .cpp 文件&#xff0c;直接粘贴赋值即可。 #include <iostream> #include <Windows.h> #pragma comment(lib,"winmm.lib") using namespace std; enum Scale {Rest 0, C8 108, B7 …

分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

官方文档&#xff1a;https://nginx.org/en/docs/http/ngx_http_proxy_module.html 1. 代理缓冲 proxy_buffer 代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲&#xff0c;Nginx可以在接收完整的响应后再将其发送给客户端&#xff0c;从而提高性能和效率…

数据挖掘全流程解析

数据挖掘全流程解析 数据指标选择 在这一阶段&#xff0c;使用直方图和柱状图的方式对数据进行分析&#xff0c;观察什么数据属性对于因变量会产生更加明显的结果。 如何绘制直方图和条形统计图 数据清洗 观察数据是否存在数据缺失或者离群点的情况。 数据异常的两种情况…

Mr. Cappuccino的第61杯咖啡——Spring之BeanPostProcessor

Spring之BeanPostProcessor 概述基本使用项目结构项目代码运行结果源代码 常用处理器项目结构项目代码执行结果 概述 BeanPostProcessor&#xff1a;Bean对象的后置处理器&#xff0c;负责对已创建好的bean对象进行加工处理&#xff1b; BeanPostProcessor中的两个核心方法&am…

React Dva项目小优化之redux-action

之前 我们讲过 models 接下啦 我们来给大家讲一个新的库 这个库的话 有最好 没有影响也不大 它主要是帮助我们处理 action的 我们直接在 GitHub 官网上搜索 redux-action 我们搜出来 第一个就是 从星数来看 还是非常优秀的 我们拉下来 找到这个Documentation 然后点击进去 进…

一、Dubbo 简介与架构

一、Dubbo 简介与架构 1.1 应用架构演进过程 单体应用&#xff1a;JEE、MVC分布式应用&#xff1a;SOA、微服务化 1.2 Dubbo 简介一种分布式 RPC 框架&#xff0c;对专业知识&#xff08;序列化/反序列化、网络、多线程、设计模式、性能优化等&#xff09;进行了更高层的抽象和…

BUUCTF [MRCTF2020]Ezpop解题思路

题目代码 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $var;publi…

日精注塑机联网

不改造程序的话&#xff0c;日精支持输出CSV和txt数据作为其他软件的接口。 改造后可以支持63协议。 在软件层面日精也有专用的软件&#xff0c;可以看到其实设备厂家提供的软件功能已经非常丰富了&#xff0c;但这类软件最大的缺点是只能自己家的机器使用&#xff0c;要想其他…

ARTS 挑战打卡的第8天 ---volatile 关键字在MCU中的作用,四个实例讲解(Tips)

前言 &#xff08;1&#xff09;volatile 关键字作为嵌入式面试的常考点&#xff0c;很多人都不是很了解&#xff0c;或者说一知半解。 &#xff08;2&#xff09;可能有些人会说了&#xff0c;volatile 关键字不就是防止编译器优化的吗&#xff1f;有啥好详细讲解的&#xff1…

Blazor前后端框架Known-V1.2.12

V1.2.12 Known是基于C#和Blazor开发的前后端分离快速开发框架&#xff0c;开箱即用&#xff0c;跨平台&#xff0c;一处代码&#xff0c;多处运行。 Gitee&#xff1a; https://gitee.com/known/KnownGithub&#xff1a;https://github.com/known/Known 概述 基于C#和Blazo…

语聚AI如何通过对话方式让AI助手执行应用软件

1 什么是应用助手&#xff1f; 应用助手可以通过对话的方式让AI助手执行应用软件的操作。 例如&#xff0c;您可以调用“Bing搜索引擎搜索”热门信息&#xff0c;然后根据这些信息总结内容。 也可以使用“抖音”应用&#xff0c;搜索热门抖音视频&#xff0c;并根据热门视频生…

JavaEE初阶:多线程 - 编程

1.认识线程 我们在之前认识了什么是多进程&#xff0c;今天我们来了解线程。 一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行 着多份代码. 引入进程这个概念&#xff0c;主要是为了解决并发编程这样的…

Visual Studio 2022 中解决使用scanf报错的方法(一劳永逸)

目录 【前言】 一、scanf报错示例 二、解决使用scanf报错的方法 解决方法1&#xff08;不推荐&#xff09; 解决方法2&#xff08;不推荐&#xff09; 解决方法3&#xff08;强烈推荐&#xff09; 第一步 第二步 第三步 三、效果演示&#xff08;方法三&#xff09; …

Vue组件库 (一):Element常用组件

Element基于Vue2.0的桌面端组件库 组件&#xff1a;组成网页的部件。例如超链接、图片、按钮等。 一、环境配置 1、下载element 在vscode工程终端下下载。一定要注意&#xff1a;是在工程下安装&#xff01; npm install element -ui2.15.3 出现以下问题&#xff1a; 经判…

linux系统部署jenkins详细教程

一、Linux环境 1、下载war包 官网下载地址&#xff1a; https://get.jenkins.io/war-stable/2.332.4/jenkins.war 2、将war包上传至服务器 创建目录/home/ubuntu/jenkins 上传war包至该目录 3、将jenkins添加到环境变量 进入环境变量文件 vim /etc/profile # 文件下方追加…

Linux交叉编译opencv并移植ARM端

Linux交叉编译opencv并移植ARM端 - 知乎 一、安装交叉编译器 目标平台为arm7l&#xff0c;此为32位ARM架构&#xff0c;要安装合适的编译器 sudo apt install arm-linux-gnueabihf-gcc sudo apt install arm-linux-gnueabihf-g注意&#xff1a;64位ARM架构的编译器与32位ARM架…