JavaFX 模糊整个窗口

标签 java javafx javafx-8

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

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

alt

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


我的代码是:

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 的重复问题因为我认为提供的解决方案具有相同的边缘效应,但它不是那么清晰可见,因为表单的内容不像这里那么暗。

最佳答案

场景fill设置为背景色。

在下面的示例中,您可以在无填充 (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();
}

关于JavaFX 模糊整个窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37730725/

相关文章:

java - 已检查和未检查的自定义异常

java - SimpleDateFormat 中的“L”字符模式

java - SceneBuilder 坐标与 JavaFX 坐标

java - 如何在 JavaFX 中使代码定期刷新?

java - 关于javaFX,需要将 ListView 内的节点与最右侧对齐

JavaFX面纱屏幕

java - 创建自定义 Flowable 任务

Java 游戏开发 - Sprite 碰撞?

javafx - 在 JavaFX 中强制立即绘制

java - JavaFX 中的 FileChooser 给出 NullPointerException