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 的某个时候引入的。