JavaFX场景入门

目录

JAVAFX

jdk1.8以上引入javafx类库

JDK11+JAVAFX(eclipse)

小知识点

舞台Stage

platform、screen类

Scene场景类

查看电脑屏幕宽高

Group容器

JAVAFX项目

Image

javafx场景

javaFx文本

javaFX颜色


JAVAFX

jdk1.8以上引入javafx类库

JDK11+JAVAFX(eclipse)

方式一

方式二

直接引入

避免

另一种编写方式

小知识点

setHgrow或setVgrow、需要精确布局时,应重写layoutChildren()值摆放每一个子节点

setHgrow(hbox,Priority.ALWAYS);

javafx有4中控件来表示多项数据

ListView:列表

TreeView:树

TableView:表格

TreeTableView:多列列表

环境配置

舞台Stage

舞台(场景(布局(控件)))

JavaFX需要继承:javafx.application.AppLication

需要实现方法start

创建main方法 调用launch

需要stage调用show方法

stage.setOpacity(0.9);//设置透明度  0-1

//X,Y监听事件
    

stage.xProperty().addListener(new ChangeListener<Number>() {


        @Override

        public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {

           System.out.println("X窗口现在坐标:"+newValue);

           System.out.println("X窗口之前坐标:"+oldValue);

        }

     });

    

     stage.yProperty().addListener(new ChangeListener<Number>() {


        @Override

        public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {

           System.out.println("Y窗口现在坐标:"+newValue);

           System.out.println("Y窗口之前坐标:"+oldValue);

        }

     });



//创建多个窗口,设置模式

Stage s1 =new Stage();

     //s1.initStyle(StageStyle.TRANSPARENT);//透明的

     s1.initStyle(StageStyle.UNIFIED);

     s1.show();

    

    

     Stage s2 =new Stage();

     s2.setTitle("5");

     s2.initStyle(StageStyle.UTILITY);

     //s2.initStyle(StageStyle.UNDECORATED);//白色不带装饰

     s2.show();


// APPLICATION_MODAL设置初始化模态

S2关闭之后才能操作其他窗口

Stage s1 =new Stage();

     s1.setTitle("s1");

     s1.show();

    

    

     Stage s2 =new Stage();

     s2.initModality(Modality.APPLICATION_MODAL);

     s2.setTitle("s2");

     s2.show();


// WINDOW_MODAL设置初始化模态

Stage s1 =new Stage();

     s1.setTitle("s1");

    

     Stage s2 =new Stage();

     //s2.initModality(Modality.APPLICATION_MODAL);

     s2.setTitle("s2");

     //设置s2和s1关联

     s1.initOwner(s2);

    

     s1.initModality(Modality.WINDOW_MODAL);

    

     s2.show();

     s1.show();

    

案例:

import javafx.application.Application;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.control.Label;

import javafx.scene.control.TextField;

import javafx.scene.layout.HBox;

import javafx.scene.layout.VBox;

import javafx.scene.transform.Scale;

import javafx.stage.Stage;


public class javafx03tage extends Application {

    public  static  Stage stage;


    @Override

    public void start(Stage stage) throws Exception {

        //让舞台赋值给静态属性

        javafx03tage.stage =stage;


        stage.setTitle("小应用测试");

        //创建布局

        HBox hbox = new HBox();

        //创建控件

        TextField textField = new TextField();

        Button button = new Button("确定");

        button.setOnAction((e)->{

            String a = textField.getText();


            System.out.println("输入的内容为:"+a);

        });

        Button regist = new Button("注册");

        //写法1

//        regist.setOnAction((e)->{

//            regis();

//        });

//        写法2

        regist.setOnAction(e->javafx03tage.regis());

        //将控件加入布局

        hbox.getChildren().addAll(textField,button,regist);

//        hbox.getChildren().add(textField);

//        hbox.getChildren().add(button);

        //将布局加入场景

        Scene scene = new Scene(hbox,300,200);

        //将场景放入舞台

        stage.setScene(scene);

        stage.show();

    }

