JavaFx基础知识

1.Stage

舞台

 如此这样的一个框框,舞台只是这个框框,并不管里面的内容

    public void start(Stage primaryStage) throws Exception {
        primaryStage.setScene(new Scene(new Group()));
        primaryStage.getIcons().add(new Image("/icon/img.png"));  //更换舞台角标

//        primaryStage.setIconified(true);  //设置最小化
//        primaryStage.setMaximized(true);  //设置最大化
//        primaryStage.close();             //关闭
        
      primaryStage.setWidth(500);
      primaryStage.setHeight(500);          //舞台大小
      primaryStage.heightProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
                System.out.println("当前高度:" + t1.doubleValue());
            }
        });     //监听这个舞台的高度(可以通过这个,进行改变里面的控件的大小),宽度同理

//    primaryStage.setFullScreen(true);     //设置全屏(不同于最大化)
//    primaryStage.setResizable(false);     //固定舞台大小
      primaryStage.show();

模态... 

源代码:

package Test;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Test extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setScene(new Scene(new Group()));
        primaryStage.getIcons().add(new Image("/icon/img.png"));  //更换舞台角标

//        primaryStage.setIconified(true);  //设置最小化
//        primaryStage.setMaximized(true);  //设置最大化
//        primaryStage.close();             //关闭

        primaryStage.setWidth(500);
        primaryStage.setHeight(500);          //舞台大小

        primaryStage.heightProperty().addListener(new ChangeListener<Number>() {
            @Override
            public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
                System.out.println("当前高度:" + t1.doubleValue());
            }
        });
       // primaryStage.setResizable(false);     //固定舞台大小
       // primaryStage.setFullScreen(true);     //设置全屏
        primaryStage.initStyle(StageStyle.UNIFIED);//unified 没有详细的边框
        primaryStage.initStyle(StageStyle.DECORATED);//默认窗口

        primaryStage.setOpacity(0.5);           //透明
//        primaryStage.setAlwaysOnTop(true);      //窗口始终在最前
        primaryStage.show();

    }
}

2.scene

设置光标:

 public void start(Stage primaryStage) throws Exception {
        Scene scene = new Scene(new Group());
        scene.setCursor(Cursor.CLOSED_HAND);  //设置鼠标光标,(这里类型是手)
        primaryStage.setScene(scene);
        primaryStage.show();
    }

 打开网页

3.组件

      1.Botton

    public void start(Stage primaryStage) throws Exception {

        Group group = new Group();
        Scene scene = new Scene(group,720,480);

        Button button = new Button("按钮");
        button.setLayoutX(200);
        button.setLayoutY(200);
        button.setPrefHeight(200);   //按钮大小
        button.setPrefWidth(200);
        button.setFont(Font.font("sans-serif",40));  //按钮中的字体类型,大小
        //设置按钮格式
        BackgroundFill bgf = new BackgroundFill(Paint.valueOf("#C1FFC1"), new CornerRadii(20),new Insets(10)); //按钮环境填充的颜色,圆角,内边距
        Background bg = new Background(bgf);
        button.setBackground(bg);
        group.getChildren().add(button);

//        scene.setCursor(Cursor.CLOSED_HAND);  //设置鼠标光标
        primaryStage.setScene(scene);

        primaryStage.show();

效果:

 

 上面再添加下面代码

//设置边界
        BorderStroke bs = new BorderStroke(Paint.valueOf("#FFD700"),BorderStrokeStyle.SOLID,new CornerRadii(20),new BorderWidths(10));
        Border border = new Border(bs);
        button.setBorder(border);

 效果图:

 

 

 使用css样式

JavaFX CSS Reference Guide (oracle.com)

 button.setStyle("-fx-background-color: #C1FFC1;" +
                        "-fx-text-fill:red;"+
                        "-fx-background-radius:20;"


        );

如果写入这样的代码

效果图:

 按钮设置监听事件

 button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                Button b = (Button) event.getSource();   //监听事件可以获取这个按钮的信息
                System.out.println("按钮中的文本是:" +b.getText());  
            }
        });

鼠标监听,且是左键(可以通过点击事件,得到事件的信息

        button.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override

            public void handle(MouseEvent event) {
//                System.out.println(event.getButton().name());
                if(event.getClickCount() == 2 && event.getButton().name().equals(MouseButton.PRIMARY.name())){
                    System.out.println("左键双击");
                }
            }
        });

键盘监听

 button.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {
                System.out.println(event.getCode().name());
            }
        });

//注意,这里如果是中文输入法会undefined

 快捷键

(这里没进行深入了解,以后如果需要再来看)JavaFX视频教程第11课,设置快捷键_哔哩哔哩_bilibili

源代码:

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

        Group group = new Group();
        Scene scene = new Scene(group,720,480);

        Button button = new Button("按钮");
        button.setLayoutX(200);
        button.setLayoutY(200);
        button.setPrefHeight(200);   //按钮大小
        button.setPrefWidth(200);
        button.setFont(Font.font("sans-serif",40));  //按钮中的字体类型,大小
        //设置按钮格式
