2012-11-27 83 views
0

我有一個方法,檢查面板JPanel中的所有JTextField s,看看它們是否爲空,我遍歷容器中的所有組件。在容器中我有標籤,文本字段和組合框。所以我可以驗證前幾個JTextField s,但是當我遇到第一個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; 
} 

任何援助將不勝感激。

還要注意,當點擊一個按鈕(比如保存按鈕)時會調用它。

+1

考慮使用'JFormattedTextField'。這應該允許您在輸入無效輸入時立即更改背景顏色。看到[這個答案](http://stackoverflow.com/a/13424140/1076463)爲例 – Robin

+0

感謝所有人的貢獻,你提供的所有解決方案都是有效和可行的,但在我的情況下,我找出了問題 - 事情是一些組件在屏幕上不可見,並且通過獲取的組件進行迭代時,它們也不包含在內,所以我添加了一個條件來檢查組件可見性狀態,即'comp.isVisible()'。 – tmwanik

回答

0

潤通 - 問題是某些部件不在屏幕中可見並且在迭代通過取出的組件時它們也不包括在內,所以我添加了一個條件來檢查組件可見性狀態,即comp.isVisible()

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; 
} 
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; 
}