用户输入被切断

时间:2016-05-06 01:38:39

标签: java validation input

我有一个文本字段,用户可以在其中输入值。

在其监听器中,我将新值存储到变量中。如果该变量是数字,则我继续打印该数字。例如:

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添加过滤器,以便它们等待可能的第二个数字,但我无法让它等待。它总是在第一位数被切断。

有任何建议吗?

2 个答案:

答案 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可能是验证用户输入的更好方法。