首页 > 解决方案 > 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;
}

标签: javajavafxdialog

解决方案


中的代码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);

推荐阅读