【发布时间】:2015-02-05 07:41:11
【问题描述】:
在 JavaFX 中通过 CSS 定义 Skin 的正确位置是什么?假设我有一个非常简单的自定义控件...
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";
}
【问题讨论】:
标签: javafx-8 javafx-css