我是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());
答案 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));
在这种情况下,最终用户将看到文本的一部分,并将很快了解正在发生的事情。更好地显示带有警告的弹出窗口。