在对话框中的按钮下添加文本

Jac*_*cks 1 dialog javafx

我想知道是否有办法在对话框的按钮下显示一些文字(如信息)?我在许多地方看过,但即使对齐按钮看起来很乱(从这篇文章).

这就是我现在所得到的.我只想在2个按钮下面的"设置我的选择..."文本.

对话简单

我在文档中查找了一个函数,可以帮助我显示我想要的方式(比如" getButtonBar()"或类似的东西).ButtonBar对于我想要实现的目标而言,创建新的东西似乎有点复杂.

我还尝试创建一个看起来像对话框的舞台,但是我需要以与Dialogs 一样的方式点击"是/否"来传递结果.

有没有办法实现我想要的?或者我必须自己完全构建它?谢谢 !

Jam*_*s_D 5

只需覆盖以下createButtonBar()方法DialogPane:

DialogPane pane = new DialogPane() {
    @Override
    public Node createButtonBar() {
        VBox vbox = new VBox(5);
        vbox.setAlignment(Pos.BOTTOM_RIGHT);
        vbox.setPadding(new Insets(5));
        vbox.getChildren().add(super.createButtonBar());
        vbox.getChildren().add(new Label("Additional text"));
        return vbox ;
    }
};
Run Code Online (Sandbox Code Playgroud)

这是一个SSCCE:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Dialog;
import javafx.scene.control.DialogPane;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class CustomDialogPaneTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button button = new Button("Show Dialog");
        button.setOnAction(e -> {
            DialogPane pane = new DialogPane() {
                @Override
                public Node createButtonBar() {
                    VBox vbox = new VBox(5);
                    vbox.setAlignment(Pos.BOTTOM_RIGHT);
                    vbox.setPadding(new Insets(5));
                    vbox.getChildren().add(super.createButtonBar());
                    vbox.getChildren().add(new Label("Additional text"));
                    return vbox ;
                }
            };

            CheckBox checkBox = new CheckBox("A check box");
            pane.setContent(checkBox);
            pane.setHeaderText("The header");
            pane.getButtonTypes().addAll(ButtonType.YES, ButtonType.NO);

            Dialog<ButtonType> dialog = new Dialog<>();
            dialog.setDialogPane(pane);
            dialog.showAndWait().ifPresent(System.out::println);
        });

        StackPane root = new StackPane(button);
        root.setPadding(new Insets(20));
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述