MenuBar更改场景的背景颜色(Java FX 8)

时间:2014-12-06 21:47:37

标签: javafx-8

为什么MenuBar会更改此代码示例中场景的背景颜色?应该是蓝色但是它是白色的。

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 个答案:

答案 0 :(得分: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