我有一个问题。我创建了一个Swing GUI表单。此表单包含JTextFields,JComboBox组件。
现在我想做什么,当用户按完成按钮时,我想验证JTextFields和JComboBox组件。我想为所有JTextFields编写通用方法,为JComboBoxes编写另一种常用方法。有谁知道验证API?
我不需要逐个验证所有字段。
答案 0 :(得分:7)
此处的一个选项是使用Swing的InputVerifier
验证每个JComboBox
&的输入。 JTextField
已使用。您可以在组件之间共享通用验证器:
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 :(得分:6)
如果“验证”意味着“检查所有字段”......那么,是的 - 您的“验证”例程将逐个检查所有字段:)
您还可以“随时验证”。有很多方法可以实现这一目标,包括:
答案 2 :(得分:2)
有一些第三方API可用。
你可以开发自己的答案 3 :(得分:1)
那是不可能的。相反,您必须创建一个继承JTextField的新类,然后将validate()
函数设置为private
或protected
,并在每次getText()
时调用它(这意味着您它必须@Override
。
替代方法是使用Container.getComponent()
并检查instanceof
,然后单独验证每个字段。然而,这违背了你的要求。