CSS в JavaFX: Отделяет оформление от логики. JavaFX поддерживает CSS-подобные стили для компонентов, синтаксис близок к веб-CSS(селекторы, свойства), но свойства имеют префикс -fx- и специфичны для JavaFX.
Подключение стилей: Можно задать файл CSS для сцены (через scene.getStylesheets().add("styles.css")) – тогда стиль применится ко всем узлам сцены. Либо назначить стиль на отдельный контейнер или узел (node.setStyle(...) для инлайн-стиля или node.getStyleClass().add("class-name") для именованного стиля).
Преимущества: Единый файл стилей позволяет легко изменять внешний вид приложения без правки Java-кода. Возможна смена тем оформления, повторное использование стилей между экранами.
Стандартные стили: У JavaFX есть встроенный базовый стиль Modena (светлая тема по умолчанию). Разработчик может его переопределять частично или полностью своими CSS-файлами.
Пояснение:
JavaFX перенял идеологию CSS-стилизации из веб-разработки. Каждый стандартный компонент (Button, Label, ListView и т.д.) имеет в JavaFX свой набор стилевых свойств – например, для кнопки можно менять цвет фона (-fx-background-color), шрифт (-fx-font, -fx-text-fill для цвета текста), отступы (-fx-padding) и многое другое – порядка 100+ различных CSS-параметров определено для разнообразных контролов
openjfx.io
.
Как применять CSS: самый распространённый подход – подключить внешний CSS-файл ко всей сцене. Для этого после создания сцены вызываем scene.getStylesheets().add("/path/to/style.css"). Если файл лежит в ресурсах (например, src/main/resources при Maven-сборке), достаточно указать его путь относительно classpath, как ресурс. Второй способ – указать стиль в самом FXML (элемент <Scene stylesheets="styles.css"> или в узле stylesheets). Третий – устанавливать стили через код выборочно: node.setStyle("-fx-font-size: 16px; -fx-text-fill: red;") – однако это inline-стиль, его лучше использовать для динамически формируемых элементов или очень отдельных случаев, поскольку он затрудняет поддержку (стили разбросаны в коде).
В CSS можно обращаться к элементам по типу (имени класса JavaFX), по идентификатору (#id) или по стилевому классу (.class). Например, чтобы стилизовать все кнопки в сцене с определенным классом, можно присвоить кнопке myButton.getStyleClass().add("special-btn") и в CSS написать .special-btn { -fx-background-color: #008000; } – тогда эта кнопка станет зеленой. Идентификаторы (node.setId("mainPane") → #mainPane { ... } в CSS) тоже работают, но обычно классы гибче.
Пример: допустим, мы хотим увеличить шрифт у всех заголовков Label в приложении. Можно в CSS-файле написать:
.label {
-fx-font-size: 14pt;
}
Это применится ко всем меткам. Если хотим только к некоторым – даем им styleClass, как описано выше. CSS также поддерживает иерархию: можно задавать стили внутри контейнеров. Например, .toolbar .button { -fx-background-color: #ccc; } – применится ко всем кнопкам, вложенным в узел с классом style "toolbar".
JavaFX CSS несколько отличается от веб: он не поддерживает каскадность в полном объеме или сложные селекторы, но основных возможностей хватает. Важный момент – темы: по умолчанию в JavaFX используется стиль Modena (с Java 8). Есть альтернативный встроенный Caspian (устаревший). Можно подключить готовые темы от сообщества или создавать свои. Для крупных приложений рекомендуется определять в CSS набор цветовых констант и отступов как lookup–переменные, чтобы потом легко делать светлую/темную тему переключением файла CSS.
Современные практики: вместо того чтобы хардкодить цвета и размеры в FXML или коде, выносите их в CSS. Например, если у вас несколько экранов с похожим оформлением кнопок – определите в CSS класс .main-button с нужным стилем и назначайте кнопкам этот класс. Тогда изменение дизайна (скажем, цвет бренда) потребует поправить одно место – CSS, а не десятки FXML. При работе в команде дизайнер может подготовить CSS, не трогая код. Кроме того, CSS позволяет использовать наследование шрифтов и цветов: установить базово для корневого элемента сцену шрифт, и он применится ко всему, что внутри, если не переопределено.
Для отладки стилей JavaFX можно использовать утилиты вроде Scenic View или включать режим отладки CSS (свойство -Djavafx.userAgentStylesheetUrl или смотреть исходники Modena.css для примера). Но чаще достаточно просто проверить в runtime, что стиль применился (например, задать явно фон у компонента и увидеть, что он изменился).
В 2025 году JavaFX CSS остаётся основным способом тонкой настройки внешнего вида без написания кастомного рендеринга. С появлением поддержки CSS вы можете достичь многого – от скругленных кнопок до сложных градиентов и анимаций наведения – исключительно стилями, что делает приложение более поддерживаемым и гибким.
