我需要将TextField中的输入限制为整数。有什么建议吗?
发布于 2015-06-12 14:43:49
非常旧的线程,但这似乎更整洁,并剥离了非数字字符,如果粘贴。
// force the field to be numeric only
textField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue,
String newValue) {
if (!newValue.matches("\\d*")) {
textField.setText(newValue.replaceAll("[^\\d]", ""));
}
}
});
发布于 2013-09-23 20:36:20
我知道这是一个相当古老的主题,但对于未来的读者来说,这是另一个我发现非常直观的解决方案:
public class NumberTextField extends TextField
{
@Override
public void replaceText(int start, int end, String text)
{
if (validate(text))
{
super.replaceText(start, end, text);
}
}
@Override
public void replaceSelection(String text)
{
if (validate(text))
{
super.replaceSelection(text);
}
}
private boolean validate(String text)
{
return text.matches("[0-9]*");
}
}
发布于 2016-04-06 04:18:52
从JavaFX 8u40开始,您可以在文本字段上设置TextFormatter对象:
UnaryOperator<Change> filter = change -> {
String text = change.getText();
if (text.matches("[0-9]*")) {
return change;
}
return null;
};
TextFormatter<String> textFormatter = new TextFormatter<>(filter);
fieldNport = new TextField();
fieldNport.setTextFormatter(textFormatter);
这避免了子类化和重复的更改事件,当您将更改侦听器添加到text属性并修改该侦听器中的文本时,您将获得这些事件。
https://stackoverflow.com/questions/7555564
复制相似问题