2014-12-06 160 views
0

爲什麼菜單欄更改場景的背景顏色的代碼樣本?它應該是藍色的,但它是白色的。菜單欄更改場景的背景顏色(的Java FX 8)

package application; 

import javafx.application.Application; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.control.MenuBar; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.paint.Color; 

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
      BorderPane root = new BorderPane(); 
      Scene scene = new Scene(root,400,400); 
      scene.setFill(Color.rgb(0, 0, 255)); 

      primaryStage.setScene(scene); 
      primaryStage.show(); 

      MenuBar menuBar = new MenuBar(); 
    } 

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

回答

1

您看到的白色背景是BorderPane的背景。這個背景顏色是在加載默認樣式表時設置的。

,因此你只能看到這個當創建MenuBar是CSS只適用(除非你強迫它)在創建第一個控件時。這是由設計,以防止加載樣式表對於不需要它們的應用程序(如遊戲或管理他們所有自己的圖形模擬)的開銷和應用CSS。由於所有的控件都是CSS樣式的,只是實例化一個控件就會強制CSS被應用。

解決方法是使BorderPane透明的背景。

要麼

root.setStyle("-fx-background-color: transparent;"); 

root.setBackground(Background.EMPTY); 

當然,因爲你必須設置根窗格的背景,你可能也設置爲藍色,與其設定的填充Scene

 BorderPane root = new BorderPane(); 
     root.setBackground(new Background(new BackgroundFill(Color.BLUE, CornerRadii.EMPTY, Insets.EMPTY))); 
     Scene scene = new Scene(root,400,400); 

或者,您可以使用一個外部的樣式表:

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

另請參閱this related postthis OTN discussion