2013-02-02 26 views
1

其他人發現在樣式中添加-fx效果可防止不透明工作?JavaFX 2 -fx效果打破不透明

下面是一個簡單的例子

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

陰影實際上是半透明節點和半透明本身的陰影,但由於您在半透明陰影上層疊了半透明節點,因此總體結果仍然是半透明的,但比未應用陰影更加不透明到節點。類似於分層兩個50%的不透明節點。兩個分層節點的相交面積將爲75%不透明。

在您的示例中,將不透明度設置爲0.6,因此節點+陰影的不透明度爲0.6 + 0.4 * 0.6 = 0.84。此外,陰影是比起受影響節點更深的顏色。這使得很難看到受影響節點後面的行 - 但仍然可以看到它,因爲節點+它的效果不完全不透明。爲了更清楚地說明發生了什麼,我將樣品的不透明度設置爲0.2,使混合不透明度爲0.36。您可以在下面的屏幕截圖中看到結果,其中受影響的節點後面的行仍清晰可見。

translucent effect

一般來說,陰影和不透明的節點來可視化不混合,並期待所有的好起來

+0

偉大的答案 - 謝謝!無論如何,我可能會對美感產生一些影響,但是你的對,這兩種效果並沒有很好地結合在一起。我想象的最可能的是隻有通常看到的陰影部分的效果,即我應該畫一條線和RH側,然後模糊它。 –