//        BackgroundFill bgf = new BackgroundFill(Paint.valueOf("#C1FFC1"), new CornerRadii(20),new Insets(10)); //按钮环境填充的颜色,圆角,内边距
//        Background bg = new Background(bgf);
//        button.setBackground(bg);
//        //设置边界
//        BorderStroke bs = new BorderStroke(Paint.valueOf("#FFD700"),BorderStrokeStyle.SOLID,new CornerRadii(20),new BorderWidths(10));  //颜色,边界线的类型(虚线...),圆角,线的宽度。
//        Border border = new Border(bs);
//        button.setBorder(border);


        button.setStyle("-fx-background-color: #C1FFC1;" +
                        "-fx-text-fill:red;"+
                        "-fx-background-radius:20;"


        );

//        button.setOnAction(new EventHandler<ActionEvent>() {
//            @Override
//            public void handle(ActionEvent event) {
//                Button b = (Button) event.getSource();   //监听事件可以获取这个按钮的信息
//                System.out.println("按钮中的文本是:" +b.getText());
//            }
//        });

        button.setOnMouseClicked(new EventHandler<MouseEvent>() {
            @Override

            public void handle(MouseEvent event) {
//                System.out.println(event.getButton().name());
                if(event.getClickCount() == 2 && event.getButton().name().equals(MouseButton.PRIMARY.name())){
                    System.out.println("左键双击");
                }
            }
        });

        button.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent event) {
                System.out.println(event.getCode().name());
            }
        });
        group.getChildren().add(button);

//        scene.setCursor(Cursor.CLOSED_HAND);  //设置鼠标光标
        primaryStage.setScene(scene);

        primaryStage.show();

2.输入框,密码框,标签

        1.TextField

文本框的提示,大小,字样(同控件button一样,可以使用css,或者直接进行编辑样式)

    public void start(Stage primaryStage) throws Exception {
        TextField textField = new TextField();
        TextField textField2 = new TextField();
        //提示
        Tooltip tip = new Tooltip("提示");
        tip.setStyle("-fx-font-size:15px;");

        textField.setTooltip(tip);
        textField.setLayoutX(200);
        textField.setLayoutY(200);
        textField2.setLayoutX(200);
        textField2.setLayoutY(250);

        textField.setPromptText("你好,世界");   //文本(并不是所有时候都显示,只能光标不在,文本框中内容为空时才展示
        textField.setFocusTraversable(false);  //起始时光标不会在文本框获得焦点
          textField.textProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
                    //监听输入的长度
                if(newValue.length() > 7){   //文本框中的字符不会大于7
                    textField.setText(oldValue);
                }
            }
        });


        Group gp = new Group();
        gp.getChildren().add(textField);
        gp.getChildren().add(textField2);
        Scene scene = new Scene(gp,720,480);
        primaryStage.setScene(scene);
        primaryStage.show();
 

这里如果要限制文本框中的输入个数,可以使用一个Property监听器,进行判断。(比如后面使用邮箱时,长度就可以使用这个)。

        2.PassWordField

        3.Label

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

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

相关文章

昇思25天学习打卡营第15天|ResNet50图像分类

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) ResNet50图像分类 图像分类是最基础的计算机视觉应用&#xff0c;属于有监督学习类别&#xff0c;如给定一张图像(猫、狗、飞机、汽车等等)&#xff0c;判断图像所属的类别。本章将介绍使用ResN…

更改Anki笔记所应用的模板及其所属的牌组

对于Anki中的笔记&#xff0c;录入时总会为它指定模板以及所属的牌组&#xff0c;但是&#xff0c;如果发生教材版本变更&#xff0c;我们可能会用新的模板添加笔记&#xff0c;也会使用新的牌组&#xff0c;但是原来所做的笔记中也有一些完全可以继续使用&#xff0c;如果可以…

超详细的 C++中的封装继承和多态的知识总结<1.封装与继承>

引言 小伙伴们都知道C面向对象难&#xff0c;可是大家都知道&#xff0c;这个才是C和C的真正区别的地方&#xff0c;也是C深受所有大厂喜爱的原因&#xff0c;它的原理更接近底层&#xff0c;它的逻辑更好&#xff0c;但是学习难度高&#xff0c;大家一定要坚持下来呀&#xff…

【实验室精选】PFA反应瓶带鼓泡球 高效气体鼓泡 化学分析优选

PFA反应瓶带鼓泡球是一种特殊设计的实验室容器&#xff0c;它集成了鼓泡球和PFA&#xff08;全氟烷氧基&#xff09;材料的反应瓶&#xff0c;用于气体的鼓泡和液体的混合。以下是它的一些特点和用途&#xff1a; 特点&#xff1a; 鼓泡球设计&#xff1a;鼓泡球周围布满小孔&…

Unity热更方案HybridCLR+YooAsset,纯c#开发热更,保姆级教程,从零开始

文章目录&#xff1a; 一、前言二、创建空工程三、接入HybridCLR四、接入YooAsset五、搭建本地资源服务器Nginx六、实战七、最后 一、前言 unity热更有很多方案&#xff0c;各种lua热更&#xff0c;ILRuntime等&#xff0c;这里介绍的是YooAssetHybridCLR的热更方案&#xff0…

