统一舞台样式和透明场景产生黑色背景而不是透明背景



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

}

更多信息:

通过阶段背景,我的意思是操作系统提供的窗口的背景。

我正在尝试创建一个统一的工具栏。根据JavaFX 8 API,方法是使用StageStyle.UNIFIED。这将提供一个由OSX提供的窗口。

没有添加场景时看起来像这样:https://i.stack.imgur.com/ObLHa.png

但是,当我设置填充(颜色透明)时,场景背景变为黑色:https://i.stack.imgur.com/ObLHa.png#2

所需的结果是在第一个链接的背景下查看文本。它适用于JDK 8u5,但现在我使用的是8u31,而不是灰色,我变成了黑色。奇怪的是,如果我设置填充(颜色.RED),背景会像预期的那样变成红色

从 JavaFX 8 api:公共静态最终舞台风格统一定义具有平台装饰的舞台样式,并消除工作区和装饰之间的边界。工作区背景与装饰统一。这是一个条件功能,要检查它是否受支持,请参阅 Platform.isSupported(javafx.application.ConditionalFeature)。如果平台不支持该功能,则此样式将降级为 StageStyle.DECORATED' 注意:要查看效果,覆盖舞台的场景应具有"颜色.透明"

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

  • JDK-8095040 StageStyle.UNIFIED 在 OSX 10.9.5 上不起作用

Kevin Rushforth评论了bug跟踪器:

看起来回归是在 8u20 的某个时候引入的。

最新更新