警报类型无关闭javafx

jis*_*ist 4 java user-interface alert javafx

我有一个带有菜单栏的程序,其中有一个"关于"按钮,用于显示有关该应用程序的一些信息.

问题是,当我使用AlertType.INFORMATION时,我可以点击Ok按钮关闭警报,但是当我按下关闭窗口按钮时我使用NONE时,没有任何反应.我已经尝试过设置setOnCloseAction(e-> close()); 但它也没有关闭.

谢谢!

public class RootLayoutController {

private MainApp main;

@FXML
private MenuItem loadFiles;

@FXML
private MenuItem about;

@FXML
private void displayAbout() {
    Alert alert = new Alert(AlertType.NONE);
    alert.initStyle(StageStyle.UTILITY);
    alert.initOwner(main.getPrimaryStage());
    alert.setTitle("Organiz3r");
    alert.setHeaderText("Organiz3r v1.0");
    alert.setContentText("Developed at BitBucket");
    alert.showAndWait();
}

@FXML
private void handleLoad() {
    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("Open Files");
    List<File> files = fileChooser.showOpenMultipleDialog(main.getPrimaryStage());
    main.loadFiles(files);
}

public RootLayoutController() {
    // TODO Auto-generated constructor stub
}

public void setMain(MainApp main) {
    this.main = main;
}
Run Code Online (Sandbox Code Playgroud)

主要在主要班级设置

// Load root layout from fxml file.
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("view/RootLayout.fxml"));
        rootLayout = (BorderPane) loader.load();

        RootLayoutController controller = loader.getController();
        controller.setMain(this);
Run Code Online (Sandbox Code Playgroud)

Jam*_*s_D 8

文档解释了(参见"对话闭幕规则")在按下窗口关闭按钮不会有任何影响,除非有或者是只有一个按钮,或者有两个或更多的按钮,其中一个本质上是一个"取消"按钮.因此,当您创建一个Alertwith时AlertType.NONE,它没有按钮,因此将忽略使用标准"窗口关闭"按钮关闭它.

因此,如果您不想要AlertType.INFORMATION,您需要在警报中添加一个按钮,您可以使用该按钮

alert.getDialogPane().getButtonTypes().add(ButtonType.OK);
Run Code Online (Sandbox Code Playgroud)


Amb*_*ber 5

根据Dialog 文档,似乎您必须在 Dialog/Alert 中至少有一个按钮才能使用角落中的“x”按钮关闭它。根据文档,使用“x”按钮关闭被认为是“异常关闭”。这是它所说的:

JavaFX 对话框只能在两种情况下“异常”关闭(如上定义):

当对话框只有一个按钮时,或

当对话框有多个按钮时,只要其中一个满足以下要求之一即可:

该按钮有一个 ButtonType,其 ButtonBar.ButtonData 的类型为 ButtonBar.ButtonData.CANCEL_CLOSE。

该按钮有一个 ButtonType,当调用 ButtonBar.ButtonData.isCancelButton() 时,其 ButtonBar.ButtonData 返回 true。在所有其他情况下,对话框将拒绝响应所有关闭请求...