【发布时间】:2013-02-09 20:30:02
【问题描述】:
我有几个组件要检查它们是否已填写。
我的代码遍历添加到列表中的每个组件,将其转换为正确的类型,调用getText 方法并检查它是否为空。如果它为空,则将布尔值设置为 false 并返回。根据布尔值,显示“Yay”(成功)或“Nay”(失败)。作为附加测试,我还打印了component.toString() 每次失败。
现在的问题是:每个component.toString() 方法在每个组件都有文本的情况下被调用。无论我的输入如何,布尔值仍然是成功的(即使某些字段中没有文本)。
在调试期间,我发现我的任何组件在调试窗口 (Eclipse) 中都没有字段“Text”或“getText”或类似字段,这可能表明存在问题。
我找不到问题,谁能指点我?
boolean success = checkInput();
if (success) {
System.out.println("Yay");
} else {
System.out.println("Nay");
}
检查输入法
private boolean checkInput() {
boolean success = true;
List<Component> components = new ArrayList<Component>();
components.add(txtLeertrajectCode);
components.add(txtLeertrajectTitel);
components.add(txtOmschrijving);
components.add(txtDoelgroep);
for (Component comp : components) {
if (comp instanceof JTextField) {
String curr = ((JTextField) comp).getText().trim();
if ("".equals(curr)) {
System.out.println(comp.toString());
comp.setForeground(Color.RED);
success = false;
} else {
comp.setForeground(Color.BLACK);
}
} else if (comp instanceof JTextArea) {
String curr = ((JTextArea) comp).getText();
if ("".equals(curr)) {
System.out.println(comp.toString());
comp.setForeground(Color.RED);
success = false;
} else {
comp.setForeground(Color.BLACK);
}
}
}
return success;
}
}
输出:
javax.swing.JTextField[...]
javax.swing.JTextField[...]
javax.swing.JTextArea[...]
javax.swing.JTextField[...]
Yay
编辑:
问题解决了,显然我有两次我的文本字段,但在文件中使用了相似的名称。显然,检查是在未使用的文本字段上完成的。 愚蠢的问题。
【问题讨论】:
-
根据最初发布的信息,我们如何能够猜到问题?投票结束过于本地化。这个问题将来可能对任何人都没有帮助。
-
这是 DocumentListener / DocumentFilter with InputMask 的工作
-
@mKorbel:当然是在金钱上,并且已经看到了更大的图景。按照他的建议,您的完整方法可以大大改进。
标签: java swing validation components