组件迭代和验证问题

时间:2012-11-27 08:54:39

标签: java swing jtextfield jcombobox inputverifier

我有一个方法可以检查面板JTextField中的所有JPanel以查看它们是否为空,正在迭代容器中的所有组件。在容器中我有标签,文本字段和组合框。所以我可以验证前几个JTextField但是当我遇到第一个JComboBox<?>验证停止时,我似乎不明白为什么。以下是代码: -

private boolean validateInputFields(JPanel container) {
    for (Component comp : container.getComponents()) {

        if (comp instanceof JTextField) {
            JTextField temp = (JTextField) comp;
            if (temp.getText().trim().equals("")) {
                changeComponentProperties(temp);
                return true;
            } else{
                temp.setBackground(Color.WHITE);
                temp.setForeground(Color.BLACK);
            }
        }
    }

    return false;
}

任何帮助都将受到高度赞赏。

另请注意,单击按钮(例如保存按钮)时会调用此方法。

3 个答案:

答案 0 :(得分:1)

  

所以我可以验证前几个JTextFields,但是当我遇到第一个JComboBox<?>验证停止时,我似乎不明白为什么

我怀疑是这样的。我认为你的循环在第一次遇到带有空字符串的JTextField作为上下文时停止。在这种情况下,请输入以下if

if (temp.getText().trim().equals("")) {
  changeComponentProperties(temp);
  return true;
}

并且return语句会导致您退出循环。将它调整到以下应该可以做到这一点

private boolean validateInputFields(JPanel container) {
   boolean result = false; 
   for (Component comp : container.getComponents()) {

        if (comp instanceof JTextField) {
            JTextField temp = (JTextField) comp;
            if (temp.getText().trim().equals("")) {
                changeComponentProperties(temp);
                result = true;
            } else{
                temp.setBackground(Color.WHITE);
                temp.setForeground(Color.BLACK);
            }
        }
    }
    return result;
}

答案 1 :(得分:0)

private boolean validateInputFields(JPanel container) {
for (Component comp : container.getComponents()) {
if (!comp instanceof JTextField) {
continue;
}
else{
JTextField temp = (JTextField) comp;
if (temp.getText().trim().equals("")) {
changeComponentProperties(temp);
return true;
} else{
temp.setBackground(Color.WHITE);`enter code here`
temp.setForeground(Color.BLACK);
}
}
}
}
return false;
}

答案 2 :(得分:0)

非常感谢所有贡献者,您提供的所有解决方案都是有效且可行的但在我的情况下我找出了问题 - 事情是一些组件在屏幕上不可见,而在迭代通过提取的组件时他们是也没有包含,所以我添加了一个检查组件可见性状态的条件,即comp.isVisible()