我有一个检查面板中所有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()
。