2014-01-09 108 views
3

我想將我的javafx2應用程序移植到javafx8,但注意到有一些彈出式控件在Linux上的問題。Javafx8彈出式透明度問題

screenshot 的屏幕截圖顯示彈出如何周圍有一個白框,通常應該是透明和陰影效果。 這隻發生在我的Slackware14 Linux上,我測試了在同一臺機器上運行的Windows VM,並且渲染正常。

我認爲這個問題是有關這些問題的 https://javafx-jira.kenai.com/browse/RT-33709 https://javafx-jira.kenai.com/browse/RT-33750

我的問題是有沒有什麼解決辦法,直到將固定?

回答

4

什麼問題是

默認的JavaFX 8(modena.css)沒有考慮到透明窗口功能在某些平臺上(特別是某些Linux平臺)可選。

在Java 9發佈之前,默認的css不太可能會被更改。

如何解決它

這僅是一個Java的解決方案8+。

提供您自己的CSS來覆蓋默認的CSS,以便您可以支持這些平臺,而不會在某些控件周圍顯示醜陋的白色邊框區域。您提供的CSS可以假設透明窗口不是底層平臺的一項功能,並且可以設置UI的樣式,以便它在這樣的平臺上仍然看起來不錯。由於transparent window feature是一個條件特徵,在應用程序啓動時,check to see if the conditional feature is supported,如果不是,則通過Application.setUserAgentStyleSheet()應用您的自定義樣式表。

示例應用程序

我只測試了這個在Mac(支持透明窗功能),所以我真的不能覈實Linux作爲預期它會工作,但我希望它會工作細:-)

import javafx.application.Application; 
import javafx.application.ConditionalFeature; 
import javafx.application.Platform; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.ColorPicker; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class SolidPick extends Application { 

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

    @Override public void start(Stage stage) throws Exception { 
     ColorPicker picker = new ColorPicker(); 

     if (Platform.isSupported(ConditionalFeature.TRANSPARENT_WINDOW)) { 
      Application.setUserAgentStylesheet(
       this.getClass().getResource(
         "solid-pick.css" 
       ).toExternalForm() 
      ); 
     }  

     StackPane layout = new StackPane(picker); 
     layout.setPadding(new Insets(10)); 

     stage.setScene(new Scene(layout)); 
     stage.show(); 
    } 

} 

然後該文件solid-pick.css整個modena.css與追加到末尾以下附加行的精確副本:

.color-palette { 
    -fx-background-radius: 0, 0; 
    -fx-effect: null; 
} 

這些行:

  1. 給拾色器彈出一個方形的背景,而不是圓形的一個。
  2. 消除通常圍繞彈出框的半透明陰影效果。

這些東西的組合提供了彈出窗口的形狀和邊框,在沒有提供透明窗口的環境中看起來好多了。

solid-pick.css文件應該放在與SolidPick應用程序相同的目錄中,以便它被捆綁到應用程序jar中,並可供應用程序類加載器使用。

樣本輸出

這裏是呈現在我的Mac有和沒有在彈出的陰影效果邊框的一些示例輸出。

標準渲染=>

standard rendering

修改渲染,有方形邊框和沒有影子=>

rendering without shadow

建議的方法

通過你的整個應用程序轉到(可能整個modena.css樣式表),並使用類似於上述顏色選擇器的方法,修復在透明窗口不可用的環境中出現的任何渲染問題。然後在應用程序中使用生成的樣式表(如果許可證允許),通過將自定義樣式表提交給第三方項目(如ControlsFX)將其提交給社區。