2016-06-09 71 views
3

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

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

+1

[磨砂玻璃的影响JavaFX的?]的可能的复制(http://stackoverflow.com/questions/22622034/frosted-glass-effect-in-javafx) – Itai

+0

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

回答

5

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(); 
}