Swing中的输入验证

时间:2014-03-13 17:43:00

标签: java swing

我已经用6个jTextFields制作了表格。用户应该只能在每个文本字段中输入1到48之间的数字。还应检查是否有任何数字重复,应用程序应检查是否有任何字段留空。

我知道如何在VB.net中这样做,但我一般都是java新手。

在VB.net中,我会将所有文本字段放在数组中,然后检查是否填写了所有文本字段,数字是否在范围内并检查是否在任何字段中都有重复的数字。如果满足所有条件,我将继续向数据库发送输入。

我对java很新,所以如果有人能帮助我,或者指出我的方向很棒,那就太棒了。

3 个答案:

答案 0 :(得分:4)

根据您希望如何实现这一目标,有多种方法可以实现......

你可以......

使用JFormattedTextField,这将在字段被操作或焦点丢失,丢弃,它认为是什么,无效输入时验证用户inpur。

这适用于大多数常见格式的后验证,但缺乏一定的灵活性......

你可以......

使用JSpinner,这将在字段执行或焦点丢失后验证用户输入。当你想让用户在不需要实际输入内容的情况下快速在值之间移动时这是很好的(向上或向下单击更容易选择字段,向右移动,删除最后一个字符并将值递增1 ......例如:P)

你可以......

使用InputVerifier执行自己的验证,并根据您的需要采取适当的步骤。

从技术上讲,您可以将其与其他解决方案一起使用,但它可能会影响JFormattedFieldJSpinner的工作方式,因此请小心。

这使您能够定义用于在操作或焦点丢失时对字段进行后验证的实际规则。它还允许您决定当字段无效时焦点横向应该如何工作,允许在字段上保持焦点,直到值有效为止。

您也可以在此处显示错误消息...

你可以......

使用DocumentFilter,可以让您在用户输入时对输入进行实时操作,实时丢弃无效字符。

这是最复杂的解决方案之一,但也可能是最有用的解决方案之一。

看看here for examples

答案 1 :(得分:0)

  1. 通过getText();
  2. 从文本字段中检索文字
  3. 通过Integer.parseInt()解析,如果它抛出异常,则输入无效
  4. 验证号码是否在范围内
  5. 将它们全部添加到Set,然后检查其大小是否为6.如果没有,则会有重复项。
  6. 以下是验证结果的示例:

    JTextField[] fields;
    
    void vaildate() {//call when appropriate(ie ActionListener of JButton)
        int[] nums = new int[fields.length];
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < fields.length; i++) {
            try {
                nums[i] = Integer.parseInt(fields[i].getText());
            } catch (NumberFormatException ex) {
                //not a valid number tell user of error
                return;
            }
            if (nums[i] < 1 || nums[i] > 48) {
                //out of number range tell user of error
                return;
            }
            if (!set.add(nums[i])) {
                //duplicate element tell user of error
                return;
            }
        }
        //do what you want with the data now
    }
    

答案 2 :(得分:0)

JTextField field = new JTextField();


do{
   int number = Interger.parseInterger(field.getText()); // this is how you will parse it into int

   if (number < 1 || number is > 48){
    System.Out.Println("Error, try again");
}

}while(number > 0 || number is < 49)