【问题标题】:How to freeze Dialog in JavaFX如何在 JavaFX 中冻结对话框
【发布时间】:2016-02-10 07:12:57
【问题描述】:

我在 JavaFX 的一个阶段中创建了一个 Button(命名为 test)。然后,当您按下此按钮时,我会显示一个对话框,其中还有另一个按钮(目前这并不重要)。现在我希望对话框可以让我冻结整个应用程序。我的意思是,我不应该回到上一阶段,我可以这样做,只需用“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.initModality(Modality.APPLICATION_MODAL);吗?
  • 是的,我正在寻找那个@James_D :)。

标签: javafx dialog stage


【解决方案1】:

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

dialogstage.initStyle(StageStyle.UNDECORATED);

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

dialogstage.initModality(Modality.WINDOW_MODAL);

并定义所有者(父),以便该模式起作用

dialogstage.initOwner( parentStage );

【讨论】:

  • 如果我不做 dialogstage.initOwner(parentStage); 会发生什么?
  • 模态可能不起作用,因为它没有定义,应该覆盖哪个框架并“冻结”
  • 我所做的是使用舞台(dialogstage),是否可以对对话框对象做同样的事情?
  • 是的,也设置了所有者,并使用方法showAndWait()而不是show()来阻止所有者
【解决方案2】:

这很容易做到,

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

Stage.initOwner(yourNewWindow)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多