javafx - 如何使 JavaFX 场景中的内容透明?

标签 javafx transparent

下面的程序是我实际尝试实现的示例。 enter image description here

我想做的是在 JavaFX 中重新创建上面的图片。但是我遇到了困难,因为当我将舞台的内容设置为透明时,它实际上并没有变得透明,它仍然是白色的。

@Override
public void start(Stage stage) {        
    try {
        BorderPane root = new BorderPane();

        Scene scene = new Scene(root,400,400);

        root.setStyle("-fx-background-color: rgba(0,0,0,0);");

        scene.setFill(Color.TRANSPARENT);

        stage.setScene(scene);
        stage.show();
    } catch(Exception e) {
        e.printStackTrace();
    }
}

从这段代码中可以看到舞台。我还将内容设置为透明,并将根 Pane 的默认样式更改为透明。

我不明白为什么这不起作用,我将内容设置为透明但背景仍然不透明。

我发布的代码的结果显示了这一点,如您所见,它不是透明的。

enter image description here

最佳答案

这个问题几乎是重复的:

不同之处在于它还要求保留 native 窗口装饰,这对于 StageStyle.TRANSPARENT 是不可能的。 .

如果您仔细查看问题中提供的示例窗口,装饰区域会略有不同(例如,一个在左上角包含一个舞台图标,另一个则没有)。我的猜测是问题中描绘的透明窗口实际上根本没有使用操作系统窗口装饰,而是呈现自己的装饰,看起来很像操作系统窗口装饰(虽然这只是一个猜测)。

无论如何,要使用 JavaFX 实现类似的效果,有必要使用 JavaFX 来呈现窗口装饰,而不是操作系统窗口管理器。为此,请引用以下问题:

特别是看看 Undecorator 库:

您永远无法使窗口装饰与操作系统窗口管理器装饰完全匹配,但您可以创建外观不同但功能相似的东西。如果你努力工作,你可能能够实现与操作系统窗口装饰非常匹配的东西,类似于你问题中的窗口截图。不过,如果是我,我会选择一种不同的外观,它仍然干净且用户容易理解,类似于 Undecorator 提供的默认外观。

Do you think this could be pulled off by creating an ImageView and using some sort of stage listener so when the stage is moved the imageview displays a new image of what's behind the application? Or is that overly complicating it?

将背景捕获到 imageView 方法是一种合理的替代方法。

如果您确实想使用 imageView 捕获方法,您可以使用以下答案中的一些想法:

请注意,上面链接的 imageView 捕获类型答案不会完全完成您想要的,您仍然需要做一些额外的自定义工作才能在您移动舞台或桌面或窗口时获得您需要的效果你的窗口改变了。可能您可能需要求助于 JavaFX 之外的逻辑来完全实现您的目标,而关于如何做到这一点的讨论超出了我准备(或能够)在这里讨论的范围。

无论你做什么,它都很复杂,我真的没有在 undecorator 或 imageView 捕获方法之间推荐。


也许如果您混合使用 JavaFX 和 Swing/AWT,您可以使用 JFXPanel 来完成此操作和 AWT PERPIXEL_TRANSPARENT特征。我还没有尝试过这个组合,但是 AWT 的每像素设置在 this oracle sample 中进行了演示。如 How to Implement Per-Pixel Translucency 中所述.

关于javafx - 如何使 JavaFX 场景中的内容透明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38110420/

相关文章:

java - 如何从 JavaFX webviewer 中的一串 html 代码加载网页?

java - 向 TableColumn 添加自定义排序算法

JavaFX 文本双下划线间距

java - Java 8 b-124 的 javafx 中的嵌套列标题错误

android - 在 Canvas 上绘制透明形状

javascript - Noty(通知库)对话框具有透明背景 - AngularJS Web 应用程序

java - 如何修复UnsatisfiedLinkError?

android - 工具栏不会在透明状态栏下滚动

android - 在位图上制作透明 Canvas

javascript - png图像的透明区域没有悬停 Action html css