Описание проблемы: Я не могу получить фон объекта в JavaFX. Я не имею в виду фигуры, но обычные узлы, такие как кнопки, вкладки и другие. Я не знаю, как получить доступ к их цвету фона.JavaFX - как получить цвет фона Tab, Button и т. Д.
Что я хочу? Я разрабатываю IDE, и я хочу запустить цветную анимацию на вкладке с файлом, который пользователь хочет открыть и уже существует в коллекции файлов программы. Перед выполнением этой анимации я хочу прочитать исходный цвет фона вкладки, и этот цвет возвращается на вкладку в конце анимации. Также я хочу вернуть hover
и selected
свойства, которые исчезают, когда я устанавливаю некоторый цвет в анимации, и они никогда не возвращаются. Все цвета, которые я настраиваю в файле CSS, и я не хочу его менять.
Мой вопрос: Как получить и установить программный цвет узла? Или как сделать цветную анимацию с сохранением исходных свойств и в конце анимации вернуть эти свойства?
Один короткий пример:
sample.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<TabPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="480.0" prefWidth="600.0" stylesheets="@style.css" tabClosingPolicy="UNAVAILABLE" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<tabs>
<Tab text="Sample tab 1">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
<Tab text="Sample tab 2">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
<Tab text="Sample tab 3">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0" />
</content>
</Tab>
</tabs>
</TabPane>
styles.css
.tab{
-fx-background-color: pink;}
.tab:hover{
-fx-background-color: red;}
.tab:selected{
-fx-background-color: yellow;}
Невозможно (что я знаю) программно извлекать стили, определенные в файле CSS. Но непонятно, зачем вам это нужно. Вы можете установить встроенный стиль, пока хотите, чтобы стиль был другим, и затем удалите его (чтобы он вернул стиль стилей); или добавьте новый класс стиля и удалите его, или установите псевдокласс CSS и отмените его, чтобы вернуться к предыдущему стилю. –
Я полагаю, что есть способ получить цвет фона (IMO. Не имеет значения, что этот цвет загружается из файла CSS или каким-то образом программным образом). Как Java знает, какой цвет отображать? Я не думаю, что Java читает файл CSS снова и снова. Я думаю, что где-то есть информация об этом сохраненном цвете, но вопрос в том, есть ли у меня доступ к этой информации и как. –
Если цвет определен во внешней таблице стилей (либо вашей собственной, либо стандартной по умолчанию), тогда нет никакого способа получить эту информацию программным путем из общедоступного API. Конечно, сам контроль (или, точнее, его Кожа) содержит эти данные, но они недоступны для общественности. Но опять же, я действительно не понимаю, зачем вам это нужно. –