JavaFX:拥有最多2个字符的TextField ...无法替换所有标记的字符

时间:2017-04-21 12:15:07

标签: javafx textfield

在MyTextFieldMaxLength2中键入时:
a)' 1'标记并点击数字9 =>将被替换=' 9' ......好的 b)' 12'标记并点击数字9 =>没有任何反应

即使标记了所有两个数字,如何将其替换为新数字?

public class MyTextFieldMaxLength2 extends TextField {

    public boolean ifCondition_validate(String text) {
        return (getText().length() < 2 || text.equals("")) && text.matches("[0-9]*");
    }


    @Override
    public void replaceText(int start, int end, String text) {
        if ( ifCondition_validate(text) ) {
            super.replaceText(start, end, text);
        }       
    }   

    @Override
    public void replaceSelection(String text) {
        if ( ifCondition_validate(text) ) {
            super.replaceSelection(text);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以通过在标准文本字段上设置TextFormatter而不是为文本字段创建子类来轻松完成此操作:

TextField textField = new TextField();

UnaryOperator<TextFormatter.Change> filter = c -> {
    String proposedText = c.getControlNewText();
    if (proposedText.matches("[0-9]{0,2}")) {
        return c ;
    } else {
        return null ;
    }
};
textField.setTextFormatter(new TextFormatter<String>(filter));