    public static void regis(){

        //创建垂直布局

        VBox vbox = new VBox();

        //创建控件

        TextField t1 = new TextField();

        TextField t2 = new TextField();

        Button b1 = new Button("注册");

        vbox.getChildren().addAll(t1,t2,b1);

        Scene scene = new Scene(vbox,300,200);

        javafx03tage.stage.setScene(scene);

    }

    public static void main(String[] args) {

        launch();

    }

}

platform、screen类

Platform类

public class platformcalss extends Application{

   public static void main(String[] args) {

     launch(args);

   }

   @Override

   public void start(Stage primaryStage) throws Exception {

     //设置为false,当窗口关闭,程序仍然运行,如要关闭则Platform.exit(); 若为true,窗口关闭,程序关闭

     //Platform.setImplicitExit(false);

     //是否支持3D效果

     boolean b = Platform.isSupported(ConditionalFeature.SCENE3D);

    

     Platform.runLater(new Runnable() {

        @Override

        public void run()

        {

           System.out.println("run方法里的线程名字:"+Thread.currentThread().getName());

           //可以在这里更新组件

        }

     });

   }

}

screen类

public class Screencalss extends Application{

   public static void main(String[] args) {

     launch(args);

   }

   @Override

   public void start(Stage primaryStage) throws Exception {

     //获取屏幕

     Screen screen = Screen.getPrimary();

     //获取屏幕全部宽度,高度

     Rectangle2D rec1= screen.getBounds();

     //获取可视范围的宽度,高度

     Rectangle2D rec2= screen.getVisualBounds();

     System.out.println(rec1.getWidth());

     System.out.println(rec2.getWidth());

     Platform.exit();

   }

}

Scene场景类

scene类电脑屏幕相关

查看电脑屏幕宽高
Screen primary = Screen.getPrimary();

        double dpi = primary.getDpi();

        System.out.println("当前屏幕dpi:"+dpi);

        Rectangle2D rec1 = primary.getBounds();

        Rectangle2D rec2 = primary.getVisualBounds();

        System.out.println("----全部屏幕--------");

        System.out.println("左上角x:"+rec1.getMinX()+"左上角y"+rec1.getMinY());

        System.out.println("右下角x--"+ rec1.getMaxX()+"右下角y--"+ rec1.getMaxY());

        System.out.println("宽度:"+rec1.getWidth()+"高度"+rec1.getHeight());

        System.out.println("----可以看到的屏幕--------");

        System.out.println("左上角x:"+rec2.getMinX()+"左上角y"+rec2.getMinY());

        System.out.println("右下角x--"+ rec2.getMaxX()+"右下角y--"+ rec2.getMaxY());


        System.out.println("宽度:"+rec2.getWidth()+"高度"+rec2.getHeight());

给button设置图标

scene.setCursor(Cursor.HAND);//手,箭头啥的

Cursor CROSSHAIR  光标十字光标

Cursor . DEFAULT 光标默认值

Cursor DISAPPEAR   光标消失

Cursor CLOSED_HAND 光标闭合手

Contextmenudemo 上下文菜单演示

Cursor E _ RESIZE 光标E _ RESIZE

自定义图标

       scene.setCursor(Cursor.cursor("img"));

从本地获取图片路径的方式

 URL url = getClass().getClassLoader().getResource("icon/icon.png");

        String oath = url.toExternalForm();

完整代码

   @Override

    public void start(Stage primaryStage) throws Exception{

        Button button = new Button("按钮");

        button.setPrefHeight(100);

        button.setPrefWidth(300);

        URL url = getClass().getClassLoader().getResource("icon/icon.png");

        String path = url.toExternalForm();

        Group group = new Group(button);

        Scene scene = new Scene(group);


         scene.setCursor(Cursor.cursor(path));

        primaryStage.setTitle("javafx");

        primaryStage.setHeight(800);

        primaryStage.setWidth(800);

        primaryStage.setScene(scene);

        primaryStage.show();



    }


