JavaFX 入門
overview
C#でWPFを使った開発を経験しているが、Javaでも同様の仕組みであるJavaFXが出たので、JavaFXが気になって仕方がない。
いまさらながら、調べてみようという話
現在SpringによるWebバックエンド開発が主な仕事なので、その辺の知識を生かしてうまいことJavaFXに適用できないかも模索してみる。
完全にJavaFXは初心者である
環境構築
JavaFXはJava11から本体から切り離された様子。 (この辺深堀している記事がありそうなので探そう。。。)
取り急ぎ、ググった結果ぱっと出てきたGluonが出しているOpenJavaFX11の環境構築を行った。
開発環境はもちろんWindowsなので、パッケージ管理にScoopを使う。
scoopの公式拡張bucketのjava bucketを追加してインストールする。
PS> scoop bucket add java
PS> scoop update
PS> scoop search javajfx
'java' bucket:
gluon-openjfx-jmods-ea (15-5)
gluon-openjfx-jmods-lts (11.0.2)
gluon-openjfx-jmods (14.0.1)
gluon-openjfx-sdk-ea (15-5)
gluon-openjfx-sdk-lts (11.0.2)
gluon-openjfx-sdk (14.0.1)
PS> scoop install gluon-openjfx-sdk-lts
もちろん、javaも必要なのでインストールしておく
PS> scoop install openjdk11
あと、画面を作成するためのXMLエディタとしてscene builderというものが存在する。
WPFの画面作成のアレと同じことができる。
これはscoopに存在しなかったので、適当に自分でscoop bucketを作ったので追加してインストール
PS> scoop bucket add my-bucket https://github.com/shibadog/my-bucket.git
PS> scoop update
PS> scoop search scene-builder
'my-bucket' bucket:
gluon-scene-builder (11.0.0)
PS> scoop install gluon-scene-builder
これで実行環境と開発SDKのインストール完了。
エディタはvscodeを使う
PS> scoop search vscode
'extras' bucket:
vscode-insiders-portable (nightly)
vscode-insiders (nightly)
vscode-portable (1.45.1)
vscode (1.45.1)
'main' bucket:
llvm (10.0.0) --> includes 'lldb-vscode.exe'
winpython (3.8.2.0) --> includes 'winvscode.bat'
PS> scoop bucket add extras
PS> scoop update
PS> scoop install vscode
あ、ビルドツールはmavenを使うので、これもscoopで入れておく。
PS> scoop search maven
'main' bucket:
maven (3.6.3)
PS> scoop install maven
vscodeには、諸々Java開発のための拡張機能など入れておいてね。
vscodeでの環境構築
取り急ぎ、mavenプロジェクトを作ってから開発しないといかんので、諸々ベースを作る。
PS> mvn archetype:generate
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1605:
Choose a number: 8:
Define value for property 'groupId': com.github.shibadog
Define value for property 'artifactId': javafx-test
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' com.github.shibadog: :
Y: : y
PS> ls
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2020/05/23 22:32 javafx-test
あとラッパも作っておく
PS> cd javafx-test
PS> mvn -N io.takari:maven:0.7.6:wrapper
giboで適当にignore作っておく
PS> gibo dump VisualStudioCode Maven Java Eclipse >.gitignore
powershellだとUTF-16になっちゃうので(これなんとかならんのかいな)、vscodeで開いて文字コードをUTF-8に変えておく。
pomのjdkバージョンを11に変更
diff --git a/pom.xml b/pom.xml
index 4c0c6e2..e9aed17 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,8 +14,8 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <maven.compiler.source>1.7</maven.compiler.source>
- <maven.compiler.target>1.7</maven.compiler.target>
+ <maven.compiler.source>11</maven.compiler.source>
+ <maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
肝心のjavaFxの依存を追加
diff --git a/pom.xml b/pom.xml
index e9aed17..b2a3002 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,6 +19,16 @@
</properties>
<dependencies>
+ <dependency>
+ <groupId>org.openjfx</groupId>
+ <artifactId>javafx-controls</artifactId>
+ <version>11.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.openjfx</groupId>
+ <artifactId>javafx-fxml</artifactId>
+ <version>11.0.2</version>
+ </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
これでもう作れるはず。 とりあえずMainクラスをJavaFXに改造
diff --git a/src/main/java/com/github/shibadog/App.java b/src/main/java/com/github/shibadog/App.java
index 351a4f4..afe5546 100644
--- a/src/main/java/com/github/shibadog/App.java
+++ b/src/main/java/com/github/shibadog/App.java
@@ -1,13 +1,20 @@
package com.github.shibadog;
-/**
- * Hello world!
- *
- */
-public class App
-{
- public static void main( String[] args )
- {
- System.out.println( "Hello World!" );
+import javafx.application.Application;
+import javafx.stage.Stage;
+
+public class App extends Application {
+
+ @Override
+ public void start(final Stage stage) {
+ try {
+ stage.show();
+ } catch (final Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void main(final String... args) {
+ Application.launch(args);
}
-}
+}
実行の時にミソ。vscodeのlaunch.jsonでjavaFx用のモジュールを指定して実行するように設定を入れる。
vscodeのデフォルト設定でlaunch.jsonを作成する。
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Debug (Launch) - Current File",
"request": "launch",
"mainClass": "${file}"
},
{
"type": "java",
"name": "Debug (Launch)-App<javafx-test>",
"request": "launch",
"mainClass": "com.github.shibadog.App",
"projectName": "javafx-test"
}
]
}
このあと、モジュール追加
diff --git a/.vscode/launch.json b/.vscode/launch.json
index c0f83a8..8e410e4 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -8,14 +8,16 @@
"type": "java",
"name": "Debug (Launch) - Current File",
"request": "launch",
- "mainClass": "${file}"
+ "mainClass": "${file}",
+ "vmArgs": "--module-path ${env:USERPROFILE}\\scoop\\apps\\gluon-openjfx-sdk-lts\\current\\lib --add-modules javafx.controls,javafx.fxml"
},
{
"type": "java",
"name": "Debug (Launch)-App<javafx-test>",
"request": "launch",
"mainClass": "com.github.shibadog.App",
- "projectName": "javafx-test"
+ "projectName": "javafx-test",
+ "vmArgs": "--module-path ${env:USERPROFILE}\\scoop\\apps\\gluon-openjfx-sdk-lts\\current\\lib --add-modules javafx.controls,javafx.fxml"
}
]
}
これでやっとvscodeから起動ができる。
開発環境の構築完成!!