【问题标题】:How to specify a particular order of buttons in a JavaFX 8 Alert如何在 JavaFX 8 警报中指定特定的按钮顺序
【发布时间】:2016-04-16 11:47:40
【问题描述】:

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

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();
}

这给了我

我面临的问题是,无论我以什么顺序为ButtonTypes 指定Alert,我都会得到相同的按钮顺序(否 - 取消 - 是)。我查看了AlertButtonButtonType 的 API 文档,可惜没有找到答案。

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

【问题讨论】:

    标签: user-interface javafx-8 alert


    【解决方案1】:

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

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

    然后当您创建警报时。

    alert.setDialogPane(new FixedOrderButtonDialog());
    

    【讨论】:

      【解决方案2】:

      请查看Enter Key Event Is Not Working On Dialog In Javafx? 的答案,不过我想这个答案更适合这个问题,并且可能无法完全解释发生了什么。另请阅读ButtonBar javadoc

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-12-22
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-12
        • 1970-01-01
        • 2012-02-01
        • 1970-01-01
        相关资源
        最近更新 更多