【问题标题】:JavaFX blur whole windowJavaFX 模糊整个窗口
【发布时间】:2016-06-09 15:48:02
【问题描述】:

我正在尝试在我的应用程序中实现类似 modal popus 的东西。为了让它们更清晰,我决定模糊整个窗口并将 popus 放在它前面。

问题在于,JavaFX 模糊在应用于整个窗口时会产生伪影:

注意白色边框——它不应该存在。


我的代码是:

public void enableBlur() {
    ColorAdjust adj = new ColorAdjust(0, -0.9, -0.5, 0);
    GaussianBlur blur = new GaussianBlur(55); // 55 is just to show edge effect more clearly.
    adj.setInput(blur)
    rootPanel.setEffect(adj);
}

所以效果被应用到根内容面板。


P.S. 这个问题不是 this 的重复,因为我认为提供的解决方案具有相同的边缘效应,但由于表单的内容不是那么暗,所以它不是那么清晰可见和这里一样。

【问题讨论】:

  • 我尝试拍摄快照,然后模糊快照。但它不起作用。此外,我认为该解决方案中也存在边缘效应。然而,它更微妙,因为背景是浅色的,边框效果是白色的。

标签: java javafx javafx-8


【解决方案1】:

Scenefill设置为背景色。

在以下示例中,您可以在无填充 (null) 和背景颜色 (Color.BLACK) 之间切换(如果您可以通过该模糊效果找到按钮)。

@Override
public void start(Stage primaryStage) {
    Button btn = new Button("If you can read this, the blur isn't working!");

    StackPane root = new StackPane();
    root.getChildren().add(btn);
    root.setStyle("-fx-background-color: black;");
    ColorAdjust adj = new ColorAdjust(0, -0.9, -0.5, 0);
    GaussianBlur blur = new GaussianBlur(55); // 55 is just to show edge effect more clearly.
    adj.setInput(blur);
    root.setEffect(adj);

    Scene scene = new Scene(root, 500, 200, null);

    btn.setOnAction((ActionEvent event) -> {
        scene.setFill(scene.getFill() == Color.BLACK ? null : Color.BLACK);
    });

    primaryStage.setScene(scene);
    primaryStage.show();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2012-04-17
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多