- 浏览: 2146119 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
首先声明,Java的GUI曾经是最弱的一环,毋庸置疑,而且历史上因为跟M$的斗争,导致Java失去了Desktop发展的最佳时间点,即便后来SUN&Oracle推出了JavaFX,Desktop市场整体也在走下坡路,挨踢世界已经转入移动互联网时代,Desktop已不再是市场的热点,所以JavaFX几乎不可能像Android&IOS火爆,对此Java&JavaFX程序猿们应该有一个清醒的认识,但是不管怎样,桌面端软件是全栈中不可忽视的一环,虽然不那么重要,但是不能少了它。
下面介绍一下JavaFX的几个特性,这些特性的特点就是上手极为简单,不需要投入多少时间,一个普通的Java程序猿就能上手开发JavaFX的应用。
特性一:绑定Binding
JavaFX新增了Property类,比如DoubleProperty,IntegerProperty etc.,而且所有控件都有Property,区别于普通的Java属性,比如int, double属性。区别在于Property属性可以绑定,在UI线程刷新控件的时候,会自动读取Property属性所绑定的对应属性的值,而不用用户实现并发更新等操作,这么说有些拗口,等下举个例子就明白了,先说特性二。
特性二:Group类
Group是一个Swing中所没有的容器,用过Swing的都知道,Swing的控件容器是各种Pane,which特别难用,新手很容易迷失在BorderPane还是FlowPane的教条使用中。说白了就是搞了半天还是不会用,鬼知道那些API是做啥用的,哥当年学Java的时候,就特别讨厌教程里面的Swing部分,造成的恶果就是工作之后再也不想碰Java的GUI,当然后来阴差阳错,还是去救了一阵的火,但并不改变我对Swing以及各种Pane的看法,两个字就是:难用。好在JavaFX提供给了我们一个新的选择Group。
Group就是一个可以通过坐标设置控件位置的容器,而且控件和控件之间可以重叠,比如我们把两个控件的layoutX以及layoutY坐标都设置为0,那么这两个控件都会在Group的左上角出现,同时会重叠,所以这就让我们在编程的时候,可以针对某一个控件做调整,是不是很方便呢?在Group里的控件,有以下四个属性需要了解,分别是layoutX,layoutY,width,height,分别是控件左上角的x坐标,y坐标,宽度和高度。都是Property属性,我们可以将其绑定到任意一个其他Property属性中去,是不是超级方便啊?下面说个例子,比如我们有两个按钮,button0和button1,我们想在屏幕右下角,也就是高2/3,宽2/3处显示我们的第一个按钮,同时要在左下角,也就是宽1/3,高2/3处显示第二个按钮,同时设置两个按钮的宽度为窗口宽度的10%,这种需求是不是看上去非常无理啊?但是用Group类和按钮的上述四个Property就可以超级容易滴实现这一点,代码如下:
嗯,这个是普通的Java类,带有一个main函数,在IDE中运行该main函数,之后就会看到:
嗯,按钮因为太窄了,所以上面的字变成了点点点,拖动将其拉宽:
诶,按钮的宽度始终是窗口宽度的10%哦,嗯,这样是不是很方便呢?
不过聪慧的你也许看到了,按钮主体并不在1/3和2/3处居中对齐,而是左上角的点位于该处,嗯,那该如何将按钮的中心点对准我们要的点呢?留作思考题,文章最后会给你答案。知道了这么好用的Group以及x,y,width和height四个属性,是不是所有控件的摆放都能被你轻松搞定呢?
下面继续说其他特性。
特性三:CSS支持
JavaFX还可以使用FXML来绘制控件的位置,类似于网页里面的HTML技术,都是ML(markup language置标语言)嘛,但是同时JavaFX还支持CSS哦,跟网页里面的CSS并无太多不同,只是在属性前面要加上-fx-前缀,这样我们就可以很容易滴邀请网页的美术人员帮我们来美化我们的控件啦。
同时我们需要一个工具,来告诉我们,各个控件的CSS属性都是啥,这就是伟大好用的Scenic View,打开你的JavaFX界面,同时打开Scenic View,后者就能显示出来每一个控件对应的CSS属性以及其他属性,是不是超级方便呢?
特性四:Lambda
这个其实是Java自身的特性,传统我们在Swing控件中写事件,我们需要用匿名内部类,但是现在可以用Lambda啦,用一个简单的匿名函数便可,例如我们想点击button0之后在控制台打出hello world:
一行搞定,是不是很舒服呢?当然这个Swing也能做得到。
特性五:Native Compiling
之前很多人在做Java程序的时候,都觉得提供给客户是一个大问题,因为要求客户装JRE,不太现实,现在好了,JavaFX提供了将jar和jre打包成DMG以及EXE这些针对某个平台绿色包装的功能,是不是超级方便呢?你可以把你的JavaFX程序直接打包成EXE或者DMG然后发给用Windows或者MacOSX的朋友或者客户,他们双击之后就可以运行了,而无需安装Java或者JRE或者JDK之类的鬼东西,是不是很爽呢?
好公布文中答案,直接减去按钮的宽度和高度的二分之一不就好了?
有了这些功能,你还需要Swing吗?
下面介绍一下JavaFX的几个特性,这些特性的特点就是上手极为简单,不需要投入多少时间,一个普通的Java程序猿就能上手开发JavaFX的应用。
特性一:绑定Binding
JavaFX新增了Property类,比如DoubleProperty,IntegerProperty etc.,而且所有控件都有Property,区别于普通的Java属性,比如int, double属性。区别在于Property属性可以绑定,在UI线程刷新控件的时候,会自动读取Property属性所绑定的对应属性的值,而不用用户实现并发更新等操作,这么说有些拗口,等下举个例子就明白了,先说特性二。
特性二:Group类
Group是一个Swing中所没有的容器,用过Swing的都知道,Swing的控件容器是各种Pane,which特别难用,新手很容易迷失在BorderPane还是FlowPane的教条使用中。说白了就是搞了半天还是不会用,鬼知道那些API是做啥用的,哥当年学Java的时候,就特别讨厌教程里面的Swing部分,造成的恶果就是工作之后再也不想碰Java的GUI,当然后来阴差阳错,还是去救了一阵的火,但并不改变我对Swing以及各种Pane的看法,两个字就是:难用。好在JavaFX提供给了我们一个新的选择Group。
Group就是一个可以通过坐标设置控件位置的容器,而且控件和控件之间可以重叠,比如我们把两个控件的layoutX以及layoutY坐标都设置为0,那么这两个控件都会在Group的左上角出现,同时会重叠,所以这就让我们在编程的时候,可以针对某一个控件做调整,是不是很方便呢?在Group里的控件,有以下四个属性需要了解,分别是layoutX,layoutY,width,height,分别是控件左上角的x坐标,y坐标,宽度和高度。都是Property属性,我们可以将其绑定到任意一个其他Property属性中去,是不是超级方便啊?下面说个例子,比如我们有两个按钮,button0和button1,我们想在屏幕右下角,也就是高2/3,宽2/3处显示我们的第一个按钮,同时要在左下角,也就是宽1/3,高2/3处显示第二个按钮,同时设置两个按钮的宽度为窗口宽度的10%,这种需求是不是看上去非常无理啊?但是用Group类和按钮的上述四个Property就可以超级容易滴实现这一点,代码如下:
import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Group; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception{ // Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); Stage stage = new Stage(); Group group = new Group(); stage.setTitle("Example"); stage.setScene(new Scene(group, 300, 275)); stage.show(); Button button0 = new Button("button0"); Button button1 = new Button("button1"); group.getChildren().addAll(button0,button1); //注意,高潮来了 button0.layoutXProperty().bind(stage.widthProperty().multiply(2).divide(3)); button0.layoutYProperty().bind(stage.heightProperty().multiply(2).divide(3)); button0.prefWidthProperty().bind(stage.widthProperty().multiply(.1)); button1.layoutXProperty().bind(stage.widthProperty().multiply(1).divide(3)); button1.layoutYProperty().bind(stage.heightProperty().multiply(2).divide(3)); button1.prefWidthProperty().bind(stage.widthProperty().multiply(.1)); } public static void main(String[] args) { launch(args); } }
嗯,这个是普通的Java类,带有一个main函数,在IDE中运行该main函数,之后就会看到:
嗯,按钮因为太窄了,所以上面的字变成了点点点,拖动将其拉宽:
诶,按钮的宽度始终是窗口宽度的10%哦,嗯,这样是不是很方便呢?
不过聪慧的你也许看到了,按钮主体并不在1/3和2/3处居中对齐,而是左上角的点位于该处,嗯,那该如何将按钮的中心点对准我们要的点呢?留作思考题,文章最后会给你答案。知道了这么好用的Group以及x,y,width和height四个属性,是不是所有控件的摆放都能被你轻松搞定呢?
下面继续说其他特性。
特性三:CSS支持
JavaFX还可以使用FXML来绘制控件的位置,类似于网页里面的HTML技术,都是ML(markup language置标语言)嘛,但是同时JavaFX还支持CSS哦,跟网页里面的CSS并无太多不同,只是在属性前面要加上-fx-前缀,这样我们就可以很容易滴邀请网页的美术人员帮我们来美化我们的控件啦。
同时我们需要一个工具,来告诉我们,各个控件的CSS属性都是啥,这就是伟大好用的Scenic View,打开你的JavaFX界面,同时打开Scenic View,后者就能显示出来每一个控件对应的CSS属性以及其他属性,是不是超级方便呢?
特性四:Lambda
这个其实是Java自身的特性,传统我们在Swing控件中写事件,我们需要用匿名内部类,但是现在可以用Lambda啦,用一个简单的匿名函数便可,例如我们想点击button0之后在控制台打出hello world:
button0.setOnMouseClicked(value -> System.out.println("hello world"));
一行搞定,是不是很舒服呢?当然这个Swing也能做得到。
特性五:Native Compiling
之前很多人在做Java程序的时候,都觉得提供给客户是一个大问题,因为要求客户装JRE,不太现实,现在好了,JavaFX提供了将jar和jre打包成DMG以及EXE这些针对某个平台绿色包装的功能,是不是超级方便呢?你可以把你的JavaFX程序直接打包成EXE或者DMG然后发给用Windows或者MacOSX的朋友或者客户,他们双击之后就可以运行了,而无需安装Java或者JRE或者JDK之类的鬼东西,是不是很爽呢?
好公布文中答案,直接减去按钮的宽度和高度的二分之一不就好了?
button0.layoutXProperty().bind(stage.widthProperty().multiply(2).divide(3).subtract(button0.widthProperty().divide(2))); button0.layoutYProperty().bind(stage.heightProperty().multiply(2).divide(3).subtract(button0.heightProperty().divide(2))); button0.prefWidthProperty().bind(stage.widthProperty().multiply(.1)); button1.layoutXProperty().bind(stage.widthProperty().multiply(1).divide(3).subtract(button1.widthProperty().divide(2))); button1.layoutYProperty().bind(stage.heightProperty().multiply(2).divide(3).subtract(button1.heightProperty().divide(2))); button1.prefWidthProperty().bind(stage.widthProperty().multiply(.1));
有了这些功能,你还需要Swing吗?
发表评论
-
小程序textarea完美填坑
2020-07-07 16:09 461相信做微信小程序的码友们都被textarea这个原生组件坑过 ... -
Nginx+Https自己敲命令生成证书
2020-05-18 09:35 899一、准备 环境:centos6.8 ... -
https证书生成环境搭建配置(基于Tomcat和Nginx)
2020-04-24 11:06 781一、基于Tomcat、JDK内置密钥工具: 1、生成服务端证 ... -
史上最强Tomcat8性能优化
2019-11-01 21:41 731授人以鱼不如授人以渔 ... -
SpringBoot配置HTTPS,并实现HTTP访问自动转HTTPS访问
2019-10-07 09:13 5191.使用jdk自带的 keytools 创建证书 打开cmd ... -
Spring Boot工程集成全局唯一ID生成器 UidGenerator
2019-09-16 09:04 809概述 流水号生成器(全局唯一 ID生成器)是服务化系统的基础 ... -
CentOS7下Redis的安装与使用
2019-08-17 11:45 556一、手动安装过程 1、准备工作(安装gcc依赖) yum ... -
Nginx与tomcat组合的简单使用
2019-08-17 10:05 367配置tomcat跳转 请求http出现400的时候在这里配置 ... -
linux下lvs+keepalived安装配置
2019-07-10 14:20 432keepalived主机:192.168.174. ... -
使用Docker搭建Tomcat运行环境
2019-02-08 21:32 4461 准备宿主系统 准备一 ... -
Netty笔记-GlobalEventExecutor
2019-02-06 23:00 5791.概念 /** * Single-thread si ... -
Netty4转发服务的实现方案
2019-02-06 15:03 1040如果用Netty做转发服务(不需要同步应答),Netty中有一 ... -
java手机号归属地查询
2018-12-25 17:16 703所需的包:carrier-1.75.jar 、geocoder ... -
基于Netty4的HttpServer和HttpClient的简单实现
2018-10-17 20:02 626Http 消息格式: Http request: Met ... -
javafx : 支持使用微调(spinner)控制的数字的文本框(NemberTextField)
2018-10-16 00:00 994最近花了一些时间学习javaFX, 要更深入地理解新GUI包, ... -
我的Java(定制你的Java/JavaFX Runtime)
2018-10-12 23:29 631最新的JDK 11发布了,撒花 新版本的JDK终于有了ope ... -
mac os系统用install4j把jar包生成app
2018-10-05 23:02 1353install4j有windows版也有mac版 mac电脑 ... -
JavaFX Alert对话框
2018-10-05 22:01 22431. 标准对话框 消息对话框 Alert alert = ... -
IDEA Properties中文unicode转码问题
2017-02-17 19:54 929摘要: 如何让IDEA的properties中的中文进行uni ... -
spring 3中新增的@value注解
2016-11-01 09:32 599在spring 3.0中,可以通过使用@value,对一些如x ...
相关推荐
JAVAFX的贪吃蛇以及可以用Swing打开的JAVAFX的贪吃蛇
JavaFX Script 语言教程(面向Swing 程序员).rar JavaFX Script 语言教程(面向Swing 程序员).rar
JavaFX Script 语言教程(面向Swing 程序员).pdf
JavaFX Script 语言教程(面向Swing程序员) javafx_script.rarJavaFX Script 语言教程(面向Swing程序员) javafx_script.rarJavaFX Script 语言教程(面向Swing程序员) javafx_script.rar
JavaFX Script? (下文中称为JavaFX)语言是一种声明式的静态类型编程语言。它具有第一级函数(first-class functions)、声明式的...JavaFX 脚本式语言特别适用于Java2D swing GUI 组件,它能够简单地创建图形界面。
基于SWING+JAVAFX实现的JAVA MP3播放器
Jim Weaver:JDK 8中的JavaFX新特性,示例代码
javafx
javafx2.0 最新官方教程 javafx2.0 最新官方教程
* 项目名:Java课程设计——饭卡管理系统(JavaSwing、JavaFX、MySQL) * @author :第四维度 * 创建时间:2021-6-21 * 采用JavaSwing、JavaFX设计UI界面,结合MySQL数据库进行增删改查操作,功能较为完善 * 包含...
Java8新特性之JavaFX 8_动力节点Java学院,动力节点口口相传的Java黄埔军校
javafx 植物大战僵尸,javafx2.2做的,类swing样式
JAVAFX新手案例包,ui案例,很详细兼容NetBeans IDE ,eclipse
JavaFX是开发Java GUI程序的新框架,取代了Swing和AWT, 用于开发富英特网应用 AWT可以开发简单的用户界面,但不适合开发综合的GUI项 目,AWT容易被特定的平台错误影响 Swing组件使用Java代码在画布上直接绘制,更少...
NULL 博文链接:https://weiyongqing.iteye.com/blog/1220470
javafx的最新发布版本的最新API文档,包含目前新增所有包的信息!希望支持java!
JavaFX教程;JavaFX教程;JavaFX教程JavaFX教程;