SSブログ

ボタンクリック時の処理(onAction)を追加する [JavaFX]

前置き

ボタンクリック時の処理は、setOnActionメソッドで直接追加する方法と、FXMLのonActionにメソッドを指定して追加する方法がある。
どちらの方法でも良いが、どちらかに統一した方がいいと思っていて、体感では、直接追加する方法はソースを追いやすくなり、 FXMLで指定する方法ではソースがスッキリするイメージ。

実装

直接指定

FXDemo.java

FXML指定

SceneBuilderで対象のコントロールを選択して、右側のインスペクタからCodeを展開し、 On ActionにJavaで呼び出すメソッド名を指定する。
イベント発生時に、ここで指定したメソッドの処理が実行されるようになる。

Java側では@FXMLアノテーションを付与し、On Actionで指定したメソッド名でバインドする。

OnAction2.png

FXDemo.fxml


FXDemo.java

実行結果

OnAction1.png


nice!(0)  コメント(0) 

FXMLでレイアウトを定義する [JavaFX]

前置き

自分がSwingからJavaFXへ移行する上で、一番の動機付けになっている変更点が、XMLでレイアウトを定義できるようになった所だった。
FXMLというXML形式のファイルに、コンテナにコントロールの配置を定義する。

FXMLはSceneBuilderというツールで、コントロールをドラッグアンドドロップして配置していく要領で、簡単に作成することができる。
これをクラスローダで読み込んで、コントロールに対し必要な処理部分を定義していく流れとなり、 WEBアプリケーションを作成するのに近くなったことで、MVCライクな設計が可能となる。
ということは、設計によってはWEBアプリケーションとGUIアプリケーションの資産を相互に流用することもできる。

準備

