有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有透明滚动窗格的java透明阶段不透明

这里我有一个方法,它可以生成一个舞台,这个舞台应该是透明的,有一堆矩形组成的滚动窗格

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

这是上面的代码在执行阶段时的输出。show()被调用为:

enter image description here

这个舞台会在一个新窗口中弹出,但正如您所看到的,背景是白色的,无法透过。我感觉滚动窗格或流窗格有问题,因为只要有StageStyle.TRANSPARENT和一个方块,方块就会弹出,没有任何白色背景

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

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


共 (1) 个答案

  1. # 1 楼答案

    这是因为ScrollPane的视口没有接收到透明背景

    如果应用以下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启动,你需要使用^{}

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