警报类型无关闭javafx
我有一个带有菜单栏的程序,菜单栏上有一个“关于”按钮,用来显示有关应用程序的一些信息 问题是,当我使用AlertType.INFORMATION时,我可以点击Ok按钮关闭警报,但当我点击close window按钮时使用NONE时,什么也不会发生。我已经尝试放置一个setOnCloseAction(e->close());但它也不会关闭 谢谢警报类型无关闭javafx,java,user-interface,javafx,alert,Java,User Interface,Javafx,Alert,我有一个带有菜单栏的程序,菜单栏上有一个“关于”按钮,用来显示有关应用程序的一些信息 问题是,当我使用AlertType.INFORMATION时,我可以点击Ok按钮关闭警报,但当我点击close window按钮时使用NONE时,什么也不会发生。我已经尝试放置一个setOnCloseAction(e->close());但它也不会关闭 谢谢 public class RootLayoutController { private MainApp main; @FXML private Men
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;
}
说明(在“对话框关闭规则”一节中)按下窗口关闭按钮将无效,除非只有一个按钮,或者有两个或多个按钮,其中一个按钮本质上是“取消”按钮。因此,当您使用AlertType.NONE
创建警报时,它没有按钮,因此使用标准的“窗口关闭”按钮关闭它将被忽略
因此,如果您不需要警报类型.INFORMATION
,则需要在警报中添加一个按钮,您可以使用该按钮
alert.getDialogPane().getButtonTypes().add(ButtonType.OK);
基于此,您必须在对话框/警报中至少有一个按钮,才能使用角落中的“x”按钮将其关闭。根据文档,使用“x”按钮关闭被认为是“异常”关闭。下面是它所说的:
JavaFX对话框只能在两种情况下“异常”(如上所述)关闭:
当对话框只有一个按钮时,或
当对话框有多个按钮时,只要其中一个按钮满足以下要求之一:
按钮有一个ButtonType,其ButtonBar.ButtonData类型为ButtonBar.ButtonData.CANCEL\u CLOSE
该按钮有一个ButtonType,其ButtonBar.ButtonData在调用ButtonBar.ButtonData.isCancelButton()时返回true。
在所有其他情况下,对话框将拒绝响应所有关闭请求
您可以使用AlertType.INFORMATION,然后隐藏“确定”按钮。这使您可以从角落用“x”按钮关闭窗口,而无需另一个按钮
dialogPane.lookupButton(ButtonType.OK).setVisible(false)代码>请包括一个SSCCE!不抱歉,bad tag@CatalinaIslandI编辑了主帖@Ambert这也是正确答案,但James提供了使用AlertType.NONE的修复程序,请查看并添加一个简单按钮以满足要求。
alert.getDialogPane().getButtonTypes().add(ButtonType.OK);