我创建了一个自定义的Led控件,因为我想在Led和工具提示支持中使用文本,所以我扩展了Label。
如果我创建LedSkin,则文本不会呈现到自定义LED控件上。可能是因为这个渲染是在私有API LabeledSkinBase中完成的,它包含并添加了LabeledText并且有很多与其布局相关的代码。
我已经能够通过在我的皮肤实现中添加一个Label来获取我的自定义控件中的文本,但我担心它可能缺少Label皮肤实现中的特性。
如果有可能扩展公共LabeledSkinBase会好得多。相反,我担心必须从LabeledSkinBase中清除代码才能在我的LedSkin中使用。
public class Led extends Label {
@Override
protected Skin<Led> createDefaultSkin() {
return new LedSkin(this);
}
}
public class LedSkin extends SkinBase<Led> {
private Label text;
public LedSkin(Led control) {
super(control);
initGraphics();
}
private void initGraphics() {
text = new Label();
text.textProperty().bind(getSkinnable().textProperty());
text.graphicProperty().bind(getSkinnable().graphicProperty());
getChildren().setAll(text);
}
}
这实际上是两个Label实例。一个是我的LedSkin,另一个是默认的LabeledSkinBase。它似乎有点像矫枉过正,但我不能使用LabeledText,因为那是一个内部私有类。
有没有更好的方法?