TL; DR Установите цвет фона rootPane
либо на нужный цвет, либо на Color.TRANSPARENT
.
Это очень любопытный случай.
При первоначальном создании Button
метод initialize
вызывается в конструкторе Button:
private void initialize() {
getStyleClass().setAll(DEFAULT_STYLE_CLASS);
setAccessibleRole(AccessibleRole.BUTTON);
setMnemonicParsing(true); // enable mnemonic auto-parsing by default
}
Я предполагаю (но не могу сказать вам со 100% уверенностью), что это применяет стилиэлементам в вашем приложении (как объяснено в в этом ответе , это из-за статического инициализатора), потому что если вы создаете Button
(и даже не добавляете его в rootNode
) rootNode
будет иметь фон после звонка на primaryStage.show()
.Чтобы убедиться в этом, я изменил ваш код:
System.out.println("background: " + rootNode.getBackground());
Button newBtn = new Button();
primaryStage.setScene(myScene);
primaryStage.show();
System.out.println("background after showing scene: " + rootNode.getBackground());
Вывод выглядит так (а цвет фона серый):
background: null
background after showing scene: javafx.scene.layout.Background@20c95282
Если я удаляю создание кнопки и запускаю ееснова цвет фона красный, и у меня есть следующий вывод:
background: null
background after showing scene: null
Поэтому я предлагаю вам либо установить цвет фона на rootNode
, либо явно установить цвет фона rootNode
на прозрачный(Color.TRANSPARENT
).Оба решения работали для меня.
rootNode.setBackground(new Background(new BackgroundFill(Color.CORAL, null, null)));