限制用户在javafx中输入最多3个字符

时间:2017-07-27 09:33:00

标签: javafx javafx-8

我是javaFx的新手所以请在这里忽略我的愚蠢问题我要验证(限制)用户输入3个字符(如果用户输入更多输入,则不允许或3个字符后,后者不应该可见)我找到了许多验证解决方案,但它不限制最多3个字符,也不会让人感到困惑。这是我的代码。

public class editController {
 @FXML
 private TextField countrycode;
  public void add(ActionEvent event) {
    String ADD=countrycode.getText();
    try {
        if(ADD.isEmpty()){
                Alert alert=new Alert(Alert.AlertType.ERROR);
                alert.setHeaderText(null);
                alert.setContentText("Please Fill All DATA");
                alert.showAndWait();
                return;
        }


        FXMLLoader loader =new FXMLLoader();
        loader.load(getClass().getResource("/region/newCountry.fxml").openStream());

3 个答案:

答案 0 :(得分:6)

使用textProperty Listener进行验证,如:

countrycode.textProperty().addListener(new ChangeListener<String>() {
        public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
            if (newValue.length() > 3) {
                countrycode.setText(oldValue);
            }
        }
    });

或获取字符串长度并检查

int length = ADD.length();
if (length > 3) {
    System.out.println("Please Enter Lessthen 3 character");
}

答案 1 :(得分:1)

你必须以这种方式@Override textField的replaceText(int,int,String)方法:

@Override 
public void replaceText(int start, int end, String text) {
    if ("".equals(text)) { // handles delete
        super.replaceText(start, end, text);
        return;
    }
    if (getText().length() < 3) { // handles add and checks length.
        super.replaceText(start, end, text);
    }
}

这不允许您插入超过3个字符,但您可以定义任何正则表达式并使用而不是第二个if条件。

答案 2 :(得分:1)

solution of @KeyurBhanderi足够好,直到你用char键入char。但是当您尝试从剪贴板粘贴长文本时,您将看不到文本字段中的任何更改。惊喜!

作为替代,以避免混淆set至少截断的字符串:

field.setText(newValue.substring(0, maxLimit));

在这种情况下,最终用户将看到文本的一部分,并将很快了解正在发生的事情。更好地显示带有警告的弹出窗口。