在自定义类中分配布尔值时出错,这是从TextField(FXML)扩展而来的

我开始学习JavaFX并遇到了这个问题:我有一个TextBox类是从TextField继承的

package sample;

import javafx.fxml.FXML;
import javafx.scene.control.TextField;

public class TextBox extends TextField {

    private int maxLength = 255;
    private boolean onlyDigits;

    public TextBox(){
        super();
    }

    @Override
    public void replaceText(int start,int end,String text) {
        String oldText = getText();
        super.replaceText(start,end,text);

        if (!verify()){
            setText(oldText);
        }
    }

    @Override
    public void replaceSelection(String text) {
        String oldText = getText();
        super.replaceSelection(text);

        if (!verify()){
            setText(oldText);
        }
    }

    private boolean verify() {
        String text = getText();

        if (text =="")
            return true;

        if (text.length() > maxLength) {
            return false;
        }
        if (onlyDigits && !Converter.StringToInt(text).isSuccess()){
            return false;
        }

        return true;
    }

    public int getMaxLength() {
        return maxLength;
    }

    public void setMaxLength(int maxLength) {
        if (maxLength >= 0)
            this.maxLength = maxLength;
    }

    public void setOnlyDigits(boolean onlyDigits) {
        this.onlyDigits = onlyDigits;
    }

    public boolean isOnlyDigits() {
        return onlyDigits;
    }
}

使用以下FXML时,出现错误:

<TextBox
                GridPane.columnIndex="0" GridPane.rowIndex="1"
                maxLength="2"
                onlyDigits="true"
                fx:id="tbNumberVertex" />

由以下原因引起:javafx.fxml.LoadException:错误解决onlyDigits ='true',或者事件处理程序不在命名空间中,或者脚本中有错误。

但是在使用maxLength的情况下,一切正常

xlinfly 回答:在自定义类中分配布尔值时出错,这是从TextField(FXML)扩展而来的

我认为这里发生的是,因为属性onlyDigits以文本"on"开头,所以FXML解析器假定它是事件处理程序属性。 (例如,onAction。)因此,假设分配的值true引用FXML脚本中定义的函数。

(对于它的价值,我认为这是一个错误。)

更改属性名称,例如通过更改方法的名称更改为useOnlyDigits

public void setUseOnlyDigits(boolean onlyDigits) {
    this.onlyDigits = onlyDigits;
}

public boolean isUseOnlyDigits() {
    return onlyDigits;
}

并相应地更新FXML:

<TextBox
    GridPane.columnIndex="0" GridPane.rowIndex="1"
    maxLength="2"
    useOnlyDigits="true"
    fx:id="tbNumberVertex" />
本文链接:https://www.f2er.com/1319950.html

大家都在问