gpt4 book ai didi

JavaFX 关闭应用程序模式对话框

转载 作者:行者123 更新时间:2023-12-01 18:45:49 28 4
gpt4 key购买 nike

我正在使用this创建应用程序模式对话框的示例。当我单击对话框上的退出按钮(右上角的红色按钮)时,一切正常。对话框关闭,然后我可以正常打开它。但是,当我尝试添加一个关闭对话框的 Button 时,一切正常,直到我尝试重新打开它。之后,它向我抛出一个 IllegalStateException (如果需要,我将使用此异常更新答案)。

这是一个事件处理程序,演示了如何关闭对话框:

    btnClose.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
dialog.close();
}
});

有人可以告诉我如何正确关闭应用程序模式对话框吗?提前致谢。

最佳答案

编辑

我看到你发现了你的问题,我想我只是用示例代码保留我的答案,以防其他人遇到类似的问题。

<小时/>

您的 btnClose 操作对我有用,因此问题可能出在您尚未发布的某些代码中。

这是我创建的用于测试它的示例:

import javafx.application.Application;
import javafx.event.*;
import javafx.geometry.Pos;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.*;

public class DialogClosing extends Application {
@Override public void start(final Stage stage) {
final Button showDialog = new Button("Show Dialog");
showDialog.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent actionEvent) {
showDialog(stage, showDialog);
}
});

StackPane layout = new StackPane();
layout.getChildren().setAll(
showDialog
);

layout.setStyle("-fx-padding: 10px;");
stage.setScene(
new Scene(
layout
)
);
stage.show();
}

private Stage showDialog(Window parent, final Node showControlNode) {
showControlNode.setDisable(true);

final Stage dialog = new Stage();
dialog.initOwner(parent);
dialog.initStyle(StageStyle.UTILITY);
dialog.setX(parent.getX());
dialog.setY(parent.getY() + parent.getHeight());

Button closeDialog = new Button("Close Dialog");
closeDialog.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
dialog.close();
}
});
dialog.setOnHidden(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent windowEvent) {
showControlNode.setDisable(false);
}
});

VBox layout = new VBox(10);
layout.setAlignment(Pos.CENTER);
layout.getChildren().addAll(
new Label("Hello World!"),
closeDialog
);
layout.setStyle("-fx-padding: 10px;");

Scene scene = new Scene(
layout,
125,
100
);

dialog.setScene(scene);
dialog.show();

return dialog;
}

public static void main(String[] args) { launch(args); }
}

closingtimeoutput

关于JavaFX 关闭应用程序模式对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17844007/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com