9

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

现在我想做的是,当用户按下完成按钮时,我想验证 JTextFields 和 JComboBox 组件。我想为所有 JTextField 编写通用方法,为 JComboBoxes 编写另一个通用方法。有人知道验证 API 吗?

我不需要一一验证所有字段。

4

4 回答 4

8

这里的一种选择是使用 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);
于 2012-11-24T17:54:27.510 回答
6

如果“验证”意味着“检查所有字段”......那么,是的 - 您的“验证”例程将一一检查所有字段:)

您也可以“即用即验证”。有很多方法可以做到这一点,包括:

于 2012-11-24T17:44:23.593 回答
2

有一些第三方 api 可用。您可以开发自己的

  1. 必填项目,
  2. 电子邮件验证,
  3. 最大和最小长度等,

这是使用 InputVerifier 构建 Swing 验证包的示例教程

于 2012-11-24T17:46:21.750 回答
1

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

另一种方法是使用Container.getComponent()并检查instanceof然后分别验证每个字段。然而,这违背了你的要求。

于 2012-11-24T17:42:49.617 回答