JavaFX2.1の基礎メモ 〜構成、開発環境、サンプル〜
ちゃっとGUIな便利ツールを作成したいと思ったときに役立てば、ということで、JavaFX2.1メモ。
なんだかんだ一番使い慣れた言語で作るのが一番速かったりなので。
(個人的には昔Swingで色々作っていて手馴れてたりするが、潮流的なものも勘案して、当面はJavaFXでいこうと思う)
JavaFX2.1基礎
構成ファイル
1. コンストラクタ呼びだし
2. init() メソッド呼びだし (⇒ 初期化処理はここに記述)
3. start(javafx.stage.Stage) メソッド呼びだし (⇒ 主処理はここに記述)
4. 最後のウィンドウが閉じられるか、Platform.exit()が呼ばれるかまで待つ
5. stop() メソッド呼び出し (⇒ 後処理はここに記述)
-
- launch メソッドを呼ぶ main メソッドを記述すればスタンドアロン実行可能である(?)
- コントローラクラス
- レイアウトファイル(FXML)
- レイアウト定義や、項目とイベント処理の紐付けを記述する
なお、参照先指定関係は、
アプリケーションクラス ⇒ レイアウトファイル(FXML) ⇒ コントローラクラス
である。
オブジェクト構造
Stage
Scene (:1つのFXMLファイルが相当?)
Container
Control
開発環境構築
NetBeans IDEという選択肢が有力っぽいが、
今回は Eclipse + SceneBuilder でやってみる。
- Java(アプリケーション、コントローラ) ⇒ Eclipse(※jfxrt.jarにクラスパスを通すこと。「C:\Program Files\Oracle\JavaFX 2.1 SDK\rt\lib\jfxrt.jar」)
- FXML ⇒ SceneBuilder
SceneBuilder
上記公式サイトから飛べる、下記URLからダウンロード。まだベータ版で、1.0 build b38。
で、作成したfxmlファイルは、 src/main/resources 以下に格納する。
実行可能jarの作成
Ecliple > プロジェクトを右クリック > エクスポート > Java > Runnable JAR file から。
「Library handling」では、「Copy required libraries into a sub-folder next to the generated JAR」を選べばいいだろう。
試作
アプリケーションクラス
package ok.javafx.test; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class TestApplication extends Application { @Override public void start(Stage stage) throws Exception { // タイトル設定 stage.setTitle("Test"); // シーン設定 Parent fxmlSchene = FXMLLoader.load(getClass().getResource("test.fxml")); Scene scene = new Scene(fxmlSchene, 300, 100); stage.setScene(scene); // 表示 stage.show(); } public static void main(String[] args) { launch(args); } }
コントローラクラス
package ok.javafx.test; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class TestController { @FXML private TextField txtName; @FXML private Label lblName; @FXML protected void writeText(ActionEvent e) { this.lblName.setText(this.txtName.getText()); } }
レイアウトファイル(FXML)
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.paint.*?> <AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="ok.javafx.test.TestController"> <children> <TextField fx:id="txtName" layoutX="14.0" layoutY="14.0" prefWidth="200.0" text=""/> <Label fx:id="lblName" layoutX="14.0" layoutY="41.0" text="初期値" /> <Button fx:id="btnApply" layoutX="14.0" layoutY="63.0" onAction="#writeText" text="適用" /> </children> </AnchorPane>
公式サイト
参考サイト
⇒JavaFX1はスクリプト言語であったが、JavaFX2ではスクリプトは廃止されてJavaAPIに置き換えられた。
- 生まれ変わったJavaFX 2.0、Webブラウザと統合可能。JavaOne 2011 - Publickey
- JavaFXをマルチプラットフォームUIとして再定義──JavaOne 2012 Tokyoから - Publickey