Проблема с итерацией и проверкой компонентов
У меня есть метод, который проверяет все 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;
}