我正在尝试更改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();
}
问题是,像这样只有矩形的亮度会改变,而不是整个场景的亮度。我还需要改变“背景”的亮度。有没有办法做到这一点?
答案 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);