JavaFXを使用してGUIアプリケーションを作成しようとしています。
その中で、複数画面を開いた動作を行う際の実装で行き詰まったので質問させていただきました。
やりたいこと
- メイン画面からダイアログ画面を呼び出す。
- ダイアログの入力フォームに文字を入力。
- ダイアログのOKボタンを押すとダイアログが閉じ、メイン画面のアイテムにダイアログで入力された文字列が表示される。
なお、JavaFXにはjavafx.scene.control.Dialogを利用することで簡単にダイアログを使えると思いますが、
今後自分でカスタマイズした画面で同様の処理を行いたい場面も出てきそうです。
勉強のため、javafx.scene.control.Dialogを用いなくてもできる方法を教えていただけると幸いです。
###発生している問題
以下のようなコードを書いたところNullPointerExceptionが発生し、
ダイアログ画面の入力文字列をメイン画面のコントローラで使用できない。
メイン画面(MainScreen.fxml)のコントローラ
java
1public class MainScreen { 2 3 @FXML 4 protected void makeItem(ActionEvent event) throws IOException { 5 //テーブル名入力ダイアログを表示 6 FXMLLoader loader = new FXMLLoader(getClass().getResource("Dialog.fxml")); 7 DialogScreen controller = loader.getController(); 8 AnchorPane root = (AnchorPane)loader.load(); 9 Scene scene = new Scene(root); 10 Stage stage = new Stage(); 11 stage.setScene(scene); 12 stage.showAndWait(); 13 14 String itemName = controller.getInput(); //NullPointerException発生 15 16 //以下itemNameを表示名にしたボタンを作成 17 } 18} 19
ダイアログ画面(Dialog.fxml)のコントローラ
java
1public class DiarogScreen { 2 private String input; 3 4 @FXML 5 private Button btnOK; 6 7 @FXML 8 private TextField txf; 9 10 @FXML 11 //呼び出し元アイテム:btnOK 12 //実行タイミング:OKボタン押下時 13 //処理内容:テキストフィールドの文字列をinputに格納し、ダイアログを閉じる 14 void setInputTableName(ActionEvent event){ 15 this.input = this.txf.getText(); 16 Scene scene = ((Node)event.getSource()).getScene(); 17 Window window = scene.getWindow(); 18 window.hide(); 19 } 20 21 public String getInput() { 22 return input; 23 } 24}
ダイアログ画面を閉じてしまうと、DialogScreenのコントローラにアクセスできないのが原因ではないかと考えています。
ただ、有効な打開策がわからずに今に至ります。
有効な方法がありましたら教えていただけると助かります。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/27 03:32