4. JavaFXでインプットダイアログの結果をアラートで表示する

Java を勉強してみるぞシリーズ第 4 段。ボタンクリック → インプットダイアログ表示 → 入力 → 入力した値をアラートに入れて表示、というのを目指します。
Java を勉強してみるぞシリーズ第 4 段。ボタンクリック → インプットダイアログ表示 → 入力 → 入力した値をアラートに入れて表示、というのを目指します。
順番に見てもらったほうがわかりやすいと思います。
です。
ボタンを作ってアクションイベント作って動くようにして、FormController.java というファイルに
1 2 3 4 5 6 7 8 9 10 11 |
package application; import javafx.event.ActionEvent; import javafx.fxml.FXML; public class FormController { @FXML protected void onButtonClick(ActionEvent evt) { System.out.println("クリックされました!"); } } |
このように書いて、
実行してボタンをクリックすると、
Eclipse のコンソールに、コード内に書いた文字列が出力される、というところまでやりました。今回はコンソールじゃなくて、アラートやインプットダイアログを使って出力してみたいと思います。
onButtonClick メソッドの中身をアラートを出力する記述にします。アラートを使うために、5, 6 行目のインポートの記述も必要です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package application; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; public class FormController { @FXML protected void onButtonClick(ActionEvent evt) { Alert alrt = new Alert(AlertType.INFORMATION); //アラートを作成 alrt.showAndWait(); //表示 } } |
実行してボタンをクリックすると、
出ました。これは AlertType が INFORMATION の場合です。他のタイプにすると、以下のような見た目に。
CONFIRMATION
ERROR
WARNING
他にもいろんな形があるので、記事下の参考リンクをどうぞ。
1 2 3 4 5 6 7 8 9 10 11 |
//略 public class FormController { @FXML protected void onButtonClick(ActionEvent evt) { Alert alrt = new Alert(AlertType.INFORMATION); alrt.setTitle("タイトル"); alrt.setHeaderText("ヘッダー"); alrt.setContentText("テキスト"); alrt.showAndWait(); } } |
こうすると、
テキストがこのように。ちょっとヘッダーの存在感が大きすぎるような気もしたので、
1 2 3 4 5 6 7 8 9 10 11 |
//略 public class FormController { @FXML protected void onButtonClick(ActionEvent evt) { Alert alrt = new Alert(AlertType.INFORMATION); alrt.setTitle("タイトル"); alrt.setHeaderText(null); alrt.setContentText("テキスト"); alrt.showAndWait(); } } |
setHeaderText を null にすると、
コンパクトになります。
上にも書いたように、AlertType を CONFIRMATION にすると、「OK」「取消」という 2 つのボタンが表示されます。ここで「OK」を押されたときのみ処理をしたい、ってことありますよね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package application; import java.util.Optional; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.ButtonType; public class FormController { @FXML protected void onButtonClick(ActionEvent evt) { Alert alrt = new Alert(AlertType.CONFIRMATION); alrt.setTitle("タイトル"); alrt.setHeaderText(null); alrt.setContentText("テキスト"); Optional<ButtonType> result = alrt.showAndWait(); if (result.get() == ButtonType.OK) { //OKボタンがクリックされたら System.out.println("OKボタンがクリックされました"); //メッセージ } } } |
こう書いてみると、
こう表示されます。「OK」を押したときだけ、
コンソールにテキストが表示されます。
最後に、インプットダイアログとアラートを組み合わせてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package application; import java.util.Optional; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.TextInputDialog; public class FormController { @FXML protected void onButtonClick(ActionEvent evt) { TextInputDialog iptDlg = new TextInputDialog(); iptDlg.setTitle("タイトル"); iptDlg.setHeaderText(null); iptDlg.setContentText("テキスト"); Optional<String> result = iptDlg.showAndWait(); result.ifPresent(value -> { //値があった場合 Alert alrt = new Alert(AlertType.INFORMATION); alrt.setTitle("入力結果"); alrt.setHeaderText(null); alrt.setContentText(value); //アラートのテキストに値を入れる alrt.showAndWait(); }); } } |
実行してみると、
インプットダイアログが出て、テキストを入れて「OK」を押すと、
入力した値がアラートのテキストに入って、表示されます。
ありがとうございました! 不適切な部分や間違ってるぞコノヤロウ的なところがありましたらご指摘ください。