【问题标题】:MenuBar changes the background color of the scene (Java FX 8)MenuBar 改变场景的背景颜色 (Java FX 8)
【发布时间】:2014-12-06 21:47:36
【问题描述】:

为什么 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);
    }
}

【问题讨论】:

    标签: javafx-8


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2022-10-07
      • 2010-09-17
      • 2012-04-02
      • 1970-01-01
      • 2015-12-06
      • 2013-07-20
      相关资源
      最近更新 更多