有错误的输入被验证为有故障,但表现得好像是正确的

时间:2013-02-24 17:27:21

标签: java swing validation components

我有几个组件,我想检查它们是否被填写。 我的代码遍历添加到列表中的每个组件,将其强制转换为正确的类型,调用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");
}

checkInput方法

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

修改

问题解决了,看起来我有两次我的文本字段,但在文件中的名称相似。显然,检查是在未使用的文本字段上完成的。 愚蠢的问题。

2 个答案:

答案 0 :(得分:2)

可能你应该改变这个:

} else {
    System.out.println("Yay");
}

} else {
    System.out.println("Nay");
}

答案 1 :(得分:0)

我觉得一切都好。你有JTextFiled但它不包含文本(它只是空的)

<强>更新

I write simple example
results = new JTextArea();
        System.out.println("First :" + results.getText());
        results.setText("Test");
        System.out.println("Second :" + results.getText());

和outpur看起来像这样:

First :
Second :Test

所以你可能会在检查???

之后将值插入文本字段
相关问题