我已经用6个jTextFields制作了表格。用户应该只能在每个文本字段中输入1到48之间的数字。还应检查是否有任何数字重复,应用程序应检查是否有任何字段留空。
我知道如何在VB.net中这样做,但我一般都是java新手。
在VB.net中,我会将所有文本字段放在数组中,然后检查是否填写了所有文本字段,数字是否在范围内并检查是否在任何字段中都有重复的数字。如果满足所有条件,我将继续向数据库发送输入。
我对java很新,所以如果有人能帮助我,或者指出我的方向很棒,那就太棒了。
答案 0 :(得分:4)
根据您希望如何实现这一目标,有多种方法可以实现......
使用JFormattedTextField
,这将在字段被操作或焦点丢失,丢弃,它认为是什么,无效输入时验证用户inpur。
这适用于大多数常见格式的后验证,但缺乏一定的灵活性......
使用JSpinner
,这将在字段执行或焦点丢失后验证用户输入。当你想让用户在不需要实际输入内容的情况下快速在值之间移动时这是很好的(向上或向下单击更容易选择字段,向右移动,删除最后一个字符并将值递增1 ......例如:P)
使用InputVerifier
执行自己的验证,并根据您的需要采取适当的步骤。
从技术上讲,您可以将其与其他解决方案一起使用,但它可能会影响JFormattedField
和JSpinner
的工作方式,因此请小心。
这使您能够定义用于在操作或焦点丢失时对字段进行后验证的实际规则。它还允许您决定当字段无效时焦点横向应该如何工作,允许在字段上保持焦点,直到值有效为止。
您也可以在此处显示错误消息...
使用DocumentFilter
,可以让您在用户输入时对输入进行实时操作,实时丢弃无效字符。
这是最复杂的解决方案之一,但也可能是最有用的解决方案之一。
答案 1 :(得分:0)
以下是验证结果的示例:
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)