JavaFX: просто объявление узлов меняет фон других узлов - PullRequest
0 голосов
/ 13 мая 2018

У меня есть программа, которая сначала запускает небольшую заставку, а через 5 секунд она переходит в новую стадию.

Странно то, что до сих пор все работало нормально, но теперь, когда я начинаю строить новую сцену, я объявляю новые узлы в классе, чтобы использовать ее.

Теперь внезапно заставка имеет белый фон, а комментирование ранее созданных узлов вернет изображение к прозрачности.

public static Pane pane = new Pane(); //this is fine

//Uncommenting this Node will change the splash screen background white
//public static TextArea textArea = new TextArea();

public static Image         splashImage     = new Image(Class.class.getClassLoader().getResourceAsStream("image.png"));
public static ImageView     splashImageView = new ImageView(splashImage);
public static BorderPane    splashPane      = new BorderPane(splashImageView);
public static Scene         splashScene     = new Scene(splashPane);

@Override
public void start(Stage primaryStage) throws Exception {

    splashScene.setFill(Color.TRANSPARENT);

    primaryStage.setScene(splashScene);
    primaryStage.initStyle(StageStyle.TRANSPARENT);
    primaryStage.show();

}

Вот сокращенная версия моего кода

Может ли это быть из-за проблем с памятью или что-то? Я никогда не сталкивался с чем-либо подобным.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 13 мая 2018

Таблица стилей по умолчанию загружается только в том случае, если создан элемент управления (т. Е. Экземпляр Control или один из его подклассов).(Идея заключается в том, чтобы избежать снижения производительности при загрузке CSS для приложений, которые управляют всей своей собственной графикой и не используют никаких элементов управления, таких как игры или симуляции.)

Таблица стилей по умолчанию устанавливает цвет фонакорневого узла (splashPane в вашем примере) до очень светло-серого (в частности, он на 26,4% ярче, чем цвет #ececec).

Поскольку текстовая область является единственным элементом управления в вашемсоздание класса вызывает загрузку таблицы стилей по умолчанию, которая задает очень светло-серый цвет фона splashPane.

Если вам нужно создать элементы управления и хотите, чтобы фон панели былпрозрачный, необходимо указать, что во внешнем CSS:

splashStyle.css:

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

и

@Override
public void start(Stage primaryStage) throws Exception {

    splashScene.setFill(Color.TRANSPARENT);
    splashScene.getStylesheets().add("splashStyle.css");

    primaryStage.setScene(splashScene);
    primaryStage.initStyle(StageStyle.TRANSPARENT);
    primaryStage.show();

}

(как быстрая проверка того, что это будет работать, вы можете просто проверить с

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

)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...