组件迭代和验证问题



我有一个检查面板中所有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;
}

任何帮助将不胜感激。

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

所以我可以验证前几个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;
}
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;
}

非常感谢所有做出贡献的人,您提供的所有解决方案都是有效且可行的,但在我的情况下,我解决了问题 - 问题是某些组件在屏幕上不可见,并且在迭代获取的组件时,它们也不包括在内,所以我添加了一个条件来检查组件可见性状态,即comp.isVisible()

最新更新