Skin
在 JavaFX 中定义 via CSS的正确位置是什么?假设我有一个非常简单的自定义控件...
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";
}
...或者:
.action-link {
-fx-skin: "ActionLinkButtonSkin";
}