60种AI工具用法 学会探索AI的无限可能

外面还在卖的课程&#xff0c;学会探索AI的无限可能&#xff0c;从构建精准的提示词到获取个性化新闻&#xff0c;从快速制作PPT到短视频内容的智能提炼&#xff0c;再到编程、股市分析和视频剪辑&#xff0c;AI工具助您工作学习效率飞跃提升&#xff01; 百度网盘 请输入提取…

Linux多进程和多线程(五)进程间通信-消息队列

多进程(五) 进程间通信 消息队列 ftok()函数创建消息队列 创建消息队列示例 msgctl 函数示例:在上⼀个示例的基础上&#xff0c;加上删除队列的代码 发送消息 示例: 接收消息示例 多进程(五) 进程间通信 消息队列 消息队列是一种进程间通信机制&#xff0c;它允许两个或多个…

单例模式详解:概念与实用技巧

目录 单例模式单例模式结构单例模式适用场景单例模式优缺点练手题目题目描述输入描述输出描述输入示例输出示例提示信息题解 单例模式 单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 只有一个实例的…

【深入理解Java虚拟机】判断垃圾-引用计数法及其缺陷

什么是引用计数法 引用计数法用来判断对象是否存活 给对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器的值加一&#xff1b;当引用失效时&#xff0c;计数器的值就减一&#xff0c;任何时刻计数器为0的对象是不可能在被使用的。&#xff08;存…

c++类模板及应用

文章目录 为什么要有函数模板一般实现举例类模板举例 继承中类模板的使用特殊情况 友元函数模板类和静态成员类模板实践 为什么要有函数模板 项目需求: 实现多个函数用来返回两个数的最大值&#xff0c;要求能支持char类型、int类型、double 一般实现举例 类模板举例 继承中类…

2.2 ROS2话题通信

场景 话题通信是ROS中使用频率最高的一种通信模式&#xff0c;话题通信是基于发布订阅模式的&#xff0c;也即&#xff1a;一个节点发布消息&#xff0c;另一个节点订阅该消息。话题通信的应用场景也极其广泛&#xff0c;比如如下场景&#xff1a; 机器人在执行导航功能&#…

肺炎-X光-图像分类数据集

肺炎-X光-图像分类数据集 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bt6tf-jHqgufKqPmCFHbrQ?pwdaj54 提取码&#xff1a;aj54 数据集信息介绍&#xff1a; 文件夹 健康 中的图片数量: 1575 文件夹 新冠肺炎 中的图片数量: 1728 文件夹 普通肺炎 中的…

AI:开发者的超级助手,而非取代者

AI&#xff1a;开发者的超级助手&#xff0c;而非取代者 引言 在这个日新月异的科技时代&#xff0c;人工智能&#xff08;AI&#xff09;已悄然渗透到我们生活的方方面面&#xff0c;尤其是在软件开发领域&#xff0c;它正以一种前所未有的方式改变着我们的工作方式。作为一名…

Redis 中的通用命令(命令的返回值、复杂度、注意事项及操作演示)

Redis 中的通用命令(高频率操作) 文章目录 Redis 中的通用命令(高频率操作)Redis 的数据类型redis-cli 命令Keys 命令Exists 命令Expire 命令Ttl 命令Type命令 Redis 的数据类型 Redis 支持多种数据类型&#xff0c;整体来说&#xff0c;Redis 是一个键值对结构的&#xff0c;…

《数据结构与算法基础 by王卓老师》学习笔记——2.5线性表的链式表示与实现1

1.链式表示 2.链表举例 3.链式存储的相关术语 4.三个讨论题

【软件测试】之自动化测试

&#x1f3c0;&#x1f3c0;&#x1f3c0;来都来了&#xff0c;不妨点个关注&#xff01; &#x1f3a7;&#x1f3a7;&#x1f3a7;博客主页&#xff1a;欢迎各位大佬! 文章目录 什么是自动化测试Selenium介绍什么是SeleniumSelenium的特点工作原理 SeleniumJava环境搭建下载…

数学建模------Matlab数据可视化

目录 1.plot函数 &#xff08;1&#xff09;函数介绍 &#xff08;2&#xff09;参数介绍 &#xff08;3&#xff09;图形美化 &#xff08;4&#xff09;背景更改 &#xff08;5&#xff09;多组绘制 &#xff08;6&#xff09;图形叠加 &#xff08;7&#xff09;添加…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 英文单词联想(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 https://app5938.acapp.acwing.com.cn/contest/2/problem/OD…

Flume集群部署(手把手部署图文详细版)

前景概要&#xff1a; Kafka消息订阅系统在大数据业务中有着重要运用&#xff0c;尤其在实时业务中&#xff0c;kafka是必不可少的组件之一。 Flume是大数据组件中重要的数据采集工具&#xff0c;我们常利用Flume采集各种数据源的数据供其他组件分析使用。例如在实时业务中&…