ЭТО О
В настоящее время я изучаю новый CSS API, который существует в JavaFX 8, и у меня возникают проблемы с пониманием чего-то.
ПРОБЛЕМА
Я читаю о документации класса CssMetaData, и в определенное время говорится следующее:
Метод Node.getCssMetaData() вызывается для получения списка. Этот метод вызывается часто, и целесообразно возвращать статический список, а не создавать список при каждом вызове. По соглашению, классы узлов, которые имеют CssMetaData, будут реализовывать статический метод getClassCssMetaData(), и обычно getCssMetaData() просто возвращает getClassCssMetaData(). Цель getClassCssMetaData() — позволить подклассам легко включать CssMetaData некоторого предка.
В классе Node мы можем найти метод getCssMetaData. Насколько я понимаю, с версии 8 JavaFX узлы теперь могут хранить список объектов CssMetaData, которые связывают свойства CSS с каждым свойством (при желании) узла. Например, класс Rectangle может вставлять в этот список собственные экземпляры CssMetaData, которые также могут быть введены экземплярами Shape CssMetaData и Node. Наконец, движок CSS JavaFX прочитает этот список и преобразует значения свойств CSS в значения свойств бина JavaFX, тем самым устанавливая значения свойств классов (если они выполнили такую настройку свойств).
Что под этим подразумевает документация и почему? В документации CssMetaData есть пример того, как это делается. Во фрагменте появляется следующее:
private static final List <CssMetaData <? extends Node, ? > > cssMetaDataList;
static
{
List <CssMetaData <? extends Node, ? > > temp =
new ArrayList <CssMetaData <? extends Node, ? > >(Control.getClassCssMetaData());
temp.add(GAP_META_DATA);
cssMetaDataList = Collections.unmodifiableList(temp);
}
public static List <CssMetaData <? extends Node, ? > > getClassCssMetaData()
{
return cssMetaDataList;
}
@Override public List <CssMetaData <? extends Node, ? > > getCssMetaData()
{
return getClassCssMetaData();
}
Насколько я понимаю, такой код должен быть помещен в класс, у которого есть свойство bean-компонента JavaFX, связанное со свойством CSS. По какой причине мне придется снова создавать список CssMetaData в моем классе? У класса Node его еще нет? Метод getCssMetaData не является абстрактным, из-за чего кажется, что Node реализовал свой собственный список, что (опять же) заставляет клиентского программиста рассматривать возможность использования такого списка без необходимости делать это. В классе Node есть даже метод getCssMetaData. :с
Может ли кто-нибудь объяснить это для меня ясным и простым способом (даже если вам придется написать немного больше)? Или есть ли какое-либо другое место за пределами JavaFX API 8 и эта ссылка (Кстати, я никогда не видел ничего столь плохо объясненного, как здесь. Извините), так что я могу узнать больше о новом JavaFX CSS API 8?
OBS: Я хотел бы разместить здесь ссылки для каждого класса, который я упомянул. Однако сегодня (GMT - 3 ---- 15:59) документация по JavaFX 8 отключена. Извиняюсь.
Спасибо за внимание.