我有一个文本字段,用户可以在其中输入值。
在其监听器中,我将新值存储到变量中。如果该变量是数字,则我继续打印该数字。例如:
String val="";
textfield.textProperty().addListener(new ChangeListener<String>() {
public void changed(ObservableValue<? extends String> ov,
String old_val, String new_val) {
val=new_val;
if(val.matches("\\d+")) {
System.out.println(val);
}
}
}
问题是当我尝试输入多位数字时。如果我尝试10
它会在1
处将其删除,因为1
是我输入的第一个数字,触发了if
。
打印完值后,它会被发送到程序的其余部分,不再需要用户输入。但是用户应该如何输入两位数?我已经尝试过睡觉线程,但它会让所有东西都睡不着。我已经尝试为数字<10
添加过滤器,以便它们等待可能的第二个数字,但我无法让它等待。它总是在第一位数被切断。
有任何建议吗?
答案 0 :(得分:0)
使用此:
String val="";
textfield.textProperty().addListener(new ChangeListener<String>() {
public void changed(ObservableValue<? extends String> ov,
String old_val,
String new_val) {
val=new_val;
if(val.matches("\\d+"){1,2}) {
System.out.println(val);
}
}
}
现在需要1或2位数作为有效匹配。
答案 1 :(得分:0)
我认为只需修改监听器就无法满足您的要求。
在我过去的项目中,我做了submitButton.setEnabled(isValidInput(val))
和frame.getRootPane().setDefaultButton(submitButton)
以便用户可以使用回车键提交。
注意:JFormattedTextField可能是验证用户输入的更好方法。