如何在 JavaFX 8 Alert 中指定按钮的特定顺序

cod*_*dde 4 user-interface alert javafx-8

我需要要求用户确认执行操作。确认对话框的按钮组是“是”、“否”和“取消”。我的代码如下:

private ButtonType askYesNoCancel(String question) {
    Alert alert = new Alert(AlertType.CONFIRMATION);
    alert.setContentText(question);
    alert.getButtonTypes().setAll(ButtonType.YES, 
                                  ButtonType.NO, 
                                  ButtonType.CANCEL);
    return alert.showAndWait().get();
}
Run Code Online (Sandbox Code Playgroud)

这给了我

询问是/否/取消确认

我面临的问题是,无论我ButtonType为 an指定s 的顺序是什么Alert,我都会得到相同的按钮顺序(否 - 取消 - 是)。我接过来一看,在对API文档AlertButton并且ButtonType,唉,没有找到答案。

我试图完成的是按钮顺序是 - 否 - 取消。有什么建议吗?

Ada*_*dam 5

例如,如果您确实需要指定按钮顺序...

private static class FixedOrderButtonDialog extends DialogPane {
    @Override
    protected Node createButtonBar() {
        ButtonBar node = (ButtonBar) super.createButtonBar();
        node.setButtonOrder(ButtonBar.BUTTON_ORDER_NONE);
        return node;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后当您创建警报时。

alert.setDialogPane(new FixedOrderButtonDialog());
Run Code Online (Sandbox Code Playgroud)


jew*_*sea 2

检查答案:输入键事件在 Javafx 中的对话框中不起作用?,尽管我认为这个答案更适合这个问题,并且可能没有完全解释正在发生的事情。另请阅读ButtonBar javadoc

基本上,按钮位置由每个按钮的ButtonType和 ButtonBar 的buttonOrder的组合确定。通过更改其中任何一个,您最终都会得到不同的按钮布局。

我记得,自定义 ButtonBar 有点棘手。您可能需要对警报进行子类化并覆盖createButtonBar

我试图完成的是按钮顺序“是”-“否”-“取消”。有什么建议吗?

我的建议是:不要尝试自定义按钮顺序,而是应用系统默认顺序。按钮顺序已预先配置,以匹配各种操作系统对话框的标准按钮布局。对按钮重新排序以偏离该标准可能会使您的应用程序对用户来说更加混乱(尽管这是一个相当主观的意见)。