【问题标题】:Faulty input gets validated as faulty, but behaves as if it's correct [closed]错误的输入被验证为错误,但表现得好像它是正确的[关闭]
【发布时间】: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


【解决方案1】:

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

更新

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

和输出看起来像这样:

First :
Second :Test

所以你可以在检查后将值插入文本字段吗???

【讨论】:

  • 我每次测试时都会输入一些随机字符,所有 3 个文本字段和 1 个文本区域都包含文本。
  • @JeroenVannevel 你能打印curr 的值和comp.toString() 吗?
  • 打印curr时收到空行,肯定表示curr是一个空值。当我将System.out.println(txtLeertrajectCode.getText()); 放在循环前面时,我得到另一个空值。由于某种原因,所有文本字段都被视为空。
  • @JeroenVannevel 外观更新
  • 我的checkInput方法在用户点击按钮时被调用,所以在我填写完所有内容后才会调用检查。
【解决方案2】:

也许你应该改变这个:

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

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

【讨论】:

  • 你是对的,这是一个错字。但问题仍然存在,我的正确输入被验证为错误。
  • @JeroenVannevel:请至少为您的错字投上一票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
相关资源
最近更新 更多