最近准备用Java开发桌面软件,以前都是直接用awt,swing,现在准备入手一下JavaFX来开发桌面软件.


下载JavaFX(使用JDK7,8...可无视此步骤)

JavaFX在JDK7以及之后的版本集成(JDK自带了)

但是在Java11被抽离了出来,所以我们使用Java11和后面的版本的JDK都需要自行下载JavaFX.

如果嫌麻烦 可以通过我上传的资源进行下载: 

进入官网: https://openjfx.io/

界面如下,往下滑

桌面小程序java开发 java 开发桌面应用_eclipse

下面两个按钮分别对应下载,和下载源码(OpenJDK)

我们点击Download选择对应版本就可以下载了

桌面小程序java开发 java 开发桌面应用_javafx_02

 下载完后解压 内容如下

桌面小程序java开发 java 开发桌面应用_javafx_03

在lib文件夹下就是我们使用的jar包了

在Eclipse中配置库

每次都要导入jar包显得格外麻烦,所以我们可以在Eclipse中将这些jar包添加成一个库

注: 本质上是拥有其余jar的引用,所以在别的电脑上进行开发也需要重新配置一下,否则提示库丢失等.

我们选择新建的 java 项目,右键 Properties(快捷键ALT+Enther),选择Java Build Path

桌面小程序java开发 java 开发桌面应用_jdk_04

选择User Library

桌面小程序java开发 java 开发桌面应用_eclipse_05

我们需要新建一个库,选择UserLibrary

桌面小程序java开发 java 开发桌面应用_eclipse_06

桌面小程序java开发 java 开发桌面应用_桌面小程序java开发_07

桌面小程序java开发 java 开发桌面应用_java_08

将文件夹lib内的jar全添加进库,使用Ctrl加选.

桌面小程序java开发 java 开发桌面应用_eclipse_09

桌面小程序java开发 java 开发桌面应用_java_10

添加完后点击Apply and Close 然后将刚刚新建的库添加进项目,选择,点击finish

桌面小程序java开发 java 开发桌面应用_eclipse_11

配置完成,我们接下来就可以在项目中使用javafx了

桌面小程序java开发 java 开发桌面应用_javafx_12

JavaFX代码

Hello World

现在,我们来实现一个简单的hello,world

首先,新建一个类,继承自Application(注意,是javafx的Application)

并且在这个类里面创建main方法,调用launch(args) 运行,传递的是main方法的参数

我们需要实现 start() 方法,start方法有一个参数,Stage类(javafx的顶级容器),可以让我们设置窗体大小,设置标题,设置场景等.

hello,world的代码如下,就几行,直接贴图

桌面小程序java开发 java 开发桌面应用_eclipse_13

注意: 在Java9以上的则需要引入(requires)对应模块,并且导出此类所在模块(因为javafx要使用我们编写的这个类,所以需要导出 exports,并且在别的包中可能需要使用此包,所以要使用依赖导入 requires transitive)

桌面小程序java开发 java 开发桌面应用_javafx_14

运行结果如下

桌面小程序java开发 java 开发桌面应用_javafx_15

桌面小程序java开发 java 开发桌面应用_javafx_16

如果学过swing的就知道,我们关闭窗体并不会真的关闭(程序还在后台运行),但是在javafx中关闭后就自动给你关闭了.

点击按钮显示界面

我们需要用到按钮(Button),并且点击按钮才会显示之前的界面 hello, world

实现思路很简单,我们没有设置布局,所以后面添加进窗体的会覆盖前面的.

也就是我们点击按钮其实是将按钮从容器中删除(删除后就不覆盖之前的标签了)

代码如下

@Override
	public void start(Stage primaryStage) throws Exception {
		//设置标题
		primaryStage.setTitle("shendi test javafx");
		//创建标签 使用的都是 javafx 下的类
		Label helloLabel = new Label("hello, world");
		//创建按钮
		Button helloButton = new Button("点我弹出显示欢迎");
		//创建面板 构造方法有两个重载,一个为无参数,一个为可变参数 传递要添加的子节点
		StackPane pane = new StackPane(helloLabel);
		//获取面板的子类集合(继承自List)直接添加组件
		pane.getChildren().add(helloButton);
		//创建场景 后面两个参数为宽高,也可以不设置(运行起来会怪怪的)
		Scene scene = new Scene(pane,200,100);
		//设置场景
		primaryStage.setScene(scene);
		
		/* 给按钮添加活动事件 这里传递的是一个EventHandler
		 * 可以自己继承此类实现 然后这里传递this,也可以使用外部类继承 这里使用那个类的对象.也可以使用匿名类
		 * 这里使用的匿名类
		 */
		helloButton.setOnAction(new EventHandler<ActionEvent>() {
			@Override
			public void handle(ActionEvent event) {
				//当按钮被点击就会执行这里
				//我们需要显示欢迎,欢迎本来是有的,不过被遮住了,所以我们移除掉按钮就可以了.
				pane.getChildren().remove(helloButton);
			}
		});
		
		//显示窗体
		primaryStage.show();
	}

运行结果

桌面小程序java开发 java 开发桌面应用_javafx_17

桌面小程序java开发 java 开发桌面应用_java_18

更多的其实就是API的使用了,可以参考官方的文档.