Какое правильное место для определения Skin
через CSS в JavaFX? Скажем, у меня очень простой настраиваемый элемент управления...
public class ActionLink extends Control {
private final StringProperty text = new SimpleStringProperty();
public final StringProperty textProperty() {return text;}
public final String getText() {return text.get();}
public final void setText(String text) {this.text.set(text);}
}
Я знаю, что могу указать скин по умолчанию в элементе управления. Предположим, у меня есть ActionLinkSkin
...
@Override
protected Skin<?> createDefaultSkin() {
return new ActionLinkSkin(this);
}
Если я не использую createDefaultSkin()
, я вижу предупреждение SEVERE
о том, что скин не может быть найден:
The -fx-skin property has not been defined in CSS for ActionLink@59ebabd \
and createDefaultSkin() returned null.
Во-первых, я не уверен, где находится CSS элемента управления. Должен ли я использовать таблицу стилей для элемента управления, action-link.css
, или я должен использовать таблицу стилей для скина, action-link-skin.css
? Мне кажется, что скин и CSS будут довольно взаимозависимыми, но использование таблицы стилей для элемента управления кажется более популярным.
Во-вторых, и моя основная проблема, я не знаю, где определить -fx-skin
, чтобы он правильно обнаруживался.
Теперь, если у меня правильно настроен CSS, что если я захочу включить альтернативный скин, ActionLinkButtonSkin
? Есть ли способ настроить его так, чтобы родительский компонент мог выбирать любой скин через CSS? Например:
.action-link {
-fx-skin: "ActionLinkSkin";
}
...or:
.action-link {
-fx-skin: "ActionLinkButtonSkin";
}