Проблема с итерацией и проверкой компонентов

У меня есть метод, который проверяет все 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 ответа

Решение

Огромное спасибо всем, кто внес свой вклад, все предоставленные вами решения были действительными и работоспособными, но в моей ситуации я выяснил проблему - дело в том, что некоторые компоненты не были видны на экране, и во время итерации по выбранным компонентам они также не были включены, поэтому я добавил условие, чтобы проверить состояние видимости компонента, т.е. comp.isVisible(),

Так что я могу проверить первые несколько 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;
}
Другие вопросы по тегам