SSブログ

JavaFXの非同期処理 [JavaFX]

前置き

前回メモした通り、Progress系のコントロールで進捗状況を逐次確認したい時は、非同期で進捗度合いを更新する必要がある。
JavaFXでは非同期処理用に、javafx.concurrent.Taskクラスが用意されている。 Taskクラスのcallメソッドに、時間が掛かる処理を実装しておき、別スレッドでそのTaskを呼び出す流れ。

Taskクラスには、updateProgressメソッドが用意されており、簡単に進捗度を更新できるようになっている。
これにより、Progressコントロールに非同期処理を実装したTaskクラスをバインドすることで、 進捗度合いをリアルタイムでモニタできるようになっている。
Taskクラスは他にも、cancelledメソッドやsucceededメソッドなど、非同期処理を制御するためのメソッドが用意されている。
SwingのSwingWorkerと使い方はほとんど同じだが、処理状況、進捗度合い、処理結果などを保持できるあたりが優秀。

画面設計

  • 初期表示
    • 全てのバーとインジケータを初期化
  • 実行中(Start・Restartボタン)
    • 第1インジケータを不確定モードにする
    • 第2バーを不確定モードにする
    • 非同期処理を開始 or 再開する
    • 他のバーとインジケータで進捗度をモニタする
    • Start・Restartボタンを非活性にする
  • 停止状態(Stopボタン)
    • 非同期処理を中断する
    • 全てのバーとインジケータに停止時の進捗度を表示する
    • 実行中はStartボタンのテキストをRestartに変更する
    • Restartボタンを活性化する
  • 完了
    • 全てのバーとインジケータの状態を完了にする
    • RestartボタンのテキストをStartに変更する

実装

FXDemo.fxml


FXDemo.kt

実行結果

初期表示
task1.png

実行中
task2.png

停止状態
task3.png

完了
task4.png


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

ProgressBar・ProgressIndicator [JavaFX]

前置き

進捗状況を可視化するためのコントロール。
progressに負の値を設定すると、不確定モードとなる。
progressは1.0を完了状態とし、0.5を50%の状態として表示する。

因みに、何も考えずに使用すると、処理の終了時にゲージが一気に完了状態に切り替わったように表示される。
処理の進捗にあわせてゲージも徐々に上がっていくように見せるには、非同期処理で更新しないとダメ。
非同期処理についてのメモは次回に残す予定。

実装

FXDemo.fxml


FXDemo.kt

実行結果

Progress1.png Progress2.png
nice!(0)  コメント(0) 

バブルチャートを使う [JavaFX]

前置き

JavaFXでバブルチャート表示させる。
前回の散布図と使い方はほとんど一緒。ただし、データの強弱を表現できる。

ポイントは、X軸に NumberAxis を指定する必要があること。
データの第3引数に半径を指定すると、データの強弱を表現できるようになる。
半径を指定しなかった場合には、散布図とほぼ同じ使い方になる。
今回は、半径を5段階でランダムに指定している。

実装

FXDemo.fxml


FXDemo.kt

実行結果

データに半径を指定しなかった場合

bubblechart1.png

データに半径を指定した場合

bubblechart2.png


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

散布図を使う [JavaFX]

前置き

JavaFXで散布図を表示させる。
ある集団に於けるデータの分布を視覚化するのに適したグラフ。

  • 季節とアイスの売上の相関
  • 学年と身長の相関
  • 地域と降水確率の相関
  • etc...

実装

FXDemo.fxml


FXDemo.kt

実行結果

scatterchart.png


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

円グラフを使う [JavaFX]

前置き

JavaFXで円グラフを表示させる。
ある集団に於ける構成比を表わすのに適したグラフ。

他のグラフと比較すると、直感的に扱えるシンプルな作りになっている。
今回は、凡例の位置を左側に変更したり、プロット開始位置を変更したりしている。
プロット開始位置のデフォルトは3時の位置から始まり、変更する場合は startAngle で 角度を指定する。90を指定した場合は反時計回りに90度回転する。

実装

FXDemo.fxml


FXDemo.kt

実行結果

piechart.png


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

折れ線グラフを使う [JavaFX]

前置き

JavaFXで折れ線グラフを表示させる。
時系列でデータの推移を観測する時などに適したグラフ。

今回のポイントは、折れ線グラフのY軸を NumberAxis クラスで取得し、 プロット範囲を指定している所。この時 isAutoRanging をfalseに設定し、 プロット範囲の自動設定をOFFにしておかないと、手動設定の指定が有効にならないことに注意。

実装

FXDemo.fxml


FXDemo.kt

実行結果

linechart.png


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

棒グラフを使う [JavaFX]

前置き

JavaFXで棒グラフを表示させる。
X軸とY軸を反転させると横棒グラフを表示させることも可能。(未確認)
あと、積上げ棒グラフも表現できる(当然、未確認)ので、用途に合わせて選択できる。

スキルの幅を少し拡張したかったので、今回からKotlinで実装している。
Kotlinの文法等は、他の入門サイト等で十分補完可能なので割愛。
JavaからKotlinに移行するにあたり、ハマった箇所をメモしておく。

  • @FXMLで読み込むコントロールは lateinit var で宣言しておく
  • initializeメソッドの引数はnull考慮にしておく
  • launchメソッドの引数に自クラスを指定しておく

実装

FXDemo.fxml


FXDemo.kt

実行結果

barchart.png


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

JavaFXでダイアログ表示 [JavaFX]

前置き

バージョン:JavaFX 8u40 から導入されたコントロール。
それまではダイアログは自炊するか、SwingのJOptionPaneで各種ダイアログを呼び出すしかなかった。
いやいや。。。GUIアプリケーションなのに、こんな高頻度で使用するコントロールを初期装備してないなんて有り得ないから(;^ω^)
タイトル、ヘッダテキスト、コンテントテキスト、ボタン等々の細かい設定ができるのはSwingと同じ。

実装

FXDemo.fxml


FXDemo.java



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

FileChooser・DirectoryChooser [JavaFX]

前置き

ディレクトリやファイルを選択するダイアログを表示するためのコントロール。
showSaveDialogでファイル保存用のダイアログを表示することも可能。

実装

FXDemo.fxml


FXDemo.java



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

DatePicker [JavaFX]

前置き

日付をカレンダーから指定できる。意外と便利。

実装

FXDemo.fxml


FXDemo.java



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

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