我想在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();
}
}
请你帮我确定一下我犯了什么错误或错过了什么。提前致谢,如有需要,请询问。