javaFX(二)-使用gradle+jdk14創建javafx程序

2021-03-02 java技術大本營

在上一篇文章中,我們一起學習了jlink和jdk14的模塊化. 在本篇文章中,我們一起來學習gradle來新建一個javafx的Hello World 程序.

本文中這段最重要

這段準備講一下, 為什麼要學習javafx, 小刀學這個, 是出於自己的興趣,當時是公司用的k8s,但是想看日誌啥的,還要先打開網頁,登錄阿里雲,然後選對應的集群,然後找到對應的命名空間,然後找到對應的容器組,然後再點日誌. 一個還好, 要是有兩個以上的容器組,看日誌就相當的麻煩了.


然後我就做了這個可以直接查看k8s日誌的東東. 寫著寫著, 就想,其實可以把改host, 連redis,連資料庫這些簡單的小功能都做一起. 然後做著做著,就有了小刀平時在朋友圈發的工具. 然後現在陸陸續續寫了幾個月了, 自我感覺對javaFX的一些常用的方法和坑都踩了一些,所以開始更新javaFX系列. 希望能對大家有所幫助 工具包下載地址: https://download.lixiang.red/sunflower/current/ 

有什麼問題,歡迎反饋給小刀~

環境準備

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 {  version = "14"  modules = [ 'javafx.controls' ,'javafx.fxml']}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
public class SunflowerMain extends Application {
@Override public void start(Stage stage) { FXMLLoader fxmlLoader = new FXMLLoader(); 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    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任務來啟動,如下圖所示:

運行效果如下所示: 

開源的代碼

其實我一直不想在文章中寫很多的代碼,平常小刀在朋友圈發的那個工具,已經開源, 而且也有小夥伴下載下來成功運行了, 所以,,,不要糾結上面的代碼,,可以直接下載這個就行 https://github.com/xiaodaojava/sunflower-free

JAVAFX 系列文章

JAVAFX(一) java Module 模塊化簡介

相關焦點

  • JavaFX對Java開發者到底意味著什麼
    JavaFX腳本為多種多樣的操作提供了聲明式、無中間程序邏輯的語法,這些操作包括創建2D動畫、設置屬性或者聲明在模式和視圖對象之間的綁定依賴關係。JavaFX的優點之一是它能夠將JavaFX應用從web瀏覽器中抽取到桌面,因而這將創建像WidgetFX這樣的應用變得非常簡單,從而提供桌面型的小程序。富視頻內容(Rich video content)通過JavaFX提供的On2 視頻編碼器變得可能,而且更妙的是這些視頻編碼器可以工作於Swing應用中。
  • Swing程序中如何調用JavaFX代碼
    (中國軟體網訊)當我們完成了MyScene類後,可以開始寫Java的主程序了,這是個標準的Swing程序中調用JavaFX代碼如下:package swingtest;/*** JavaFXToSwingTest.java http://www.javafxblogs.com* @
  • Mac下安裝Flutter,並創建第一個App
    安裝路徑,一版情況為:/Library/Java/JavaVirtualMachines/jdk-8.jdk/Contents/Home也可以打開訪達,選擇菜單【前往】-【電腦】,隨後進入路徑【Macintosh HD】-【資源庫】中看是否存在Java文件夾,然後找尋安裝路徑;檢查用戶文件夾下是否存在.bash_profile文件,不存在則創建;
  • Gradle 創建java項目詳細步驟
    Gradle 用build.gradle文件, 可讀性更強, 使用更方便, 可謂如日中天.來自百科解讀:Gradle是一個基於Apache Ant和Apache Maven概念項目自動化構建開源工具。它使用基於Groovy的特定領域語言(DSL)來聲明項目設置,拋棄了基於XML的各種繁瑣配置。
  • Java富客戶端平臺JavaFX:創建框架實戰
    JavaFX平臺是Java客戶端平臺的演進,用於幫助程序開發人員快速創建和部署富客戶端應用程式,實現跨平臺的一致性。JavaFX平臺基於Java技術,提供了一系列的圖表和多媒體API,用於簡化數據驅動的企業客戶端應用程式的開發。
  • Android Gradle 使用大全
    Android項目使用 Gradle 作為構建框架,Gradle 又是以Groovy為腳本語言。所以學習Gradle之前需要先熟悉Groovy腳本語言。Groovy是基於Java語言的腳本語言,所以它的語法和Java非常相似,但是具有比java更好的靈活性。下面就列舉一些和Java的主要區別。
  • JDK/Java 14 發布 - OSCHINA - 中文開源技術交流社區
    343:Packaging Tool (Incubator)打包工具(孵化階段)創建一個用於打包獨立 Java 應用程式的工具。352:Non-Volatile Mapped Byte Buffers非易失性映射的字節緩衝非易失性映射的字節緩衝將添加新的 JDK 特定文件映射模式,該模式允許 FileChannel API 用於創建引用非易失性內存(NVM)的 MappedByteBuffer 實例。
  • JDK/Java 14 發布
    343:Packaging Tool (Incubator)打包工具(孵化階段)創建一個用於打包獨立 Java 應用程式的工具。該提案的作者希望為開發人員和支持人員提供有關程序為何異常終止的有用信息,並通過更清楚地將動態異常與靜態程序代碼相關聯來提高對程序的理解。
  • 架構設計-從零開始搭建gradle多模塊項目
    創建一個多模塊的應用技術選型spring-boot: java做web開發,這個差不多是基礎了mybatis: 做javaweb開發,連資料庫大都是用的這個redis: 做javaweb開發,緩存大都是用的這個用的都是常用的東西,沒什麼新特色,大家對技術選型這塊,可以不考慮這麼多,隨大流就行了,想高級一點,就深入把每一部分的原理弄清楚.
  • win10下最新jdk14下載與安裝教程,超詳細!
    一、前言現在jdk已經升級到JDK14版本了,這裡也記錄一下jdk14的下載及安裝過程,對於剛學習java的小夥伴可以參考,熟手可忽略,呵呵~二、下載安裝步驟一、首先是去下載最新jdk14版本呢,我的網盤目錄jdk目錄下載,目錄也有其它低版本的,如果有需要大家根據需要自行選擇。
  • 【實戰】Android工程gradle詳解
    gradle.properties找到工程目錄下的gradle.properties文件,如果沒有也可以自己創建:程序中對buildTypes的區分buildTypes是對不同build類型的處理當你點擊運行按鈕的時候會根據build Variant進行對應的方式編譯。build Variant可以在這裡進行選擇:
  • 寫給Android開發的Gradle知識體系
    項目build.gradle:配置項目的整體屬性,比如指定使用的代碼倉庫、依賴的Gradle插件版本等等。模塊build.gradle:配置當前Module的編譯參數。gradle-wrapper.properites:配置Gradle Wrapper,可以查看Gradle核心思想(四)看似無用,實則重要的Gradle Wrapper這篇文章。
  • Gradle 與 Android 構建入門
    至此,我們知道為什麼需要自動化構建工具:二 默認創建的 Android 工程都有什麼每當通過 Android Studio 新建一個工程時,AS 都會自動創建如上圖所示的目錄結構,圖片中簡單介紹了各個目錄是幹什麼的,接下來為大家詳細介紹每一個目錄或者文件的含義:.gradle 與 .idea.gradle 與 .idea 存放
  • 這一次,徹底了解 Gradle 吧!
    那就必須依靠自動化技術、工具,要能支持平臺、需求等方面的差異、能添加自定義任務的、專門的用來打包生成最終產品的一個程序、工具,這個就是構建工具。構建工具本質上還是一段代碼程序。2.Gradle 是個程序、Groovy 是特定領域 DSL 語言Gradle 簡單來說就是在運行在 JVM 上的一個程序罷了,雖然其使用的是 Groovy 這種腳本語言,但是 Gradle 會把 .gradle Groovy 腳本編譯成 .class java字節碼文件在 JVM 上運行,最終還是 java 這套東西。
  • JPress v3.2.3 發布,嘗試性支持 jdk11 ~ jdk14
    JPress 是一個使用到目前為止, 已經有 10w+ 網站使用 JPress 進行驅動,其中包括多個政府機構,200+上市公司,中科院、紅十字會等。然而,JPress不僅僅只是建站,我們認為不管世界的網際網路發生什麼樣的變化,APP、小程序都需要有網站支持,這就是我們的切入點。
  • OpenJdk1.8筆記——java啟動流程
    Jdk中java的入口函數文件為openjdk\jdk\src\share\bin\main.c中的main方法(window上為WinMain),然後調用jdk8u-dev/jdk/src/share/bin/java.c的JLI_Launch方法,啟動一個jvm虛擬機;程序入口
  • 使用Gradle編譯Java工程之自定義Plugins篇
    我們可以自定義實現自己的Gradle插件,然後分享給其他人使用。我們可以使用不同的語言來實現,不過本章中作者選擇使用Groovy來實現的,大家也可以使用像java、scala等喜歡的別的語言來實現。Gradle自定義插件的實現和自定義任務類型非常的相似,而它兩一般都是結合使用的。
  • 這一次,徹底了解 Gradle 吧!
    那就必須依靠自動化技術、工具,要能支持平臺、需求等方面的差異、能添加自定義任務的、專門的用來打包生成最終產品的一個程序、工具,這個就是構建工具。構建工具本質上還是一段代碼程序。2.Gradle 是個程序、Groovy 是特定領域 DSL 語言Gradle 簡單來說就是在運行在 JVM 上的一個程序罷了,雖然其使用的是 Groovy 這種腳本語言,但是 Gradle 會把 .gradle Groovy 腳本編譯成 .class java字節碼文件在 JVM 上運行,最終還是 java 這套東西。
  • 掌控 Android Gradle
    例如我們新建一個 Android 工程,在其根目錄中輸入:gradle tasks -q可以看到如下輸出(你可能需要事先配置gradle的環境變量,或也可使用./gradlew替代):根據上圖可以看到當前工程中的每條task都已羅列出,並且有黃色的輸出表示當前task的描述。