JavaFx在使用TextField文本框时,难免有限制文本格式的需求,这时候小编尝试使用输入监听,输入框Change监听事件,本以为完成了,可是在无意间发现在输入中文时,无法监听到KeyEvent事件,所以显得不那么专业。在网上寻找到了Aimls的视频,看了之后深受感触。直接附上代码:
@FXML
private TextField textFieldPort;
this.textFieldPort.setTextFormatter(new TextFormatter<String>(new UnaryOperator<TextFormatter.Change>() {
@Override
public TextFormatter.Change apply(TextFormatter.Change change) {
String value = change.getText();
if (value.matches("[0-9]*")) {
return change;
}
return null;
}
}));
TextField文本框中就有文本格式的接口,所以可以通过setTextFormatter(TextFormatter<?> value)方法实现自定义文本格式限制。
public final void setTextFormatter(TextFormatter<?> value) { textFormatter.set(value); }
-在文本失去焦点的时候,可以使用setTextFormatter(StringConverter<V> valueConveryer)方法实现
public TextFormatter(@NamedArg("valueConverter") StringConverter<V> valueConverter) {
this(valueConverter, null, null);
}
Example:文本框失去焦点时,使用trim()去除前后的空格
@FXML
private TextField textFieldName;
this.textFieldName.setTextFormatter(new TextFormatter<String>(new StringConverter<String>() {
@Override
public String toString(String object) {
return object == null ? "" : object;
}
@Override
public String fromString(String string) {
return string == null ? "" : string.trim();
}
}));
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
代码整理如下:
import javafx.scene.control.TextFormatter;
import java.util.function.UnaryOperator;
public class IntUnaryOperator implements UnaryOperator<TextFormatter.Change> {
@Override
public TextFormatter.Change apply(TextFormatter.Change change) {
String value = change.getText();
if (value.matches("[0-9]*")) {
return change;
}
return null;
}
}
import javafx.util.StringConverter;
public class TrimStringConverter extends StringConverter<String> {
@Override
public String toString(String object) {
return object == null ? "" : object;
}
@Override
public String fromString(String string) {
return string == null ? "" : string.trim();
}
}
import javafx.scene.control.TextFormatter;
public class MyTextFormatter {
public MyTextFormatter() {
}
public static TextFormatter<String> trimTextFormatter() {
return new TextFormatter<String>(new TrimStringConverter());
}
public static TextFormatter<String> intTextFormatter() {
return new TextFormatter<String>(new IntUnaryOperator());
}
}