2012-11-24 30 views
6

我有一個問題。我創建了一個Swing GUI窗體。此表單包含JTextFields,JComboBox組件。驗證Swing GUI中的所有字段

現在我想要做什麼,當用戶按完成按鈕我想驗證JTextFields和JComboBox組件。我想爲所有JTextFields和JComboBoxes的另一個常見方法編寫通用方法。有誰知道驗證API?

我不需要逐個驗證所有字段。

+0

你什麼意思,什麼驗證(集裝箱,價值從,E.I. ???) – mKorbel

+0

你嘗試公共工具? –

+0

你可以看看[JGoodes綁定](http://www.jgoodies.com/freeware/libraries/binding/) – MadProgrammer

回答

0

這是不可能的。相反,您將不得不創建一個繼承JTextField的新類,然後使用validate()函數作爲privateprotected,並且每次調用它時getText()(這意味着您將不得不@Override它)。

另一種方法是使用Container.getComponent()並檢查instanceof,然後單獨驗證每個字段。然而,這與你要求的是相反的。

6

一個樣本教程這裏的選項是使用Swing的InputVerifier驗證輸入每個JComboBox &使用。你可以共享部件之間的共同覈查員:

public class MyNumericVerifier extends InputVerifier { 
     @Override 
     public boolean verify(JComponent input) { 
      String text = null; 

      if (input instanceof JTextField) { 
      text = ((JTextField) input).getText(); 
      } else if (input instanceof JComboBox) { 
      text = ((JComboBox) input).getSelectedItem().toString(); 
      } 

      try { 
       Integer.parseInt(text); 
      } catch (NumberFormatException e) { 
       return false; 
      } 

      return true; 
     } 

     @Override 
     public boolean shouldYieldFocus(JComponent input) { 
      boolean valid = verify(input); 
      if (!valid) { 
       JOptionPane.showMessageDialog(null, "Invalid data"); 
      } 

      return valid; 
     } 
    } 

InputVerifier verifier = new MyNumericVerifier() 
comboBox.setInputVerifier(verifier); 
+0

+1您可以在'shouldYieldFocus()'中爲[示例](http://stackoverflow.com/a/13510756/230513)提供反饋。 – trashgod