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>() {@Overridepublic 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>() {@Overridepublic 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;@Overridepublic 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();//        });//        写法2regist.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);}@Overridepublic void start(Stage primaryStage) throws Exception {//设置为false,当窗口关闭,程序仍然运行,如要关闭则Platform.exit(); 若为true,窗口关闭,程序关闭//Platform.setImplicitExit(false);//是否支持3D效果boolean b = Platform.isSupported(ConditionalFeature.SCENE3D);Platform.runLater(new Runnable() {@Overridepublic void run(){System.out.println("run方法里的线程名字:"+Thread.currentThread().getName());//可以在这里更新组件}});}}

screen类

public class Screencalss extends Application{public static void main(String[] args) {launch(args);}@Overridepublic 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();

完整代码

   @Overridepublic 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() {@Overridepublic 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>() {@Overridepublic 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 {@Overridepublic 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]);@Overridepublic void start(Stage stage) throws Exception {stage.setTitle("imagedemo");Button button =new Button("下一个");BorderPane borderPane =new BorderPane();button.setOnAction(new EventHandler<ActionEvent>() {@Overridepublic 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 {@Overridepublic 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.mzph.cn/news/645028.shtml

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

相关文章

gin参数验证

1. 结构体验证 用gin框架的数据验证&#xff0c;可以不用解析数据&#xff0c;减少if else&#xff0c;会简洁许多。 package mainimport ("fmt""time""github.com/gin-gonic/gin" )//Person .. type Person struct {//不能为空并且大于10Age …

Flowable使用docker中MySQL8,Springboot启动出错

目录 问题复现原因分析解决办法修改MYSQL大小写敏感配置问题小结docker的优点&#xff1a; 问题复现 最近在将项目迁至docker环境时&#xff0c;出现启动时失败&#xff0c;报错信息如下&#xff1a; Caused by: org.springframework.beans.factory.BeanCreationException: …

threejs学习

重要概念&#xff08;场景、相机、渲染器&#xff09; 如下图所示&#xff0c;我们最终看到浏览器上生成的内容是通过虚拟场景和虚拟相机被渲染器渲染后的结果&#xff0c;下面首先介绍这三个概念&#xff0c;将贯穿所有简单复杂的threejs项目。 场景 Scene 虚拟的3D场景&a…

扫码登录流程

扫码登录 场景 在网页版qq邮箱&#xff0c;微信登录账号等时候&#xff0c;无需输入账号和密码&#xff0c;只需要在手机上扫码即可完成登录 登录分析 扫码登录涉及3种角色&#xff1a; PC端&#xff0c; 手机端&#xff0c; 服务端 涉及围绕这三端进行&#xff0c;每一端…

代码随想录算法训练营第四十二天|01背包问题、01背包问题(滚动数组)、416. 分割等和子集

题目&#xff1a;01背包问题 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:背包问题 题目链接&#xff1a;卡码题目链接 图释&#xff1a; //二维dp数组实现 #include <bits/stdc.h> using namespace std;int n, bagweight;// bagweight代表行李箱空…

打 jar 包运行 在windows 平台控制台和日志 乱码解决

--拒絕鷄巴囉嗦&#xff0c;直接解決問題 我们在Windows下运行jar包时&#xff0c;常常会出现乱码&#xff0c;主要分为dos窗口输出的日志中出现乱码和程序返回数据出现乱码。 dos窗口输出的日志中出现乱码 执行如下命令&#xff0c;将控制台输出编码改为UTF8&#xff1a; ch…

Spring-集成Junit

一、引子 我们在Spring概念中提到&#xff1a;Spring的一大优势在于可以集成众多优秀的框架。毫无疑问&#xff0c;我首先向读者推荐的就是Junti框架。因为我们在前期的学习中&#xff0c;写一些小的demo&#xff0c;用Junit来进行小测试是非常合适的。下面让我们来具体看看如…

Python接口自动化测试实战

接口自动化测试是指通过编写程序来模拟用户的行为&#xff0c;对接口进行自动化测试。Python是一种流行的编程语言&#xff0c;它在接口自动化测试中得到了广泛应用。下面详细介绍Python接口自动化测试实战。 1、接口自动化测试框架 在Python接口自动化测试中&#xff0c;我们…

四、Flask学习之JavaScript

四、Flask学习之JavaScript JavaScript&#xff0c;作为一种前端脚本语言&#xff0c;赋予网页生动的交互性和动态性。通过它&#xff0c;开发者能够操作DOM&#xff08;文档对象模型&#xff09;实现页面元素的动态改变、响应用户事件&#xff0c;并借助AJAX技术实现异步数据…

scrapy pipelines

1.时间的处理 获取当前时间的字符串 # 创建一个datetime对象并设置为当前时间&#xff0c;该时间少8小时 dt datetime.datetime.now() # 将datetime转换为本地时区 local_tz pytz.timezone(Asia/Shanghai) local_dt local_tz.localize(dt) # 将datetime对象格式化为ISO 86…

Acwing787归并排序 788逆序对数量

theme: channing-cyan 归并排序 归并排序是一种分治算法&#xff0c;将待排序的数组递归地分成两半&#xff0c;分别排序&#xff0c;然后将两个有序的子数组归并成一个有序数组。将数组不断地二分&#xff0c;直到子数组的长度为1时&#xff0c;认为其有序。然后将相邻的两个…

MySQL Interview Speedrun

MySQL Interview Speedrun mysql如何定位慢查询 开启mysql的慢查询日志功能&#xff0c;默认超过2秒的sql语句会被记录到慢查询日志里。或者使用运维监测工具skywalking工具&#xff0c;它可以监测服务、接口和物理实例&#xff0c;可以通过它来知道哪个接口的sql执行速度比较慢…

数论 | 质数

文章目录 质数的判定&#xff1a;试除法分解质因数&#xff1a;试除法筛质数朴素做法优化&#xff1a;埃氏筛法优化&#xff1a;线性筛法 质数的判定&#xff1a;试除法 不推荐i*i<n而推荐i<n/i的原因 可能存在i*i不溢出&#xff0c;但是(i1)(i1)溢出的情况 #include &l…

山西电力市场日前价格预测【2024-01-25】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-25&#xff09;山西电力市场全天平均日前电价为274.83元/MWh。其中&#xff0c;最高日前电价为562.65元/MWh&#xff0c;预计出现在18:15。最低日前电价为0.00元/MWh&#xff0c;预计出…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第 2章感知机

文章目录 第 2章感知机2.1 感知机模型2.2 感知机学习策略2.2.1 数据集的线性可分性2.2.2 感知机学习策略 2.3 感知机学习算法2.3.1 感知机学习算法的原始形式2.3.2 算法的收敛性2.3.3 感知机学习算法的对偶形式 实践&#xff1a;二分类模型&#xff08;iris数据集&#xff09;数…

vue3-深入组件-组件注册和props更多细节

组件注册 定义好的组件需要注册才能被使用。 注册方式有两种 全局注册 局部注册 全局注册 .component() 方法&#xff0c;让组件在当前 Vue 应用中全局可用。 在 main.ts 中 import ./assets/main.cssimport { createApp } from vue import { createPinia } from pinia i…

Nodejs前端学习Day1

妈的&#xff0c;学vue3需要15.0以上的nodejs 文章目录 前言一、学习目标二、学习目录三、为什么JavaScript可以在浏览器中被执行四、为什么JavaScript可以操作DOM和BOM五、浏览器中的JavaScript运行环境总结 前言 妈的&#xff0c;学vue3需要15.0以上的nodejs 一、学习目标 二…

golang导入go-git错误记录

代码&#xff1a; package mainimport (...(略)"github.com/src-d/go-git"...(略) )...(略)func gitClone(workspace, url, referenceName string, auth ssh.AuthMethod) (*git.Repository, error) {return git.PlainClone(workspace, false,&git.CloneOptions{…

javascript设计模式-观察者和命令

观察者 是一种管理人与任务之间的关系的得力工具&#xff0c;实质就是你可以对程序中某个对象的状态进行观察&#xff0c;并且在其发生改变时能够得到通知。一般有两种实现方式推或拉&#xff0c;在这个过程中各方的职责如下&#xff1a; 订阅者可以订阅和退订&#xff0c;他…

递归和尾递归(用C语言解斐波那契和阶乘问题)

很多人都对递归有了解&#xff0c;但是为尾递归很少&#xff0c;所以这次来专门讲一讲关于尾递归的一些问题。 什么是尾递归 如果一个函数中所有递归形式的调用都出现在函数的末尾&#xff0c;我们称这个递归函数是尾递归的。因为在一些题目的做法中&#xff0c;我们可以发现…