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,一经查实,立即删除!

相关文章

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…

Python接口自动化测试实战

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

四、Flask学习之JavaScript

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

山西电力市场日前价格预测【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 一、学习目标 二…

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

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

解决 Git:ssh: connect to host github.com port 22: Connection timed out 问题的三种方案

1、问题描述&#xff1a; 其一、整体提示为&#xff1a; ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repository. 中文为&#xff1a; ssh&#xff1a;连接到主机 github.com 端口 22&#xff1a;连接超时 fatal&a…

linux服务器ssh连接慢问题处理

一、 可能导致慢的几个原因 1、网络问题&#xff1a;网络延迟、带宽限制和包丢失等网络问题都有可能导致SSH连接变慢。 2、客户端设置&#xff1a;错误的客户端设置&#xff0c;如使用过高的加密算法或不适当的密钥设置&#xff0c;可能导致SSH连接变慢。 3、服务器负载过高…

使用docker容器 将node应用程序打包成镜像

可以使得node服务应用程序可以通过流水线部署 安装docker 1、注意 我的服务器的系统是 centos7&#xff0c;所以这里写的是在centos7上按照的docker 注意&#xff1a;Docker 要求 CentOS 系统的内容版本高于3.10 uname -r打印&#xff1a;3.10.0-1160.105.1.el7.x86_64 //确定…

leetcode刷题(剑指offer) 240.搜索二维矩阵Ⅱ

240.搜索二维矩阵Ⅱ 编写一个高效的算法来搜索 *m* x *n* 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,…

27.移除元素(力扣LeetCode)

文章目录 27.移除元素&#xff08;力扣LeetCode&#xff09;题目描述方法一&#xff1a;vector成员函数&#xff1a;erase方法二&#xff1a;暴力解法方法三&#xff1a;双指针法 27.移除元素&#xff08;力扣LeetCode&#xff09; 题目描述 给你一个数组 nums 和一个值 val&…

[每日一题] 01.24 - 求三角形

求三角形 n int(input()) count1 (1 n) * n // 2 count2 n * n lis1 [str(i).zfill(2) for i in range(1,count1 1)] lis2 [str(i).zfill(2) for i in range(1,count2 1)]for i in range(0,len(lis2),n):print(.join(lis2[i:i n]))print()for i in range(1,n 1):tem…

代码中遇到的问题

编译器错误消息&#xff1a; CS1061&#xff1a; default_aspx 不包含 GridView1_SelectedIndexChanged 的定义&#xff0c;并且找不到接受类型为default_aspx的第一个参数的可访问扩展方法GridView1_SelectedIndexChanged&#xff08;是否缺少 using 指令或程序集引用&#xf…

[笔记]Spring AOP

Spring AOP&#xff08;Aspect Oriented Programming&#xff09; AOP将应用程序分为核心业务和非核心的公共功能&#xff0c;AOP的关注点是系统中的非核心的公共功能&#xff1b; AOP可以通过预编译或者运行期动态代理的方式&#xff0c;为横跨多个对象&#xff08;没有继承关…

UCAS-AOD遥感旋转目标检测数据集——基于YOLOv8obb,map50已达96.7%

1.UCAS-AOD简介 1.1数据说明 遥感图像&#xff0c;又名高分辨率遥感图像。遥感图像的分类依据是根据成像的介质不同来进行分类的。UCAS-AOD (Zhu et al.&#xff0c;2015)用于飞机和汽车的检测&#xff0c;包含飞机与汽车2类样本以及一定数量的反例样本&#xff08;背景&…