java - Java 对话框关闭返回与取消相同的值?
问题描述
我正在尝试编写一个对话框函数,该函数根据用户的选择(“确认”、“否”或关闭对话框)返回一个 int 值(1、-1 或 0)。
但是每当我关闭对话框时,它都会返回与选择“否”按钮相同的值。
有没有办法解决这个问题?
先感谢您 :)
/** * 显示一个确认框并返回用户选择的整数值 * @param title * @param text * @return * @return 1 表示确认,-1 表示未确认,0 表示取消 */
public static int strictConfirmBox(String title, String text, String yesString, String noString) {
ButtonType okBttn = new ButtonType(yesString, ButtonData.YES);
ButtonType noBttn = new ButtonType(noString, ButtonData.NO);
Alert alert = new Alert(Alert.AlertType.CONFIRMATION, text, noBttn, okBttn);
alert.setTitle(title);
alert.setHeaderText(null);
alert.setGraphic(null);
Label msg = new Label(text);
msg.setWrapText(true);
alert.getDialogPane().setContent(msg);
alert.showAndWait();
if(alert.getResult()==ButtonType.CLOSE){
//closed dialog
return 0;
}else if(alert.getResult()==ButtonType.YES){
//selected yes
return 1;
}
// else if(alert.getResult()==ButtonType.NO){
//selected no
return -1;
}
解决方案
中的代码javafx.scene.control.Dialog.close()
找到第一个返回 true 到 isCancelButton() 的按钮。此行为在javafx.scene.control.Dialog 的官方 Javadoc中的“对话框关闭规则”下详细记录。
for (ButtonType button : getDialogPane().getButtonTypes()) {
ButtonData buttonData = button.getButtonData();
if (buttonData == null) continue;
if (buttonData == ButtonData.CANCEL_CLOSE) {
cancelButton = button;
break;
}
if (buttonData.isCancelButton()) {
cancelButton = button;
}
}
因此,我可以建议的最好方法是使用“OTHER”类型而不是 ButtonData.NO 类型。这将防止对话框被关闭,因此用户被迫选择是或否
ButtonType okBttn = new ButtonType("yes", ButtonData.YES);
ButtonType noBttn = new ButtonType("no", ButtonData.OTHER);
或者,您可以添加一个显式关闭选项,如果手动关闭对话框,则会选择该选项。
ButtonType okBttn = new ButtonType("yes", ButtonData.YES);
ButtonType noBttn = new ButtonType("no", ButtonData.OTHER);
ButtonType closeButton = new ButtonType("Close", ButtonData.CANCEL_CLOSE);
推荐阅读
- r - 在具有历史变化的数据集中在给定日期查找值的有效 tidyverse 方法
- r - 如何在同一横向页面上添加具有多列的灵活表和文本
- linq - 如何在 Cosmos DB SDK v3 中使用 LINQ 调用 UDF?
- mysql - 如果满足条件,则将列的总和分配给另一列中的一个日期
- r - 出了点问题;缺少所有 RMSE 度量值;使用插入符号训练功能
- java - 可完成的未来未取消但已完成
- robotframework - 如果 Robot 框架中不存在,如何创建新的环境变量?
- c# - Httpcontext.current.session 变为空
- r - 如何使用 R 中在 Excel 中创建的代码进行循环?
- c# - 如何在子元素上禁用 ContextMenu?