SSブログ

ListView [JavaFX]

前置き

複数の選択肢をリスト表示して、選択しているオブジェクトを取得する時に使う。
コンボボックスと違うところは、最初から選択肢が見えている点、複数選択が可能な点などがある。
今回の例のように複数リストを作成し、選択項目がリスト間を移動するような使い方が一般的?

実装

FXDemo.fxml


FXDemo.java

実行結果

ListView.png


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

TableView [JavaFX]

前置き

表形式でデータを表示するためのコントロール。
このコントロールを使うとステップ数が爆上がりする。。。

  • TableViewにTableColumnをネストしたり。。。
  • データクラスを用意したり。。。
  • TableColumnにデータクラスをバインドしたり。。。
  • 編集可能にするためにsetCellFactoryしたり。。。
  • セルの編集時にsetOnEditCommitで変更内容を反映させる必要があるし。。。
  • 必要に応じてsetSelectionModeで複数行選択できるようにしたり。。。
  • etc...

  • とにかく面倒くさい。。。なのによく使うコントロール。。。

    実装

    FXDemo.fxml


    FXDemo.java

    実行結果

    TableView.png


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

    CheckBox [JavaFX]

    前置き

    一般的なチェックボックスの使い方と一緒。
    今回の例のように、チェックで他のコントロールの活性/非活性を制御し、 承認させたことを担保した上で、ボタンをクリックさせるなどの使い方が一般的かな?

    実装

    FXDemo.fxml


    FXDemo.java



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

    RadioButton [JavaFX]

    前置き

    2~3択程度で全ての選択肢を見せておきたい場合などに使うコントロール
    ポイントはToggleGroupを指定して選択肢同士を纏めておかないと、択一式にならない所くらい。

    実装

    FXDemo.fxml


    FXDemo.java

    実行結果

    RadioButton.png


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

    ComboBox・ChoiceBox [JavaFX]

    前置き

    予め用意されている値の中から選択させる、ComboBox・ChoiceBoxコントロールの使い方を覚える。
    ChoiceBoxはスクロールがないので選択肢が少ない場合、ComboBoxは選択肢が多めでスクロールが必要な場合に使用する。

    実装

    FXDemo.fxml


    FXDemo.java

    実行結果

    ChoiceBox.png


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

    ボタンクリック時の処理(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) 

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