javaFX-使用gradle+jdk14创建javafx程序

Posted java技术大本营

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaFX-使用gradle+jdk14创建javafx程序相关的知识,希望对你有一定的参考价值。

在上一篇文章中,我们一起学习了jlink和jdk14的模块化. 在本篇文章中,我们一起来学习gradle来新建一个javafx的Hello World 程序.

本文中这段最重要

这段准备讲一下, 为什么要学习javafx, 小刀学这个, 是出于自己的兴趣,当时是公司用的k8s,但是想看日志啥的,还要先打开网页,登录阿里云,然后选对应的集群,然后找到对应的命名空间,然后找到对应的容器组,然后再点日志. 一个还好, 要是有两个以上的容器组,看日志就相当的麻烦了.

有什么问题,欢迎反馈给小刀~

环境准备

  • gradle 6.3及以上(因为6.3之后才开始支持jdk14)

  • openJDK14(上篇文章有小伙伴留言说jdk14商用不免费,我们这里特别声明了是openJDK14)

  • idea 社区版 2020.1及以上(其实社区版功能完全是够用的)

  • 小刀的微信交流群(一个人学哪行, 来, 这里有很多少伙伴陪你一起呢)

文件结构

和平常的gradle项目没有什么两样, 文件结构如下所示: 

这也是最简的javafx程序的结构,有一个fxml做页面布局,有一个Main函数,有一个Controller进行事件处理

主要代码

build.gradle

plugins { id 'application' id 'org.openjfx.javafxplugin' version '0.0.8'}// 定义使用的javafx的版本,可以自动下载依赖javafx { version = "14" modules = [ 'javafx.controls' ,'javafx.fxml']}// 定义jdk的版本,还有Mainclass的位置sourceCompatibility = '11'mainClassName = 'red.lixiang.tools.sunflower/red.lixiang.tools.sunflower.SunflowerMain'// 定义项目使用的编码compileJava.options.encoding = 'UTF-8'
// 定义项目需要的依赖,初始的时候为空dependencies {


}// 定义去下载依赖的仓库repositories{ mavenLocal() maven { url 'https://maven.aliyun.com/repository/public/' } maven { url 'https://maven.aliyun.com/repository/spring/'} mavenCentral()}

sunflower.fxml

<?import javafx.scene.control.Button?><?import javafx.scene.control.Label?><?import javafx.scene.layout.AnchorPane?><?import javafx.scene.layout.VBox?>

<AnchorPane fx:id="pane" prefHeight="640" prefWidth="480.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="red.lixiang.tools.sunflower.SunflowerController"> <children> <VBox layoutX="223.0" layoutY="640.0" prefHeight="640.0" prefWidth="480.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> <children> <Button fx:id="button" mnemonicParsing="false" text="button" /> <Label fx:id="label" text="texttext" visible="false" /> </children> </VBox> </children></AnchorPane>

SunflowerMain.java

/** * javaFX的程序必须要继承Application */public class SunflowerMain extends Application {
@Override public void start(Stage stage) { FXMLLoader fxmlLoader = new FXMLLoader(); // 加载fxml fxmlLoader.setLocation(getClass().getResource("/sunflower/sunflower.fxml")); fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory()); Parent root = null; try { root = fxmlLoader.load(); } catch (IOException e) { e.printStackTrace(); } // 设置显示的大小 Scene scene = new Scene(root, 640, 480); stage.setScene(scene); // 显示 stage.show(); } public static void main(String[] args) { launch(args); }}

SunflowerController.java

public class SunflowerController { // 和fxml文件上的控件是对应的 @FXML private Button button;
@FXML private Label label;
@FXML private ResourceBundle resources; public void initialize() { // 为按钮绑定事件 button.setOnAction(e -> { label.setText(resources.getString("label.text") + " " + System.getProperty("javafx.version")); label.setVisible(! label.isVisible()); }); }
}

启动效果

java的 module化的应用, 不在建议使用idea直接点main函数启动,最好是用gradle右侧面板的run任务来启动,如下图所示:

javaFX(二)-使用gradle+jdk14创建javafx程序运行效果如下所示: 

开源的代码



JAVAFX 系列文章



以上是关于javaFX-使用gradle+jdk14创建javafx程序的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ + Gradle + JavaFX 构建,但未运行

使用 JDK 11+ 运行 JavaFX 应用程序

JavaFX 不是 JDK 14 的一部分 [重复]

JavaFX应用程序无法启动(MacOS使用JDK11)

JavaFX 11:创建标签时出现 IllegalAccessError

使用 Gradle 在 Android 中构建 JavaFX 应用程序