改变整个场景的亮度
Posted
技术标签:
【中文标题】改变整个场景的亮度【英文标题】:Change brightness of whole scene 【发布时间】:2017-08-04 01:58:55 【问题描述】:我正在尝试在 javafx 中更改整个场景的亮度。这是我的代码目前的样子:
public void start(Stage primaryStage)
StackPane root = new StackPane();
Rectangle rec1 = new Rectangle();
rec1.setWidth(300);
rec1.setHeight(300);
rec1.setFill(javafx.scene.paint.Color.RED);
ColorAdjust colorAdjust = new ColorAdjust();
colorAdjust.setBrightness(-0.8);
root.setEffect(colorAdjust);
Scene scene = new Scene(root, 1920, 1080);
root.getChildren().add(rec1);
primaryStage.setFullScreen(true);
primaryStage.setScene(scene);
primaryStage.show();
问题是,像这样只改变矩形的亮度,而不是整个场景的亮度。我还需要改变“背景”的亮度。有什么办法吗?
【问题讨论】:
【参考方案1】:奇怪的是,这似乎是通过向StackPane
添加一个节点来解决的,以便它可以调整所有内容的颜色,而不仅仅是形状。当形状是唯一可见的东西时,这就是ColorAdjust
ed。必须至少存在一个Node
。将一行更改为以下内容将满足您的要求:
root.getChildren().addAll(rec1, new Label());
但是,这可能会对您的项目产生影响,即使它是空的,也会稍微改变一些东西。我们可以通过将其设为 invisible and not-managed 来解决此问题,这样在布局计算中就不会考虑它。
Label fix = new Label("Fix colorAdjust whole scene.");
fix.setVisible(false);
fix.setManaged(false);
Scene scene = new Scene(root, 500, 500);
root.getChildren().addAll(rec1, fix);
【讨论】:
以上是关于改变整个场景的亮度的主要内容,如果未能解决你的问题,请参考以下文章