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

时间:2016-04-16 11:47:41

标签: user-interface javafx-8 alert

我需要让用户确认是否正在采取行动。确认对话框的按钮组为“是”,“否”和“取消”。我的代码如下:

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

给了我

Asking Yes/No/Cancel confirmation

我面临的问题是,无论我为ButtonType指定Alert的顺序,我都会得到相同的按钮顺序(否 - 取消 - 是)。我看了AlertButtonButtonType的API文档,唉,不是为了找到答案。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

检查答案:Enter Key Event Is Not Working On Dialog In Javafx?,虽然我猜这个答案更恰当地属于这个问题,也许并不能完全解释发生了什么。另请阅读ButtonBar javadoc

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

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

  

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

我的建议是:不要尝试自定义按钮顺序,而是应用系统默认顺序。按钮顺序已预先配置为与各种操作系统的对话框的标准按钮布局相匹配。重新排序按钮以偏离该标准可能会使您的应用程序稍微让用户感到困惑(尽管这是一个非常主观的意见)。