JavaFx基础知识

news2024/7/7 17:07:14

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HQ-SAM

不建议复现

腾讯云COS分布式对象存储

腾讯云COS分布式对象存储 腾讯云对象存储&#xff08;Cloud Object Storage&#xff0c;COS&#xff09;是腾讯云提供的一种用于存储海量文件的分布式存储服务。 腾讯云 COS 适用于多种场景&#xff0c;如静态网站托管、大规模数据备份和归档、多媒体存储和处理、移动应用数据存…

电脑彻底删除的文件还能恢复吗怎么弄 电脑删除的文件怎么恢复 回收站也删了

实测可行的文件恢复方法&#xff0c;无论是彻底删除的文件&#xff0c;还是被清空的回收站文件&#xff0c;使用该方法都可以轻松找回。整个恢复过程操作简单&#xff0c;并且绝不会损伤电脑硬件。这意味着&#xff0c;您再也不用为误删文件而焦虑了。有关电脑彻底删除的文件还…

在windows上安装objection

安装命令pip install objection -i https://mirrors.aliyun.com/pypi/simple hook指定进程 objection -g 测试 explore 进程名不定是包名&#xff0c;也可能是app名字&#xff0c;如“测试”就是app的名字 若出现如下错误&#xff0c;说明python 缺少setuptools 直接安装setu…

编程语言中浅拷贝(Shallow Copy)和深拷贝(Deep Copy)

编程语言中浅拷贝&#xff08;Shallow Copy&#xff09;和深拷贝&#xff08;Deep Copy&#xff09; 编程语言中浅拷贝&#xff08;Shallow Copy&#xff09;和深拷贝&#xff08;Deep Copy&#xff09;概念及JavaScript、Python、C、Java深拷贝和浅拷贝情况介绍。 浅拷贝和深拷…

【Redis】三大Redis内存分析工具介绍(Redisinsight、RDR、RMA)

目录 一、RedisInsight工具介绍 1、工具概述 2、关键特性 3、版本与服务 4、实际应用 二、Redis Data Reveal工具介绍 1、简介 2、主要特性 3、使用方法 4、注意事项 5、总结 三、Redis Memory Analyzer (RMA)工具介绍 1、工具概述 2、技术特点 3、应用场景 4、…

day02-统计数据

numpy统计学 1.求平均值[数组名.mean()/np.mean(数组名)] m1 np.arange(20).reshape((4,5))m1.mean() #9.5若想要求某一维的平均值&#xff0c;设置axis参数&#xff0c;多维数组元素指定&#xff1a; axis 0&#xff0c;将从上往下计算。axis 1&#xff0c;将从左往右计算…

使用getline()从文件中读取一行字符串

我们知道&#xff0c;getline() 方法定义在 istream 类中&#xff0c;而 fstream 和 ifstream 类继承自 istream 类&#xff0c;因此 fstream 和 ifstream 的类对象可以调用 getline() 成员方法。 当文件流对象调用 getline() 方法时&#xff0c;该方法的功能就变成了从指定文件…

最新抖音极速版双红包雨掘金助手

项目介绍&#xff1a; 抖音极速版目前小说里有双红包雨&#xff0c;单广告2000&#xff0c;金币1万比1&#xff0c;脚本自动看广告 设备需求&#xff1a; 安卓手机&#xff08;最高支持安卓13.0版本&#xff09; 购买后包含月卡脚本详细使用教程 百度网盘 请输入提取码百度…

SpringMVC 的工作流程和详细解释

Spring MVC&#xff08;Model-View-Controller&#xff09;框架是基于经典的 MVC 设计模式构建的&#xff0c;用于开发 Web 应用程序。下面是 Spring Boot MVC 的工作流程和详细解释&#xff1a; 1.客户端发起请求 1.客户端&#xff08;通常是浏览器&#xff09;发起 HTTP 请求…

中序遍历的两种实现——二叉树专题复习

递归实现&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…

K8s 集群(kubeadm) CA 证书过期解决方案

Author&#xff1a;Arsen Date&#xff1a;2024/07/04 目录 一、现象描述二、解决方案三、集群验证 一、现象描述 之前有篇文章《K8s Token 过期解决方案&#xff08;Kubeadm&#xff09;》提到了默认生成的 Token 有效期只有 24 小时&#xff0c;过期后 Token 将不可用&#…

Robust Test-Time Adaptation in Dynamic Scenarios--论文阅读

论文笔记 资料 1.代码地址 https://github.com/BIT-DA/RoTTA 2.论文地址 https://arxiv.org/abs/2303.13899 3.数据集地址 coming soon 1论文摘要的翻译 测试时间自适应(TTA)旨在使预先7训练的模型适用于仅具有未标记测试数据流的测试分布。大多数以前的TTA方法已经在…

实现统计n个数以下质数的个数

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int main() {int n 0;scanf("%d", &n);int sum 0;for (int i 1; i < n; i){for (int j 2; j < i; j) {if (i % j 0){sum;break;}}}printf("%d", n - sum-1);return 0; } n为输…

数字媒体技术基础之:DNG 文件

DNG&#xff08;Digital Negative&#xff09;文件是一种用于存储原始图像数据的文件格式&#xff0c;由 Adobe Systems 于2004年开发并推广。DNG 是一种开放的、非专利的原始图像格式&#xff0c;旨在为不同相机制造商提供一个统一的存储格式。DNG 文件保存了原始的、未处理的…

【C语言】刷题笔记 Day2

【笔记】 【1】局部变量不初始化&#xff0c;默认放的随机值。 1 int n0; 2 scanf("%d",&n); //13.141 【2】这里虽然输入的是一个浮点数&#xff0c;但是只取整数部分。 【3】3.156e7 表示的是3.156*10的7次方。 【4】多组输入&#xff0c;保存和不保存…

Studying-代码随想录训练营day29| 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列

第29天&#xff0c;贪心part03&#xff0c;快过半了(ง •_•)ง&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 134.加油站 135. 分发糖果 860.柠檬水找零 406.根据身高重建队列 134.加油站 文档讲解&#xff1a;代码随想录加油站 视频讲解&#xff1a;手撕加油站…

2.2 ROS2话题通信

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

5个文章生成器免费版,自动写作文章更轻松

在这个信息如洪流般涌动的时代&#xff0c;写作所具有的重要性不言而喻。不管是学生需要完成的作业&#xff0c;还是职场人士得提交的报告&#xff0c;亦或是自媒体创作者必须输出的内容&#xff0c;都迫切要求我们具备一定的写作技能。然而&#xff0c;写作对很多人来说&#…

基于 STM32 的智能睡眠呼吸监测系统设计

本设计的硬件构成&#xff1a; STM32F103C8T6单片机最小系统板&#xff08;包含3.3V稳压电路时钟晶振电路复位电路&#xff08;上电自复位&#xff0c;手动复位&#xff09;&#xff09;&#xff0c;心率传感器、气压传感器、液晶显示、按键、蜂鸣器、LED灯、蓝牙模块组合而成…