在对话框的左侧设置图像 [英] Set image on left side of dialog

查看:136
本文介绍了在对话框的左侧设置图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我为JavaFX8u40的JavaFX警报对话框创建了这个非常简单的示例。

I created this very simple example for JavaFX alert dialog for JavaFX8u40.

public class MainApp extends Application
{
    public static void main(String[] args)
    {
        Application.launch(args);
    }

    private Stage stage;

    @Override
    public void start(Stage primaryStage) throws Exception
    {
        Button create = new Button("Create Alert");
        create.setTooltip(new Tooltip("Create an Alert Dialog"));
        create.setOnAction(e ->
        {
            createAlert();
        });

        primaryStage.setScene(new Scene(create));
        primaryStage.show();

        stage = primaryStage;
    }

    protected Alert createAlert()
    {
        Alert alert = new Alert(AlertType.WARNING);
        Image image1 = new Image("http://www.mcaprojecttraining.com/images/java-big-icon.png");

        ImageView imageView = new ImageView(image1);

        alert.setGraphic(imageView);
        alert.initModality(Modality.APPLICATION_MODAL);
        alert.initOwner(stage);
        alert.getDialogPane().setContentText("Some text");

        alert.showAndWait()
            .filter(response -> response == ButtonType.OK)
            .ifPresent(response -> System.out.println("The alert was approved"));

        return alert;
    }

}

我很感兴趣将图像设置在对话框的左侧。

I'm interested how I can set the image on the left side of the dialog.

是否有人设法更改图像的一面?

Did someone manage to change the side of the image?

推荐答案

如果您看看如何构造标头,您将找到一个 GridPane 节点来布局 Label <左边是/ code>,图标是 StackPane

If you have a look at how the header is constructed, you'll find a GridPane node to layout a Label on the left and a StackPane for the icon.

如果你想要扭转单元格按代码排序,您可以这样做,但每次调用 updateHeaderArea()时都会覆盖它。

If you want to reverse the cells order by code, you can do it, but it will be overriden every time updateHeaderArea() is called.

我的建议是使用这个公共API:

My suggestion is using this public API:

dialogPane.setHeader(Node header);
dialogPane.setGraphic(Node graphic);

提供带有图标的标题 left和一个标签,以及一个空图形。

providing a header with an icon on the left and a label, and a null graphic.

使用与 DialogPane 相同的方法,我们可以添加另一个 GridPane 作为标题:

Using the same approach as DialogPane, we could add another GridPane as header:

protected Alert createAlert(){
    Alert alert = new Alert(AlertType.WARNING);

    alert.initModality(Modality.APPLICATION_MODAL);
    alert.initOwner(stage);
    alert.getDialogPane().setContentText("Some text");

    DialogPane dialogPane = alert.getDialogPane();
    GridPane grid = new GridPane();
    ColumnConstraints graphicColumn = new ColumnConstraints();
    graphicColumn.setFillWidth(false);
    graphicColumn.setHgrow(Priority.NEVER);
    ColumnConstraints textColumn = new ColumnConstraints();
    textColumn.setFillWidth(true);
    textColumn.setHgrow(Priority.ALWAYS);
    grid.getColumnConstraints().setAll(graphicColumn, textColumn);
    grid.setPadding(new Insets(5));

    Image image1 = new Image("http://www.mcaprojecttraining.com/images/java-big-icon.png");
    ImageView imageView = new ImageView(image1);
    imageView.setFitWidth(64);
    imageView.setFitHeight(64);
    StackPane stackPane = new StackPane(imageView);
    stackPane.setAlignment(Pos.CENTER);
    grid.add(stackPane, 0, 0);

    Label headerLabel = new Label("Warning");
    headerLabel.setWrapText(true);
    headerLabel.setAlignment(Pos.CENTER_RIGHT);
    headerLabel.setMaxWidth(Double.MAX_VALUE);
    headerLabel.setMaxHeight(Double.MAX_VALUE);
    grid.add(headerLabel, 1, 0);

    dialogPane.setHeader(grid);
    dialogPane.setGraphic(null);

    alert.showAndWait()
        .filter(response -> response == ButtonType.OK)
        .ifPresent(response -> System.out.println("The alert was approved"));

    return alert;
}

这就是你会看到的:

这篇关于在对话框的左侧设置图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