JavaFX 2 -fx-effect打破了不透明度

时间:2013-02-02 21:13:57

标签: javafx-2

是否有其他人发现在样式中添加-fx-effect会阻止不透明效果?

这是一个简单的例子

public class TestGUI extends Application {

@Override
public void start(final Stage primaryStage) {

    Line line = LineBuilder.create()
            .startX(150)
            .startY(0)
            .endX(150)
            .endY(250)
            .build();

    Button btn = ButtonBuilder.create()
            .text("Open countdown!")
            // this breaks the opacity!
            .style("-fx-effect: dropshadow(three-pass-box, grey, 5, 0.5, 2, 5);")
            .opacity(0.6)
            .build();

    btn.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            System.out.println("Button clicked");
        }
    });

    StackPane root = new StackPane();
    root.getChildren().addAll(line, btn);

    Scene scene = new Scene(root, 300, 250);

    primaryStage.setTitle("Test Application");
    primaryStage.setScene(scene);
    primaryStage.show();
}

public static void main(String[] args) {
    launch(args);
}

}

取出style子句,您可以通过按钮看到该行。

这是一个错误还是我错过了什么。

1 个答案:

答案 0 :(得分:1)

阴影实际上是半透明节点的阴影和半透明本身,但是因为您在半透明阴影的顶部层叠半透明节点,所以整体结果仍然是半透明的,但是比没有应用阴影时更不透明。节点。类似于分层两个50%的不透明节点。两个分层节点的交叉区域将是75%不透明。

在样本中,将不透明度设置为0.6,因此节点+阴影的组合不透明度为0.6 + 0.4 * 0.6 = 0.84。此外,阴影的颜色比受影响的节点更暗。这使得很难看到受影响节点后面的线 - 但你仍然可以看到它,因为节点+它的效果不是完全不透明的。为了更清楚地显示发生的情况,我将样本的不透明度设置为0.2,使组合不透明度为0.36。您可以在下面的屏幕截图中看到结果,其中受影响节点后面的线仍然清晰可见。

translucent effect

通常情况下,阴影和不透明节点在视觉上不会混合在一起看起来很好看