java - 具有透明 ScrollPane 的透明舞台不透明

标签 java javafx

这里我有一个方法,可以生成一个舞台,该舞台应该是透明的,带有一堆矩形的滚动 Pane 。

private Stage createStage()
    {
        Stage stage = new Stage(StageStyle.TRANSPARENT);

        FlowPane flw = new FlowPane();
        flw.setBackground(Background.EMPTY);

        Random gen = new Random(5);
        for (int i = 0; i < 50; i++)
        {
            int size = 50 + gen.nextInt(50);
            flw.getChildren().add(new Rectangle(size, size, Color.web("rgb(" + gen.nextInt(255) + "," + gen.nextInt(255) + "," + gen.nextInt(255) + ")")));
        }

        ScrollPane root = new ScrollPane(flw);
        root.setMaxSize(500, 500);
        root.setBackground(Background.EMPTY);

        Scene scene = new Scene(root, Color.TRANSPARENT);
        stage.setScene(scene);

        return stage;
    }

这是调用 Stage.show() 时上述代码的输出:

enter image description here

这个阶段会在一个新窗口中弹出,但正如你所看到的,背景是白色的,看不到。我感觉 ScrollPane 或 FlowPane 有问题,因为只要有 StageStyle.TRANSPARENT 和单个 Square 就会弹出没有任何白色背景的正方形。

我做错了什么?我已经尝试过这样做:

Pane.setBackground(new Background(new BackgroundFill(Color.TRANSPARENT, CornerRadii.EMPTY, Insets.EMPTY)));

最佳答案

这是由于您的 ScrollPane 的视口(viewport)未接收到透明背景

如果您应用以下 CSS:

.scroll-pane > .viewport {
   -fx-background-color: transparent;
}

在您提供的代码之上,您会得到以下内容:

enter image description here

<小时/> 您需要将样式表添加到您的项目和场景中:

例如,如果样式表位于 src 目录中

scene.getStylesheets().add("stylesheet.css");

我更喜欢添加 CSS 目录以允许稍后使用更具体的样式表:

scene.getStylesheets().add("CSS/stylesheet.css");

不要忘记,如果您从 jar 启动,则需要使用 toExternalForm()

添加样式表后,您可以通过使用 css 实现来减少用于样式化的一些 Java 代码行,这将使您的代码更易于阅读

关于java - 具有透明 ScrollPane 的透明舞台不透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37799751/

相关文章:

java - 如何在 Java for WIndows 中为 printservice 设置 DocFlavor

java - 在 Javafx 中将字段绑定(bind)到 Controller

java - 如何检查矩形节点是否在窗口中

java - 使用对象列表时设置选择框值

java - NetBeans 平台 : How to disable specific options dialog categories?

JavaFX 退出菜单项

java - Switch 类有什么用?

java - 如何将伪随机数缩放到特定范围?

java - 是否可以查看 Java 类文件字节码

java - Java中使用反射访问同级类的公共(public)方法