【问题标题】:How to remove the background of a dialog?如何去除对话框的背景?
【发布时间】:2017-11-09 08:38:03
【问题描述】:

我创建了一个自定义对话框,其中包含我自己的窗格和控件。但是对话框有一个白色边框默认值,我想删除它。这是一个带有单个图像的示例:

我尝试使用 ScenicView 但找不到捕获对话框层并对其进行修改的方法:

public class MainView extends View {

    Image img = new Image("https://i.stack.imgur.com/7bI1Y.jpg", 300, 500, true, true);

    public MainView(String name) {
        super(name);

        Button b = new Button("Pop");
        b.setOnAction(e -> {
            Dialog<Void> dialog = new Dialog<>();
            dialog.setOnShown(e2 -> {
                Parent parent = getParent();
                Pane p = (Pane) parent.lookup(".dialog");
                p.setPadding(new Insets(0));
            });
            dialog.setGraphic(new ImageView(img));
            dialog.showAndWait();
        });
        setCenter(b);
    }
}

我得到的最好的方法是移除流窗格子以移除一些下部

dialog.setOnShown(e2 -> {
    Parent parent = getParent();
    Pane p = (Pane) parent.lookup(".dialog");
    p.getChildren().removeIf(c -> (c instanceof FlowPane));
    System.out.println(p.getChildren());
});

删除 VBox 会移动我不想做的对话框并更改其填充也没有任何作用。

【问题讨论】:

    标签: gluon-mobile


    【解决方案1】:

    正如您在 ScenicView 中看到的那样,Dialog 具有 dialog 样式类。

    修改对话框样式的一种简单方法是通过 css。只需将 css 文件添加到您的视图中,然后设置:

    .dialog {
        -fx-background-color: transparent;
    }
    

    这将设置背景透明,而不是默认的白色。

    如果您想删除边框,则可以使用填充。正如您还可以在 ScenicView 中看到的那样,对话框有一个样式类为 container 的 VBox,用于中心的内容,以及底部的按钮的流窗格,样式类为 dialog-button-bar

    在任何事情之前,只需使用setContent 方法添加图像,而不是setGraphic 一个:

    dialog.setContent(new ImageView(img));
    

    这将需要删除所有边框,并让图像占据整个对话框:

    .dialog,
    .dialog > .container,
    .dialog > .dialog-button-bar {
        -fx-padding: 0;
    }
    

    【讨论】:

    • 所以没有办法像我尝试的那样以编程方式做到这一点?
    • 我没有看到使用 css 的问题?当您以编程方式执行此操作时,问题是应用在对话框上的 Gluon 默认 css,因此无论您尝试如何设置填充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2021-12-19
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多