我有个问题。我创建了一个 Swing GUI 表单。此表单包含 JTextFields、JComboBox 组件。
现在我想做的是,当用户按下完成按钮时,我想验证 JTextFields 和 JComboBox 组件。我想为所有 JTextField 编写通用方法,为 JComboBoxes 编写另一个通用方法。有人知道验证 API 吗?
我不需要一一验证所有字段。
我有个问题。我创建了一个 Swing GUI 表单。此表单包含 JTextFields、JComboBox 组件。
现在我想做的是,当用户按下完成按钮时,我想验证 JTextFields 和 JComboBox 组件。我想为所有 JTextField 编写通用方法,为 JComboBoxes 编写另一个通用方法。有人知道验证 API 吗?
我不需要一一验证所有字段。
这里的一种选择是使用 Swing'sInputVerifier
来验证每个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);
如果“验证”意味着“检查所有字段”......那么,是的 - 您的“验证”例程将一一检查所有字段:)
您也可以“即用即验证”。有很多方法可以做到这一点,包括:
那是不可能的。相反,您将必须创建一个继承 JTextField 的新类,然后将validate()
函数作为private
or protected
,并在每次您getText()
(这意味着您必须@Override
)从中调用它。
另一种方法是使用Container.getComponent()
并检查instanceof
然后分别验证每个字段。然而,这违背了你的要求。