改变整个场景的亮度

时间:2017-03-13 21:47:14

标签: java javafx

我正在尝试更改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 个答案:

答案 0 :(得分:0)

奇怪的是,这似乎是通过向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);