【问题标题】:User input being cut off用户输入被切断
【发布时间】:2016-05-06 01:38:38
【问题描述】:

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

在它的监听器中,我将新值存储到一个变量中。如果该变量是一个数字,那么我将继续打印该数字。示例:

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

打印完值后,它会被发送到程序的其余部分,不再需要用户输入。但是用户应该如何输入两位数字呢?我试过让线程睡觉,但它让一切都睡着了。我尝试为数字&lt;10 添加过滤器,以便它们等待可能的第二个数字,但我无法等待。它总是在第一个数字处被切断。

有什么建议可以试试?

【问题讨论】:

    标签: java validation input


    【解决方案1】:

    使用这个:

    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 位数字才能成为有效匹配项。

    【讨论】:

    • 仍然出现问题,因为我仍然需要一位数输入,而不仅仅是两位数。
    【解决方案2】:

    我认为你的要求不能通过简单地修改监听器来满足。

    在我过去的项目中,我做过submitButton.setEnabled(isValidInput(val))

    还有frame.getRootPane().setDefaultButton(submitButton),以便用户可以使用 Enter 键提交。

    注意:JFormattedTextField 可能是验证用户输入的更好方法。

    【讨论】:

      猜你喜欢
      • 2020-11-18
      • 2023-03-07
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 2021-08-31
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多