class CustomField extends TextField {
public CustomField() {
super();
textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (newValue.isEmpty())
return;
if (newValue.matches("\\d{1,2}|\\d{1,2}:|\\d{1,2}:[0-5]?[0-9]")) {
setText(newValue);
} else {
setText(oldValue);
}
}
});
setOnAction(e -> {
if (!getText().matches("\\d{2}:\\d{2}")) {
setText("");
}
});
focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue,
Boolean newPropertyValue) {
if (!newPropertyValue) {
if (!getText().matches("\\d{2}:\\d{2}")) {
setText("");
}
}
}
});
}
}
当用户向文本字段写入内容时,您需要做的就是检查它是否匹配NN:XN(N=数字0-9&X=数字0-5)或只是其中的一部分。输入完成后,您将检查它是否与您的格式匹配,然后才允许输入,否则将textfield内容设置为“”。