我有一個問題。我創建了一個Swing GUI窗體。此表單包含JTextFields,JComboBox組件。驗證Swing GUI中的所有字段
現在我想要做什麼,當用戶按完成按鈕我想驗證JTextFields和JComboBox組件。我想爲所有JTextFields和JComboBoxes的另一個常見方法編寫通用方法。有誰知道驗證API?
我不需要逐個驗證所有字段。
我有一個問題。我創建了一個Swing GUI窗體。此表單包含JTextFields,JComboBox組件。驗證Swing GUI中的所有字段
現在我想要做什麼,當用戶按完成按鈕我想驗證JTextFields和JComboBox組件。我想爲所有JTextFields和JComboBoxes的另一個常見方法編寫通用方法。有誰知道驗證API?
我不需要逐個驗證所有字段。
如果「驗證」指「檢查所有字段」 ......那麼,是 - 你的「驗證」程序會檢查所有字段一個接一個:)
你也可以「驗證,如-你走」。有很多方法可以做到這一點,包括:
我認爲Kenai驗證API是有用的。感謝大家。 – mtchinthaka
這是不可能的。相反,您將不得不創建一個繼承JTextField的新類,然後使用validate()
函數作爲private
或protected
,並且每次調用它時getText()
(這意味着您將不得不@Override
它)。
另一種方法是使用Container.getComponent()
並檢查instanceof
,然後單獨驗證每個字段。然而,這與你要求的是相反的。
有一些第三方的API可用。你可以開發自己的
另請參閱此JTable相關的[示例](http://stackoverflow.com/a/13510756/230513)。 – trashgod
一個樣本教程這裏的選項是使用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);
+1您可以在'shouldYieldFocus()'中爲[示例](http://stackoverflow.com/a/13510756/230513)提供反饋。 – trashgod
你什麼意思,什麼驗證(集裝箱,價值從,E.I. ???) – mKorbel
你嘗試公共工具? –
你可以看看[JGoodes綁定](http://www.jgoodies.com/freeware/libraries/binding/) – MadProgrammer