【问题标题】:Set image on left side of dialog在对话框左侧设置图像
【发布时间】:2015-04-01 14:27:35
【问题描述】:

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

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

}

我对如何在对话框左侧设置图像感兴趣。

有人设法改变图像的侧面吗?

【问题讨论】:

  • 截图?哪张图?
  • 请发布其他人可以运行的代码。没有人可以访问您的图像文件。
  • @James_D 帖子已更新
  • 为什么是 javafx-2 标签?它是 8u40 中的新 api,不是吗?

标签: javafx javafx-2 javafx-8


【解决方案1】:

如果您查看标题是如何构造的,您会发现一个 GridPane 节点在左侧布局一个 Label 和一个用于图标的 StackPane

如果您想通过代码反转单元格顺序,您可以这样做,但每次调用 updateHeaderArea() 时都会覆盖它。

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

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

提供一个header,左边有一个图标和一个标签,还有一个空图形。

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

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

这就是你将看到的:

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多