如何在 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)
我在 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)