在为自定义textarea定义可样式属性时,我在哪里出错

时间:2016-10-28 16:31:20

标签: java javafx-8

我想在javafx中开发自定义textarea。我想要定义的第一个属性是textarea类中缺少的可设置属性,它是textFill属性,因此我可以以编程方式设置textarea中文本的颜色。这很重要,因为textarea将被用于一个程序,只需点击一个按钮,就必须改变文本的颜色。

问题是属性值不会影响textarea中的文本。我与javafx api类交叉检查,发现我已经遵循了定义一个可样式属性所需的所有程序,并且它是cssMetaData。

以下是自定义textarea的源代码:

_xssfStyle .BorderLeft = _hssfStyle .BorderLeft;
_xssfStyle .BorderRight = _hssfStyle .BorderRight;
_xssfStyle .BorderTop = _hssfStyle .BorderTop;
_xssfStyle .BorderBottom = _hssfStyle .BorderBottom;
_xssfStyle .FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;
_xssfStyle .FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground;
_xssfStyle .WrapText = _hssfStyle .WrapText;
_xssfStyle .VerticalAlignment = _hssfStyle .VerticalAlignment;

这是主要课程:

public class CustomTextArea extends TextArea {

    private ObjectProperty<Paint> textFill;

    public void setTextFill(Paint value){
        textFillProperty().setValue(value);
    }

    public ObjectProperty<Paint> textFillProperty(){
        if(textFill == null){
            textFill = new StyleableObjectProperty<Paint>(Color.BLUE) {
                @Override
                public Object getBean() {
                    return CustomTextArea.this;
                }

                @Override
                public String getName() {
                    return "textFill";
                }

                @Override
                public CssMetaData<? extends Styleable, Paint> getCssMetaData() {
                    return TEXT_FILL;
                }
            };
        }
        return textFill;
    }

    private static final CssMetaData<CustomTextArea, Paint> TEXT_FILL =
            new CssMetaData<CustomTextArea, Paint>("-fx-text-fill", PaintConverter.getInstance(), Color.BLUE) {
                @Override
                public boolean isSettable(CustomTextArea styleable) {
                    return styleable.textFill == null || !styleable.textFill.isBound();
                }

                @Override
                public StyleableProperty<Paint> getStyleableProperty(CustomTextArea styleable) {
                    return (StyleableProperty<Paint>)(WritableValue<Paint>)styleable.textFillProperty();
                }
    };

    private static final List<CssMetaData<? extends Styleable, ?>> STYLEABLES;
    static{
        final List<CssMetaData<? extends Styleable, ?>> styleables =
                new ArrayList<CssMetaData<? extends Styleable, ?>>(Control.getClassCssMetaData());
        Collections.addAll(styleables, TEXT_FILL);
        STYLEABLES = Collections.unmodifiableList(styleables);
    }

    public static List<CssMetaData<? extends Styleable, ?>> getClassCssMetaData(){
        return STYLEABLES;
    }

    @Override
    public List<CssMetaData<? extends Styleable, ?>> getControlCssMetaData(){
        return getClassCssMetaData();
    }
}  

请你帮我确定一下我犯了什么错误或错过了什么。提前致谢,如有需要,请询问。

0 个答案:

没有答案