Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 验证Swing GUI中的所有字段_Java_Swing_Validation - Fatal编程技术网

Java 验证Swing GUI中的所有字段

Java 验证Swing GUI中的所有字段,java,swing,validation,Java,Swing,Validation,我有个问题。我创建了一个Swing GUI表单。此表单包含JTextFields、JComboBox组件 现在我想做的是,当用户按下完成按钮时,我想验证JTextFields和JComboBox组件。我想为所有JTextFields编写通用方法,为JComboxes编写另一个通用方法。有人知道验证API吗 我不需要逐个验证所有字段。这是不可能的。相反,您必须创建一个继承JTextField的新类,然后将validate()函数设置为private或protected,并在每次getText()(

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

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


我不需要逐个验证所有字段。这是不可能的。相反,您必须创建一个继承JTextField的新类,然后将
validate()
函数设置为
private
protected
,并在每次
getText()
(这意味着您必须
@覆盖它)时调用它

另一种方法是使用
Container.getComponent()
并检查
instanceof
,然后分别验证每个字段。但是,这与您的要求相反。

如果“验证”表示“检查所有字段”。。。然后,是-您的“验证”例程将逐个检查所有字段:)

您还可以“边走边验证”。实现这一点的方法有很多,包括:


    • 有一些第三方api可用。你可以发展你自己的

    • 必填字段
    • 电子邮件验证
    • 最大和最小长度等

    • 这里是一个示例教程,用于这里的一个选项是使用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);
      

      你的意思是什么,验证是什么(在容器中,值来自,e.i.?)你可以看看这个
      JTable
      相关的+1你可以在
      shouldYieldFocus()
      中提供反馈。我认为Kenai验证API是有用的。谢谢大家。