後述の手順でSceneBuilderを準備していく。

  • SceneBuilderインストーラーをダウンロードする
  • SceneBuilderをインストールする
  • SceneBuilderを起動すると文字化けしている[涙]
  • 製造元のGitHubリポジトリからSceneBuilderApp_ja.propertiesをダウンロードする
  • ダウンロードしたSceneBuilderApp_ja.propertiesはUTF-8で保存する(必要に応じて)
  • C:\Program Files\SceneBuilder\app\scenebuilder-11.0.0-all.jarの拡張子をzipに変更して解凍する
  • 解凍後のcom\oracle\javafx\scenebuilder\app\i18n\SceneBuilderApp_ja.propertiesをダウンロードしたSceneBuilderApp_ja.propertiesで置き換える
  • 解凍したscenebuilder-11.0.0-allをzipで圧縮しなおして拡張子をjarに戻す
  • SceneBuilderを起動すると文字化が解消されている

  • ここまでいろいろと書いているが、この方の説明の方が遥かに分かり易いのでお勧め。

    実装

    SceneBuilderでコンテナにコントロールを配置していく。
    操作が直感的に行えるので配置に関する説明は割愛するが、ポイントだけ押さえておく。

    まずはfx:idについて。
    コントロール毎に識別子を指定する。これがJava側でのフィールド名となる。
    コントロールを選択して、右側のインスペクタからCodeを展開しfx:idにJavaでのフィールド名を指定する。

    SceneBuilderKaiso.png

    次に、Controllerクラスを指定する。
    これはFXMLとJavaクラスをバインドさせるための指定で、左側のドキュメントからコントローラを展開し、 Controller classに、パッケージを含めたクラス名を指定する。

    SceneBuilderController.png

    コントローラクラスに指定されたクラスは、javafx.fxml.Initializableインタフェースをimplementsする必要がある。
    これによって、@FXMLアノテーションでfx:idとフィールド名をバインドさせることができる。
    また、Initializableインタフェースには、initializeという抽象メソッドが用意されており、 FXMLで定義できないコントロールの処理や設定などを、文字通り初期化することができる。

    以上、SceneBuilderで作成したFXMLファイルは、リソースフォルダに保存する。
    コントローラクラスからgetResourceメソッドで読み込みを想定しているので、 コントローラクラスと同じパッケージを用意し、FXDemo.fxmlというファイル名で保存することにする。

    FXDemoKaiso.png

    FXDemo.fxml


    FXDemo.java

    今回は、FXMLでは定義していない初期値やボタン名を、initializeメソッドで変更してみた。

    実行結果

    FXDemo実行.png


    nice!(0)  コメント(0) 

    TabPane [JavaFX]

    説明

    タブの選択によってコンテンツを切り替える。

    実装

    TabPaneDemo.java

    実行結果

    TabPaneDemo1.png
    TabPaneDemo2.png
    TabPaneDemo3.png


    nice!(0)  コメント(0) 

    HBox・VBox [JavaFX]

    説明

    コントロールを追加順で水平・垂直方向に配置する。
    FlowPaneとは違い、ウィンドウ幅のオーバーフロー分の折り返しはない。

    実装

    HBoxDemo.java

    実行結果

    HBoxDemo1.png
    ウィンドウ幅を縮めると、ウィンドウサイズに応じてコントロールのサイズが動的に変わり、配置は保たれる。

    HBoxDemo2.png


    nice!(0)  コメント(0) 

    FlowPane [JavaFX]

    説明

    コントロールを追加順に配置する。
    文字通り、コントロールを流し込んでいくイメージ。
    ウィンドウ幅のオーバーフロー分は、折り返して再配置される。

    実装

    FlowPaneDemo.java

    実行結果

    FlowPaneDemo1.png

    ウィンドウ幅を縮めると、ウィンドウサイズに応じてコントロールの配置が動的に変わる。

    FlowPaneDemo2.png


    nice!(0)  コメント(0) 

    BorderPane [JavaFX]

    説明

    コントロールを上・下・左・右・中心に分けて配置する。

    実装

    BorderPaneDemo.java

    実行結果

    BorderPaneDemo.png


    nice!(0)  コメント(0) 

    JavaFXでGUIアプリケーションを創る [JavaFX]

    やりたいこと

    JavaでGUIアプリを創ってみる。
    Javaで創っておけば、ランタイムさえあればどこでも動くし便利。
    だし、コンソールアプリはやっぱり味気ない。。。

    今まではSwingで創っていたけど、後追い技術の方が生産性が向上する筈なので、JavaFXに移行する。
    いつの時代も、改革には痛みを伴う。

    実装

    今回はFXMLを適用しないやり方。

    FxDemo.java

    実行結果

    FxDemo.png


    nice!(0)  コメント(0) 

    GSonを使いJSONのシリアライズとデシリアライズをするプログラムをJavaで創る [プログラミング]

    やりたいこと

    JSONでシリアライズとデシリアライズをしたい

    実装

    pom.xml


    JsonDemo.java

    実行結果




    nice!(0)  コメント(0) 

    Lombokを使いデータクラスをJavaで創る [プログラミング]

    やりたいこと

    Getter, Setterを作るのが面倒くさい。。。
    Kotlinみたいに、データクラスの作成で楽がしたい。

    使い方と、余談

    IntelliJとかだと、コード補完でgetXXXやsetXXXが出てこないので、プラグインのインストールが必要っぽい。
    設定 > プラグイン > "lombok"で検索 > Lombokプラグインをインストール
    他のIDEでも、プラグインが必要になると思う。多分。知らんけど。。。

    クラスに@Dataアノテーションを付与すると、データクラスとなりフィールドの定義だけで Getter、Setterが勝手に作成される。(実装不要)

    今からJVM言語の学習を始めるなら、JavaよりもKotlinがお勧め。
    そもそもLombokも使う必要がないし、型推論や、データクラス定義の標準装備など、モダン言語は生産性が爆上がりw
    Javaにもバージョンによっては型推論があるけど、どうせIDEにプラグインが必要になるだろうし、色々と面倒くさい。(未検証)

    実装

    pom.xml


    LombokDemo.java

    実行結果




    nice!(0)  コメント(0) 

    Apache POIを使いExcelファイルを読み込むプログラムをJavaで創る [プログラミング]

    やりたいこと

    Excelファイルからデータを読み込みたい
    前回 作ったExcelファイルを読み込むだけのプログラムを作成する

    参考

    Apache POIを使いExcelファイルに書き込むプログラムをJavaで創る

    実装

    pom.xml


    PoiReadDemo.java

    実行結果




    nice!(0)  コメント(0) 

    この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。