最近准备用Java开发桌面软件,以前都是直接用awt,swing,现在准备入手一下JavaFX来开发桌面软件.
下载JavaFX(使用JDK7,8...可无视此步骤)
JavaFX在JDK7以及之后的版本集成(JDK自带了)
但是在Java11被抽离了出来,所以我们使用Java11和后面的版本的JDK都需要自行下载JavaFX.
如果嫌麻烦 可以通过我上传的资源进行下载:
进入官网: https://openjfx.io/
界面如下,往下滑
下面两个按钮分别对应下载,和下载源码(OpenJDK)
我们点击Download选择对应版本就可以下载了
下载完后解压 内容如下
在lib文件夹下就是我们使用的jar包了
在Eclipse中配置库
每次都要导入jar包显得格外麻烦,所以我们可以在Eclipse中将这些jar包添加成一个库
注: 本质上是拥有其余jar的引用,所以在别的电脑上进行开发也需要重新配置一下,否则提示库丢失等.
我们选择新建的 java 项目,右键 Properties(快捷键ALT+Enther),选择Java Build Path
选择User Library
我们需要新建一个库,选择UserLibrary
将文件夹lib内的jar全添加进库,使用Ctrl加选.
添加完后点击Apply and Close 然后将刚刚新建的库添加进项目,选择,点击finish
配置完成,我们接下来就可以在项目中使用javafx了
JavaFX代码
Hello World
现在,我们来实现一个简单的hello,world
首先,新建一个类,继承自Application(注意,是javafx的Application)
并且在这个类里面创建main方法,调用launch(args) 运行,传递的是main方法的参数
我们需要实现 start() 方法,start方法有一个参数,Stage类(javafx的顶级容器),可以让我们设置窗体大小,设置标题,设置场景等.
hello,world的代码如下,就几行,直接贴图
注意: 在Java9以上的则需要引入(requires)对应模块,并且导出此类所在模块(因为javafx要使用我们编写的这个类,所以需要导出 exports,并且在别的包中可能需要使用此包,所以要使用依赖导入 requires transitive)
运行结果如下
如果学过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();
}
运行结果
更多的其实就是API的使用了,可以参考官方的文档.