如何在 JavaFX 中冻结对话框

How to freeze Dialog in JavaFX

我在 JavaFX 的一个阶段中创建了一个按钮(名为 test)。然后当你按下这个按钮时,我会显示一个对话框,其中有另一个按钮(目前这不是那么重要)。现在我希望对话框可以让我冻结整个应用程序。我的意思是,我应该没有回到前一阶段的可能性,我可以做到这一点,只需关闭 window 与 "X".

这里有一张图片可以更好地解释我想做什么。

private TextInputDialog dialog;
    private Text actionStatus;
    private final String defaultVal = "Default text";
    private static final String titleTxt = "Esempio JavaFx Dialog";



test.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent e) {

                    Stage dialogstage = new Stage();


                    dialogstage.setTitle(titleTxt); 

                    // Window label
                    Label label = new Label("Text Input Dialog");
                    label.setTextFill(Color.DARKBLUE);
                    label.setFont(Font.font("Calibri", FontWeight.BOLD, 36));
                    HBox labelHb = new HBox();
                    labelHb.setAlignment(Pos.CENTER);
                    labelHb.getChildren().add(label);

                    // Button
                    Button textbtn = new Button("Premi");
//                  textbtn.setOnAction(new TextButtonListener());
                    HBox buttonHb = new HBox(10);
                    buttonHb.setAlignment(Pos.CENTER);
                    buttonHb.getChildren().addAll(textbtn);

                    // Status message text
                    actionStatus = new Text();
                    actionStatus.setFont(Font.font("Calibri", FontWeight.NORMAL, 20));
                    actionStatus.setFill(Color.FIREBRICK);

                    // Vbox
                    VBox vbox = new VBox(30);
                    vbox.setPadding(new Insets(25, 25, 25, 25));;
                    vbox.getChildren().addAll(labelHb, buttonHb, actionStatus);

                    // Scene
                    Scene scene = new Scene(vbox, 500, 250); // w x h
                    dialogstage.setScene(scene);
                    dialogstage.show();

                    // Initial dialog
//                  displayTextDialog();


                    textbtn.setOnAction(new EventHandler<ActionEvent>() {
                        public void handle(ActionEvent e) { 
                        }

                    });


            }
        });

首先,从舞台上移除关闭按钮:

dialogstage.initStyle(StageStyle.UNDECORATED);

然后将舞台设置为模态(一个对话框,该对话框阻止输入到应用程序中的某些其他顶级 windows,但使用该对话框作为其所有者创建的 windows 除外。模态对话框捕获 window 焦点直到它关闭,通常是响应按钮按下。)

dialogstage.initModality(Modality.WINDOW_MODAL);

并定义所有者(父级)以便模态有效

dialogstage.initOwner( parentStage );

这很容易做到,

您必须在代码中添加以下短语:

Stage.initOwner(yourNewWindow)