作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用标准的 JavaFX Alert
包含“不再询问”复选框的确认对话框类。这可能吗,还是我必须创建一个自定义 Dialog
从头开始?
我尝试使用 DialogPane.setExpandableContent()
方法,但这并不是我真正想要的 - 这会在按钮栏中添加一个隐藏/显示按钮,并且复选框出现在对话框的主体中,而我希望复选框出现在按钮栏中。
最佳答案
是的,这是可能的,只需做一点工作。您可以覆盖 DialogPane.createDetailsButton()
返回您想要的任何节点来代替隐藏/显示按钮。诀窍是您需要重建Alert
之后,因为您将摆脱Alert
创建的标准内容。 .你还需要愚弄DialogPane
考虑有扩展的内容,以便它显示您的复选框。这是创建 Alert
的工厂方法示例带有选择退出复选框。复选框的文本和操作是可定制的。
public static Alert createAlertWithOptOut(AlertType type, String title, String headerText,
String message, String optOutMessage, Consumer<Boolean> optOutAction,
ButtonType... buttonTypes) {
Alert alert = new Alert(type);
// Need to force the alert to layout in order to grab the graphic,
// as we are replacing the dialog pane with a custom pane
alert.getDialogPane().applyCss();
Node graphic = alert.getDialogPane().getGraphic();
// Create a new dialog pane that has a checkbox instead of the hide/show details button
// Use the supplied callback for the action of the checkbox
alert.setDialogPane(new DialogPane() {
@Override
protected Node createDetailsButton() {
CheckBox optOut = new CheckBox();
optOut.setText(optOutMessage);
optOut.setOnAction(e -> optOutAction.accept(optOut.isSelected()));
return optOut;
}
});
alert.getDialogPane().getButtonTypes().addAll(buttonTypes);
alert.getDialogPane().setContentText(message);
// Fool the dialog into thinking there is some expandable content
// a Group won't take up any space if it has no children
alert.getDialogPane().setExpandableContent(new Group());
alert.getDialogPane().setExpanded(true);
// Reset the dialog graphic using the default style
alert.getDialogPane().setGraphic(graphic);
alert.setTitle(title);
alert.setHeaderText(headerText);
return alert;
}
prefs
是一些保存用户选择的偏好商店
Alert alert = createAlertWithOptOut(AlertType.CONFIRMATION, "Exit", null,
"Are you sure you wish to exit?", "Do not ask again",
param -> prefs.put(KEY_AUTO_EXIT, param ? "Always" : "Never"), ButtonType.YES, ButtonType.NO);
if (alert.showAndWait().filter(t -> t == ButtonType.YES).isPresent()) {
System.exit();
}
关于javafx - 如何创建带有 "Do not ask again"复选框的 JavaFX 警报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36949595/
我是一名优秀的程序员,十分优秀!