Решение
Установите стиль -fx-background-color: transparent
на корневой узел сцены.
фон
Аналогичное поведение обсуждается в Oracle JavaFX Forum post on the JavaFX Scene/Fill Color.
Соответствующие комментарии резьбе Дэвид Грив, ведущий разработчик для функций JavaFX CSS:
Это происходит потому, что modena.css
задает цвет фона корневого узла. Решение стиля -fx-background-color: transparent
на корневом узле сцены является решением.
BorderPane root = new BorderPane();
root.setStyle("-fx-background-color: transparent;");
Scene scene = new Scene(root, 600, 400, Color.BLACK);
по умолчанию пользовательский агент стилей загружается в первый раз, когда управление инстанциируется. Причина этого заключается в том, чтобы избежать загрузки таблиц стилей и уменьшения накладных расходов CSS в сценариях, содержащих узлы, которые не используют CSS.
История позади этого является то, что дизайнер темы Модены чувствовал, что контроль выглядел лучше на этом определенном цвете фона, который является очень светло-серым. К сожалению, фоновое заполнение сцены не может быть написано в стиле CSS, поэтому стиль был установлен в корневом узле сцены. Существует проблема, зарегистрированная в JIRA, чтобы сделать сцену так, чтобы ее можно было нарисовать с помощью CSS (RT-31282)
Достоинством загрузки таким образом является то, чтобы избежать накладных расходов css в сценах, которые не используют элементы управления. Например, это типично для заставки. Или, может быть, игра. Этот дизайн был сделан давно, когда производительность CSS была большой проблемой, но она по-прежнему имеет смысл для встроенных устройств.
В случае Вашего вопроса, Tooltip
является контролем, поэтому, когда вы добавляете его на сцену он неявно вызывает параметр по умолчанию modena.css
таблицы стилей, который будет загружен для сцены (которая устанавливает фон корня узел сцены до серого, а не пустой или прозрачный заливок, который используется, когда в сцене нет элементов управления).Чтобы сохранить прозрачный фон для приложения, когда элемент управления используется в сцене, необходимо явно указать фон корневого узла сцены прозрачным.
Sample code for a transparent stage:
//this is where the transparency is achieved:
//the three layers must be made transparent
//(i) make the VBox transparent (the 4th parameter is the alpha)
root.setStyle("-fx-background-color: rgba(0, 0, 0, 0);");
//(ii) set the scene fill to transparent
scene.setFill(null);
//(iii) set the stage background to transparent
stage.initStyle(TRANSPARENT);
Спасибо :) Это именно то, что мне было нужно. – RegisteredUser