JavaFX自定义控件标签与皮肤实现

时间:2018-05-25 13:47:42

标签: java javafx javafx-8

我创建了一个自定义的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,因为那是一个内部私有类。

有没有更好的方法?

0 个答案:

没有答案