gpt4 book ai didi

intellij-idea - JavaFX:警告自动关闭对话框

转载 作者:行者123 更新时间:2023-12-04 03:34:51 28 4
gpt4 key购买 nike

我是使用 JavaFX 创建简单练习应用程序的初学者。我使用一个带有 3 个文本字段和一个日期选择器的对话框来创建要作为条目添加到 SQLite 数据库中的“项目”。

我正在尝试使用警报进行数据验证。如果一个或多个字段为空并且按下对话框中的确定按钮,则会弹出警报。问题是关闭警报也会关闭对话框。

我怎样才能显示和关闭警报,而不导致对话框也关闭?


这是我在主窗口 Controller 中用于“新项目”按钮的方法,这会弹出对话框:

 @FXML
public void newItem() {

FXMLLoader fxmlLoader = new FXMLLoader();
fxmlLoader.setLocation(getClass().getResource("newEventDialog.fxml"));
try {
dialog.getDialogPane().setContent(fxmlLoader.load());
} catch (IOException e) {
System.out.println("Error loading new Dialog : " + e.getMessage());
}

newEventDialogController newController = fxmlLoader.getController();

dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);


Optional<ButtonType> result = dialog.showAndWait();


if (result.isPresent() && result.get() == ButtonType.OK) {

newController.addItem();
refreshList();



}
}

这是对话框 Controller 中包含警报的方法:

public void addItem() {
if (validateFields()) {

String eventdate = datepick.getValue().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));

Item item = new Item(namefield.getText(), emailfield.getText(), typefield.getText(), eventdate);
Datasource.getInstance().insertEvent(item);
} else {
Alert alert = new Alert(Alert.AlertType.ERROR);

alert.setContentText("Error: One or more fields are empty.");
alert.showAndWait();


}

}

感谢您的宝贵时间以及所有回复。

最佳答案

您可以拦截 ButtonType.OKDialog 的操作。试试这个。

dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
final Button btOk = (Button)dialog.getDialogPane().lookupButton(ButtonType.OK);
btOk.addEventFilter(ActionEvent.ACTION, event -> {
if (newController.addItem()) {
refreshList();
} else {
event.consume(); // Make dialog NOT to be closed.
}
});

Optional<ButtonType> result = dialog.showAndWait();

在对话框的 Controller 中

// Return false, if you want NOT to close dialog.
public boolean addItem() {
if (validateFields()) {
String eventdate = datepick.getValue().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
Item item = new Item(namefield.getText(), emailfield.getText(), typefield.getText(), eventdate);
Datasource.getInstance().insertEvent(item);
return true;
} else {
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setContentText("Error: One or more fields are empty.");
alert.showAndWait();
return false;
}
}

此方法已在 Dialog API 文档中进行了描述。 Dialog Validation / Intercepting Button Actions

关于intellij-idea - JavaFX:警告自动关闭对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706554/

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