UNIFIED StageStyle 和 Transparent Scene 产生黑色背景而不是透明

UNIFIED StageStyle and Transparent Scene produce black background instead of transparent

JavaFX 8 具有 StageStyle.Unified,可以创建 OS X 风格的统一工具栏。我已经测试了以下代码在 JDK 8u5 中正常工作。(场景背景是透明的,按钮出现在舞台背景上。)

但是在 JDK 8u25 和 JDK 8u31 中有一个奇怪的行为。场景背景变黑。 将场景颜色更改为透明以外的任何颜色都可以正常工作,它会显示该颜色。

除非我遗漏了什么,否则它对我来说就像是一个错误, 有什么想法吗?

public class UnifiedTest extends Application {

@Override
public void start(Stage primaryStage) {

    StackPane testPane = new StackPane();
    testPane.setStyle("-fx-background-color:transparent;");

    Label someText = new Label("TEXT AGAINST TRANSPARENT SCENE");
    testPane.getChildren().add(someText);

    Scene myScene = new Scene(testPane,500,500);
    myScene.setFill(Color.TRANSPARENT);



    primaryStage.setScene(myScene);
    primaryStage.initStyle(StageStyle.UNIFIED);
    primaryStage.setTitle("Application");
    primaryStage.show();
}


/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

}

更多信息:

舞台背景是指 OS 提供的 window 的背景。

我正在尝试创建一个统一的工具栏。根据 JavaFX 8 API 的方法是使用 StageStyle.UNIFIED。这将给出 OSX.

提供的 window

没有添加场景时是这样的: http://imgur.com/iHEiVf0,fMbFr4e,bFSL8bA

然而,当我设置填充(Color.TRANSPARENT)时,场景背景变为黑色: http://imgur.com/iHEiVf0,fMbFr4e,bFSL8bA#2

期望的结果是在第一个 link 的背景下看到文本。它适用于 JDK 8u5,但现在我使用的是 8u31,而不是灰色,我变成了黑色。奇怪的是,如果我设置填充(Color.RED),背景会按预期变为红色

来自 JavaFX 8 api: public static final StageStyle 统一 定义带有平台装饰的舞台样式,并消除客户区和装饰之间的边界。客户区背景与装饰统一。这是一个有条件的功能,要检查它是否受支持,请参阅 Platform.isSupported(javafx.application.ConditionalFeature)。如果平台不支持该功能,则此样式降级为 StageStyle.DECORATED ` 注意:要查看覆盖舞台的场景的效果,应具有 Color.TRANSPARENT

看起来这是一个错误,已为 Java 8u60 修复:

Kevin Rushforth 对错误跟踪器的评论:

It looks like the regression was introduced some time in 8u20.