打开网页,运行到代码就执行打开的操作


 HostServices hostServices = getHostServices();


        hostServices.showDocument("https://www.baidu.com/");


platform类的使用

Platform.runLater-队列线程按照顺序执行


   Platform.runLater(new Runnable() {

                @Override

                public void run() {

                    System.out.println("stop()"+Thread.currentThread().getName());

                }


            });


ImplicitExit(false) 后台运行


  Platform.setImplicitExit(false);// 设置这个之后呢不执行stop方法了


        Platform.exit();//关闭 

检测平台支支不支持什么效果

Platform.isSupported(ConditionalFeature.SCENE3D)//三d效果

public void start(Stage stage) throws Exception {

    stage.setTitle("SceneDemo");

    HBox hbox =new HBox();

    Button button =new Button("打开百度");

    hbox.getChildren().add(button);

    button.setOnAction((e)->{

        HostServices hostServices = getHostServices();

        hostServices.showDocument("https://www.baidu.com/");

    });

    Scene scene =new Scene(hbox,400,500);

    scene.setCursor(Cursor.CLOSED_HAND);//手

    stage.setScene(scene);

    stage.show();

}

Group容器

stage.setTitle("GroupDemo");

              Group group =new Group();

              Button button =new Button("按钮");

              button.setLayoutX(50);

              button.setLayoutY(50);

              group.getChildren().add(button);

              //看位置是否有子节点

              boolean is =group.contains(0, 0);

              System.out.println("位置是否有子节点:"+is);

              //将所有的子节点放置object[]

              Object[] o= group.getChildren().toArray();

              System.out.println("多少个子节点:"+o.length);

              for (Object object : o) {

                     System.out.println(object);

              }

             

              group.getChildren().addListener(new ListChangeListener<Node>() {


                     @Override

                     public void onChanged(Change<? extends Node> c) {

                            //元素个数(当删除或增加时触发监听器)

                            System.out.println("当前子控件数量:"+c.getList().size());

                     }

              });

             

              Scene scene =new Scene(group);

              scene.setCursor(Cursor.CLOSED_HAND);

JAVAFX项目

Main.java主项目

Application.css样式

Build.fxbuild用于程序的打包发布

Icons图标、Pane窗格、Platform平台、addEventFilter添加事件筛选器、getCharacter获取字符、PRESSED按下pressed、TYPE打字,

getCode获取代码,

案例:

import javafx.application.Application;

import javafx.application.Platform;

import javafx.scene.Scene;

import javafx.scene.control.Button;

import javafx.scene.image.Image;

import javafx.scene.image.ImageView;

import javafx.scene.input.KeyEvent;

import javafx.scene.layout.BorderPane;

import javafx.stage.Stage;


import java.io.FileInputStream;


public class javafx05stage extends Application {

    @Override

    public void start(Stage stage) throws Exception {

        stage.setTitle("整卷");

        FileInputStream fileInputStream = new FileInputStream("F:\\IDEADemo\\hello\\Snipaste_2022-10-12_20-03-32.jpg");

        Image image = new Image(fileInputStream);

        stage.getIcons().add(image);

//        HBox hbox = new HBox();

//        Button button = new Button("确定");

//        hbox.getChildren().add(button);

        stage.setWidth(600);

        stage.setHeight(500);

        BorderPane borderPane = new BorderPane();

        FileInputStream fileInputStream1 = new FileInputStream("F:\\IDEADemo\\hello\\src\\Snipaste_2022-10-17_17-14-25.jpg");

        Image image1 = new Image(fileInputStream1,200,200,true,true);

        ImageView imageView = new ImageView(image1);

        borderPane.getChildren().add(imageView);

        Scene scene = new Scene(borderPane,500,300);

        //舞台的风格必须带上场景

        //stage.initStyle(StageStyle.UNDECORATED);

        stage.setScene(scene);

        //舞台事件

        stage.setOnCloseRequest((e)->{

            System.out.println("系统被关闭了");

        });

        //舞台键盘事件

        //ADWS上下左右

        stage.addEventFilter(KeyEvent.KEY_TYPED, e->{

            if (e.getCharacter().equalsIgnoreCase("A")){

                imageView.setTranslateX(imageView.getTranslateX()-10);

            }

            if (e.getCharacter().equalsIgnoreCase("D")){

                imageView.setTranslateX(imageView.getTranslateX()+10);

            }

            if (e.getCharacter().equalsIgnoreCase("W")){

                imageView.setTranslateY(imageView.getTranslateY()-10);

            }

            if (e.getCharacter().equalsIgnoreCase("S")){

                imageView.setTranslateY(imageView.getTranslateY()+10);

            }

        });

        //键盘按下:

        stage.addEventHandler(KeyEvent.KEY_PRESSED, e->{

            //ESC按下ESC,退出程序

            System.out.println(e.getCode().impl_getCode());

           if (27 == e.getCode().impl_getCode()){

               Platform.exit();

           };

        });

        stage.show();

    }

