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而不是那个灰色我变黑了。奇怪的是,如果我设置了填充(Color.RED)背景变为预期的红色
来自JavaFX 8 api: public static final StageStyle UNIFIED 使用平台装饰定义舞台样式,并消除客户区和装饰之间的边界。客户区背景与装饰统一。这是一个条件功能,用于检查是否支持它,请参阅Platform.isSupported(javafx.application.ConditionalFeature)。如果平台不支持该功能,则此样式将降级为StageStyle.DECORATED `注意:要查看场景覆盖舞台的效果应该具有Color.TRANSPARENT
答案 0 :(得分:0)
看起来这是一个针对Java 8u60修复的错误:
Kevin Rushforth对错误跟踪器发表评论:
看起来回归是在8u20的某个时候引入的。