JavaFXでモーダルウィンドウを作成する方法がわかりません。基本的にファイルセレクターがあり、ユーザーがファイルを選択したときに質問をしたいと思います。ファイルを解析するためにこの情報が必要なので、実行は答えを待つ必要があります。
この質問 を見ましたが、この動作を実装する方法を見つけることができませんでした。
ここにソリューションへのリンク があります JavaFX 2.1のモーダルダイアログ用に以前に作成したソリューションは、現在のステージの上にモーダルステージを作成し、ダイアログコントロール。
更新
以前のリンクされたソリューションは、ダイアログが閉じられた後にアクションを実行するために、日付付きイベントハンドラーアプローチを使用します。このアプローチは、JavaFX 2.2より前の実装で有効でした。 JavaFX 8以降では、イベントハンドラーは不要です。代わりに、新しいステージ showAndWait()
メソッドを使用してください。例えば:
Stage dialog = new Stage();
// populate dialog with controls.
...
dialog.initOwner(parentStage);
dialog.initModality(Modality.APPLICATION_MODAL);
dialog.showAndWait();
// process result of dialog operation.
...
物事が期待どおりに機能するためには、ステージの所有者およびを初期化して、ステージのモダリティを次のいずれかに初期化することが重要です。 WINDOW_MODAL または APPLICATION_MODAL 。
JavaFX 8 および ControlsFX に適合する場合、いくつかの高品質の標準UIダイアログがあります。独自のJavaFX Dialog および Alert クラスには initOwner
および initModality
および showAndWait
メソッド。これにより、必要に応じてモダリティを設定できます(デフォルトでは、組み込みダイアログはアプリケーションモーダルです)。
私の意見では、親ウィンドウは常にアクティブであるため、これは良い解決策ではありません。
たとえば、ボタンをクリックした後にウィンドウをモーダルとして開く場合...
private void clickShow(ActionEvent event) {
Stage stage = new Stage();
Parent root = FXMLLoader.load(
YourClassController.class.getResource("YourClass.fxml"));
stage.setScene(new Scene(root));
stage.setTitle("My modal window");
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(
((Node)event.getSource()).getScene().getWindow() );
stage.show();
}
これで、新しいウィンドウは本当にモーダルです-親はブロックです。また使用できます
Modality.APPLICATION_MODAL