CSS API (JavaFX 8). Может ли кто-нибудь объяснить мне кое-что по одной теме?

ЭТО О

В настоящее время я изучаю новый 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 отключена. Извиняюсь.

Спасибо за внимание.


person Loa    schedule 24.01.2014    source источник


Ответы (2)


возможно, эта презентация поможет: https://oracleus.activeevents.com/2013/connect/sessionDetail.ww?SESSION_ID=2935&tclass=popup

Загрузите слайды в формате PDF справа.

person Hendrik Ebbers    schedule 24.01.2014
comment
Спасибо. Я посмотрю ссылку, которую вы мне прислали. - person Loa; 24.01.2014
comment
Извините, но я не нашел помощи по ссылке, которую вы мне прислали. Я загрузил демонстрационный пример с сайта bit.ly/jfxcss и прочитал всю презентацию в формате PDF. Презентация в формате PDF очень поверхностно говорит о том, как мы можем создавать стилизованные свойства в демонстрационном примере. Бьюсь об заклад, спикер конференции должен был дать более подробную информацию об этом. Как я уже объяснял, такое руководство можно найти здесь (конечно, менее назидательно). Должен ли я был видеть что-то большее? - person Loa; 25.01.2014
comment
NМожет быть, вы можете объяснить свою проблему более подробно - person Hendrik Ebbers; 27.01.2014

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

person Xerus    schedule 28.10.2017