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.
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.