验证Swing GUI中的所有字段

时间:2012-11-24 17:38:38

标签: java swing validation

我有一个问题。我创建了一个Swing GUI表单。此表单包含JTextFields,JComboBox组件。

现在我想做什么,当用户按完成按钮时,我想验证JTextFields和JComboBox组件。我想为所有JTextFields编写通用方法,为JComboBoxes编写另一种常用方法。有谁知道验证API?

我不需要逐个验证所有字段。

4 个答案:

答案 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可用。

你可以开发自己的
  1. 必填字段
  2. 电子邮件验证,
  3. Max&最小长度等,
  4. 以下是Building a Swing Validation Package with InputVerifier

    的示例教程

答案 3 :(得分:1)

那是不可能的。相反,您必须创建一个继承JTextField的新类,然后将validate()函数设置为privateprotected,并在每次getText()时调用它(这意味着您它必须@Override

替代方法是使用Container.getComponent()并检查instanceof,然后单独验证每个字段。然而,这违背了你的要求。