【发布时间】:2015-04-01 23:52:16
【问题描述】:
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 提供的窗口。
没有添加场景时是这样的: http://imgur.com/iHEiVf0,fMbFr4e,bFSL8bA
但是,当我 setFill(Color.TRANSPARENT) 时,场景背景变为黑色: http://imgur.com/iHEiVf0,fMbFr4e,bFSL8bA#2
期望的结果是在第一个链接的背景下看到文本。它适用于 JDK 8u5,但现在我使用的是 8u31,而不是灰色,而是黑色。奇怪的是,如果我 setFill(Color.RED) 背景变成了预期的红色
来自 JavaFX 8 api: 公共静态最终舞台风格统一 用平台装饰定义舞台风格,消除客户区和装饰之间的边界。客户区背景与装饰统一。这是一个条件特性,要检查它是否受支持,请参见 Platform.isSupported(javafx.application.ConditionalFeature)。如果平台不支持该功能,则此样式降级为 StageStyle.DECORATED ` 注意:要查看覆盖舞台的场景应该具有 Color.TRANSPARENT 的效果
【问题讨论】:
-
这是什么意思:“场景背景是透明的,按钮出现在舞台背景上”? JavaFX中没有舞台的背景属性,什么是“舞台背景”?你能提供 8u5 和 8u31 窗口的屏幕截图吗?如果您在 StackOverflow 上没有足够的声誉以在您的问题中包含图片,您可以将它们上传到 imgur.com。
-
太好了,这很有帮助。对我来说,这似乎是一个损坏的功能。在以下位置记录针对运行时项目的错误报告:javafx-jira.kenai.com。
-
非常感谢您查看。我在抓挠我的头,我错过了什么..