2014-12-06 205 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