    public static void main(String[] args) {

        launch();

    }

}

Image

本地和网络图片

New Image(“file:c:/image/11.jpg”)

New Image(“https://img0.baidu.com/it/u=4119073184,4077902618&fm=253&fmt=auto&app=138&f=JPEG?w=442&h=267”)

File f =new File(“c:/image/11.jpg”);

String url =f.toURL().toString();

资源图片

与clas放在一起

Image image =new Image(“包名/11.jpg”);

案例

public class Imagedemo extends Application {

    Image[] images ={new Image("cat.jpeg"),new Image("cat1.jpeg"),new Image("cat2.jpeg")};

    static  int i = 0;

    ImageView imageView=new ImageView(images[i]);


    @Override

    public void start(Stage stage) throws Exception {

        stage.setTitle("imagedemo");

        Button button =new Button("下一个");


        BorderPane borderPane =new BorderPane();


        button.setOnAction(new EventHandler<ActionEvent>() {

            @Override

            public void handle(ActionEvent event) {

                i++;

                if (i>2) i=0;

                imageView.setImage(images[i]);

            }

        });


        borderPane.setTop(button);

        borderPane.setCenter(imageView);

        Scene scene =new Scene(borderPane,1200,800);

        stage.setScene(scene);

        stage.show();

    }


    public static void main(String[] args) {

        launch();

    }

}

javafx场景

TextField文本字段、Cursor光标、imageView图像视图、addEventHandler添加事件处理程序、KeyEvent键盘事件、MouseEvent鼠标事件、

BorderPane布局

BorderPane布局顶部,底部,左,右或中心区域中的子节点。每个区域只能有一个节点。BorderPane的顶部和底部区域允许可调整大小的节点占用所有可用宽度。

左边界区域和右边界区域占据顶部和底部边界之间的可用垂直空间。

默认情况下,所有边界区域尊重子节点的首选宽度和高度。放置在顶部,底部,左侧,右侧和中心区域中的节点的默认对齐方式如下:

● 顶部: Pos.TOP_LEFT

● 底部: Pos.BOTTOM_LEFT

● 左侧: Pos.TOP_LEFT

● 右侧: Pos.TOP_RIGHT

● 中心: Pos.CENTER

案例:图片跟随鼠标移动

public class javafx06stage extends Application {

    @Override

    public void start(Stage stage) throws Exception {

        stage.setTitle("场景测试");

        FileInputStream fileInputStream = new FileInputStream("F:\\IDEADemo\\hello\\src\\Snipaste_2022-10-17_17-14-25.jpg");

        Image image = new Image(fileInputStream,200,200,true,true);

        ImageView imageView =new ImageView(image);

        imageView.setTranslateX(150);

        imageView.setTranslateY(100);

        //BorderPane布局

        BorderPane borderPane =new BorderPane();

        borderPane.getChildren().addAll(imageView);

        //HBox hbox = new HBox();

//        VBox vbox = new VBox(10);

//        vbox.getChildren().addAll(new TextField(),new TextField(),new Button("确定"));

        //场景

        Scene scene = new Scene(borderPane,600,400);

        //场景鼠标光标

        scene.setCursor(Cursor.OPEN_HAND);

        stage.setScene(scene);

        //舞台事件

        stage.addEventFilter(MouseEvent.MOUSE_MOVED, e->{

            imageView.setTranslateX(e.getX()-100);

            imageView.setTranslateY(e.getY()-100);

        });

        stage.show();

    }

    public static void main(String[] args) {

        launch();

    }

}

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

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

相关文章

通过Android Logcat分析firebase崩溃

参考&#xff1a;UnityIL2CPP包Crash闪退利用Android Logcat还原符号表堆栈日志 - 简书 一、安装Android Logcat插件 1、新建空白unity工程&#xff0c;打开PackageManager窗口&#xff0c;菜单栏Window/PackageManager 2、PackageManager中安装Android Logcat日志工具 3、安…

MODNet 剪枝再思考: 优化计算量的实验历程分享

目录 1 写在前面 2 模型分析 3 遇到问题 4 探索实验一 4.1 第一部分 4.2 第二部分 Error 1 Error 2 4.3 实验结果 ①参数量与计算量 ②模型大小 ③推理时延 5 探索实验二 5.1 LR Branch 5.2 HR Branch 5.2.1 初步分析 5.2.2 第一部分 enc2x 5.2.3 第二部分 en…

C++逆向分析--多态的本质

这篇我们延续上次的虚函数分析&#xff0c;来研究下多态的本质。 虚函数逆向分析的博客&#xff1a;C逆向分析--虚函数&#xff08;多态的前置&#xff09;-CSDN博客 有了上篇虚函数的知识&#xff0c;我们在正向开发学习的时候知道&#xff0c;多态的发生需要存在继承关系&a…

创意飞轮

创业初期最难的是确定好的创业方向&#xff0c;创意飞轮就是一种用来寻找、判断创业想法的心智模型。原文: The Ideation Flywheel 想出好的创业点子是很困难的&#xff0c;伟大的想法和完全糟糕的想法往往在一开始很难区分&#xff0c;糟糕的想法也许看起来会很诱人&#xff0…

深入探讨Python JSON库:兼容性与高级应用【第34篇—python:JSON库】

文章目录 深入探讨Python中的JSON处理技术引言官方json库进阶用法多说一句 第三方json库DemjsonOrjson Demjson库详解Orjson库的高级选项Python JSON库的兼容性考虑JSON类型映射兼容性处理解码时使用object_hook处理中文字符编码 多版本兼容 结语 深入探讨Python中的JSON处理技…

1.8 万 Star!这款 Nginx 可视化配置工具太强了

NginxConfig简介 Nginx Config 是一个强大的 Nginx 配置文件生成器&#xff0c;号称配置 Nginx 服务器所需的唯一工具。 正因为 Nginx 功能强大&#xff0c;所以针对其各个功能的配置项会显得特别多&#xff0c;对于我们来说要记住那么多配置是一件十分头疼的事&#xff0c;甚…

Springboot+vue的校园疫情防控系统(有报告),Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的校园疫情防控系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的校园疫情防控系统&#xff0c;采用M&#xff…

网络原理-初识(1)

目录 网络发展史 独立模式 网络互连 局域网LAN 广域网WAN 网络通信基础 IP地址 概念 格式 端口 概念 格式 认识协议 概念 作用 五元组 网络发展史 独立模式 独立模式:计算机之间相互独立; 网络互连 随着时代的发展,越来越需要计算机之间相互通信,共享软件和数…

【计算机网络】UDP协议与TCP协议

文章目录 一、端口号1.什么是端口号2.端口号范围划分3.认识知名端口号(Well-Know Port Number)4.netstat5.pidof 二、UDP协议1.UDP协议端格式2.UDP的特点3.面向数据报4.UDP的缓冲区5.UDP使用注意事项6.基于UDP的应用层协议 三、TCP协议1.TCP协议段格式1.1理解封装解包和分用1.2…

代码随想录算法训练营第14天 | 二叉树的前序、中序、后序遍历(递归+迭代法)

二叉树的理论基础&#xff1a;&#xff08;二叉树的种类&#xff0c;存储方式&#xff0c;遍历方式 以及二叉树的定义&#xff09; https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 二叉树的递归遍历 Leetcode对应的三道习…

使用骨传导耳机对人体有没有伤害?一文读懂骨传导耳机有什么危害?

不能说骨传导耳机对人体没有一点伤害&#xff0c;只能说骨传导耳机可以最大程度的减少对人体的伤害&#xff0c;首先就是骨传导耳机不用入耳&#xff0c;可以减少耳道内细菌的滋生&#xff0c;避免中耳炎等耳部疾病&#xff1b;其次就是骨传导的声音传播方式是通过骨骼直接进入…

Spring Boot 学习之——@SpringBootApplication注解(自动注解原理)

SpringBootApplication注解 springboot是基于spring的新型的轻量级框架&#xff0c;最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看&#xff0c;如何实现传奇的自动配置 SpringBootApplication//标注在某个类上&#xff0c;表示这个类是SpringBoot…

thinkphp5向数据表插入数据并且获得id

$id db(数据表名)->insertGetId([status>1]); 直接...打印$id就是这条插入的数据的id了

数据采集与预处理01: 项目1 数据采集与预处理准备

数据采集与预处理01&#xff1a; 项目1 数据采集与预处理准备 任务1 认识数据采集技术&#xff0c;熟悉数据采集平台 数据采集&#xff1a;足够的数据量是企业大数据战略建设的基础&#xff0c;因此数据采集成为大数据分析的前站。数据采集是大数据价值挖掘中重要的一环&#…

python-分享篇-养老金数据统计

代码 import matplotlib.pyplot as plt import numpy as np # 为柱状图添加标注 def label(bars):for bar in bars:height bar.get_height()plt.text(bar.get_x()bar.get_width()/2.- 0.2, 1.03*height, %s % int(height))plt.rcParams[font.sans-serif] [SimHei] # 显示中文…

【数据结构】 顺序表的基本操作 (C语言版)

一、顺序表 1、顺序表的定义&#xff1a; 线性表的顺序存储结构&#xff0c;即将表中的结点按逻辑顺序依次存放在一组地址连续的存储单元里。这种存储方式使得在逻辑结构上相邻的数据元素在物理存储上也是相邻的&#xff0c;可以通过数据元素的物理存储位置来反映其逻辑关系。…

基于Springboot的大学生心理健康管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的大学生心理健康管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体…

【吃灰开发板复活】DIY全志V3s随身终端屏幕适配,LVGL以及各种外设驱动移植教程

在上周的文章中介绍了一款因作者想要学习Linux而动手DIY的终端设备V3S-PI&#xff0c; 《梦回2004&#xff01;我用全志V3s做了个成本100元&#xff0c;功能媲美MP4的随身终端》&#xff1a;梦回2004&#xff01;我用全志V3s做了个成本100元&#xff0c;功能媲美MP4的随身终端…

微信小程序如何获取当前日期时间

Hello大家好&#xff01;我是咕噜铁蛋&#xff0c;获取当前日期时间是小程序中经常会用到的一个功能。因此&#xff0c;在本文中&#xff0c;我通过科技手段给大家收集整理了下&#xff0c;今天我将向大家介绍如何在微信小程序中获取当前日期时间的方法&#xff0c;并分享一些实…

HubSpot在线客户互动:建立强大数字连接的关键一步

HubSpot在线客户互动为企业带来了多方面的具体业务优势&#xff0c;其中一些关键点包括&#xff1a; 提高销售转化率&#xff1a; 通过实时在线聊天、个性化推荐等互动方式&#xff0c;HubSpot使企业能够更主动地接触潜在客户&#xff0c;解答其疑问&#xff0c;提供定制化的…