2017-07-27 53 views
1

我是javaFx的新手,所以请忽略我在这里的愚蠢问题我想验证(限制)用户输入3个字符(如果用户输入更多的信息,则不允许或者3个字符之后,不应该显示后者)我发现了许多验证解决方案,但它不限制最多3个字符,以及它理解的小混乱。下面是我的代码。限制用户在javafx中输入最多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()); 

回答

5

验证使用textProperty监听器,如:

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"); 
} 
+0

它不工作到我的代码,我不想显示超过3个字符,如果用户输入 – Rocky

+0

我希望这段代码是帮助你!如果你在这个解决方案中解决了你的问题,那么以后不要接受帮助其他人的答案。 –

+0

我想只有3个字符是可见的,如果用户把更多的价值,那么它不允许在输入字段 – Rocky

1

你必须@Override您的文本字段这样的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个字符,但您可以定义任何正则表达式并使用,而不是第二种情况。

1

solution of @KeyurBhanderi已经足够,直到您按字符输入char。但是,当您尝试从剪贴板粘贴长文本时,您不会在文本字段中看到任何更改。惊喜!

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

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

在这种情况下,最终用户将看到文本的一部分,并会很快明白是怎么回事。更好地显示带警告的弹出窗口。