JavaFX将效果应用于除特定节点

时间:2018-01-08 13:29:51

标签: java javafx javafx-8 nodes

我希望通过模糊除了这些特定节点之外的整个场景来突出显示某些形状。

我尝试创建一个包含场景中所有节点的ArrayList,删除那些我想要保持锐利并且模糊其余节点的节点。我使用这种方法的问题是,Shapes位于几层窗格中,由于包含在我的ArrayList中而变得模糊。

我的方法或多或少看起来像这样:

private void createBlurredNodesArrayList(){
    for (Node node : borderPane.getChildrenUnmodifiable()) {
        blurredNodes.add(node);
    }
    blurredNodes.removeAll(colorCircles);
    blurredNodes.removeAll(playerNameTexts);
}

private void blur() {
    GaussianBlur gb = new GaussianBlur(BLURRADIUS);
    for (Node blurredNode : blurredNodes) {
        blurredNode.setEffect(gb);
    }
}

是否有一个优雅的解决方案(例如,只是将所有节点放在"最低级别"场景并删除形状)或者我是否需要一个丑陋的,硬编码的?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您需要做的是删除您不想模糊的节点的所有父节点,如果他们有父节点,则删除它们。你可以试试像

这样的东西
Node nodeToRemove = colorCircles;
while(nodeToRemove !=null){
    blurredNodes.remove(nodeToRemove);
    nodeToRemove = nodeToRemove.getParent());
}