如何在JavaFX中冻结Dialog

时间:2015-11-09 15:31:18

标签: javafx dialog stage

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

这张图片更好地解释了我想要做的事情。 enter image description here

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) { 
                        }

                    });


            }
        });

2 个答案:

答案 0 :(得分:2)

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

dialogstage.initStyle(StageStyle.UNDECORATED);

然后你制作你的舞台模态(一个对话框,阻止输入到应用程序中的其他一些顶级窗口,除了用对话框作为主人创建的窗口。模态对话框捕获窗口焦点,直到它是关闭,通常是按下按钮。)

dialogstage.initModality(Modality.WINDOW_MODAL);

并定义所有者(父级)以使模态起作用

dialogstage.initOwner( parentStage );

答案 1 :(得分:1)

很容易做到这一点,

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

Stage.initOwner(yourNewWindow)