2013-02-20 65 views
19

我正在嘗試創建一個啓動畫面,就像我提供的示例一樣。 看來,AnchorPane不允許透明的背景,我已經嘗試設置AnchorPane-fx-background-color: rgba(255,0,255,0.1) ;但對CSS的白色背景仍然顯示。如何在JavaFX中創建具有透明背景的啓動畫面

所有我在我的FXML文件是ImageView的一個AnchorPane與包含PNG圖像

Example

我到處找,但找不到任何解決方案,任何幫助,將不勝感激。由於

回答

19

試試這個JavaFX splash sample的問題#1創建:Designing a splash screen (java)。還有一個follow up sample,它還提供應用程序初始化進度反饋。

的JavaFX確實提供了Preloader接口從飛濺順利轉移到應用程序,但上述樣本不利用它。

上面的飛濺樣品也沒有做透明效果,但這dialog sample顯示如何做到這一點,你可以結合它與以前的飛濺樣品得到你想要的效果。

  1. stage.initStyle(StageStyle.TRANSPARENT)

    透明效果通過創建。

  2. scene.setFill(Color.TRANSPARENT)
  3. 確保您的根節點不是不透明的正方形矩形。

這是謝爾蓋的樣品中的所有證明。

相關問題:

更新2016年4月根據其他問題

在前臺預加載圖像心不是。我試過stage.toFront(),但沒有幫助。

在Java 8u20 stage.setAlwaysOnTop(true)中創建了一個新的API。我更新了linked sample以在初始啓動畫面上使用此功能,這有助於更順利地切換到主屏幕。

對於Java8 +

對於modena.css(默認JavaFX的外觀和使用Java 8感受到定義),輕微的陰影背景中引入了所有的控制(如果一個控件加載也窗格)。

您可以通過指定默認背景是透明的來刪除它。這可以通過添加以下行到應用程序的CSS文件來完成:

.root { -fx-background-color: transparent; } 

如果你願意,你可以使用CSS樣式類和規則或使用setStyle調用(如表現在謝爾蓋的回答),以確保設置僅適用於啓動畫面的根目錄,而不適用於所有應用程序畫面。

見相關:

+1

+1提前預加載器 – Puce 2013-02-20 09:31:03

+0

謝謝你們!這兩個答案都很好,但是'scene.setFill(Color.TRANSPARENT).'你不需要指定場景的寬度和高度 – francisOpt 2013-02-20 20:04:38

+0

當舞臺顯示時,我正在經歷一個毫秒級的輕彈,背景可見。我設法解決這個問題,通過調用: 'root.setCache(true); root.setCacheHint(CacheHint.SPEED);'_(其中root是父實例)_。 – stuchl4n3k 2014-09-04 16:50:34

13

你需要有透明爲StageScenePane本身沒有顏色。

public void start(Stage primaryStage) { 
    Button btn = new Button("Say 'Hello World'"); 

    AnchorPane root = new AnchorPane(); 
    root.getChildren().add(btn); 

    // Java 8: requires setting the layout pane background style to transparent 
    // https://bugs.openjdk.java.net/browse/JDK-8092764 
    // "Modena uses a non-transparent background by default" 
    root.setStyle("-fx-background-color: transparent;"); 

    Scene scene = new Scene(root, 300, 250, Color.TRANSPARENT); 
    primaryStage.initStyle(StageStyle.TRANSPARENT); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 
+0

我如何單元測試此。我只是試圖單元測試,但它不顯示fx應用程序線程錯誤。 – vinay 2015-03-24 09:42:56

+0

@vinay看看下面的問題:http://stackoverflow.com/questions/11385604/how-do-you-unit-test-a-javafx-controller-with-junit和http://stackoverflow.com/問題/ 10599724/gui-testing-framework-for-javafx-2/10600676 – 2015-03-24 13:56:00