Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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验证_Java_Swing_Validation_User Interface - Fatal编程技术网

Java 添加Swing验证

Java 添加Swing验证,java,swing,validation,user-interface,Java,Swing,Validation,User Interface,我正在尝试向我的JavaSwing应用程序添加一些验证。我有许多jcheckbox,必须至少选中一个才能进入下一个屏幕,否则会显示一个对话框。“下一步”按钮将用户带到下一页。我的问题是如何在jcheckbox上实现验证 My GUI swing应用程序:您必须向按钮添加事件侦听器,价格更高的是ActionListener如果您想走得更远,可以使用Action界面,该界面的行为类似于按钮的控制器,带有有用的常量和方法 ActionListener示例: myButton.addActionList

我正在尝试向我的JavaSwing应用程序添加一些验证。我有许多
jcheckbox
,必须至少选中一个才能进入下一个屏幕,否则会显示一个对话框。“下一步”按钮将用户带到下一页。我的问题是如何在
jcheckbox
上实现验证


My GUI swing应用程序:

您必须向按钮添加事件侦听器,价格更高的是
ActionListener
如果您想走得更远,可以使用
Action
界面,该界面的行为类似于按钮的控制器,带有有用的常量和方法

ActionListener示例:

myButton.addActionListener(new ActionListener(){
        @Override 
        public void actionPerformed(ActionEvent evt){
            // make validations here, if validation not passed
            // show the dialog you can use -->
            // JOptionPane.showMessageDialog(null,"Error happen!");
            //else you have to switch to another view
        }

}) 
更多信息和更好的示例:


下一个是完全个人化的,当我必须在按下按钮时验证表单时,我想在另一个类中分离验证逻辑。我使用自定义接口定义
validate()
方法

public interface FieldValidator{
 final String MY_VALIDATOR = "myValidator";
 void validate() throws ValidationException
 //Note: ValidationException is a custom exception
}
JComponent
中,我想验证一个文本字段,比如我定义的自定义验证器

textfield.putClientProperty(FieldValidator.VALIDATOR, new FieldValidator(){
             @Override
            public void validate() throws ValidationException{
                if(textfield.getText().isEmpty())
                       throw new ValidationException("text is empty");
            }

});
包含表单中所有JC组件的具体类

公共MyValidator实现FieldValidator{ 专用最终JComponent[]组件

public MyValidator(JComponent ... components){
   this.components=components;
}

@Override
public void validate() throws ValidationException{
    for(JComponent component : components){
        ((FieldValidator)component.getClientProperty(VALIDATOR)).validate();
    }
}
}

然后是客户端代码

 FieldValidator fieldsValidator = new MyValidator(checkbox1,checkbox2,textfield);
    button.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent evt){
               try{
                    fieldsValidator.validate();
                    //all it's ok change the view
                }catch(ValidationException ex){
                   JOptionPane.showMessageDialog(null,"Error happen");// error happen
                }
        }
    });

您必须向按钮添加一个事件侦听器,更昂贵的是
ActionListener
如果您想做得更深入,可以使用
Action
界面,该界面的行为类似于按钮的控制器,具有有用的常量和方法

ActionListener示例:

myButton.addActionListener(new ActionListener(){
        @Override 
        public void actionPerformed(ActionEvent evt){
            // make validations here, if validation not passed
            // show the dialog you can use -->
            // JOptionPane.showMessageDialog(null,"Error happen!");
            //else you have to switch to another view
        }

}) 
更多信息和更好的示例:


下一个是完全个人化的,当我必须在按下按钮时验证表单时,我想在另一个类中分离验证逻辑。我使用自定义接口定义
validate()
方法

public interface FieldValidator{
 final String MY_VALIDATOR = "myValidator";
 void validate() throws ValidationException
 //Note: ValidationException is a custom exception
}
JComponent
中,我想验证一个文本字段,比如我定义的自定义验证器

textfield.putClientProperty(FieldValidator.VALIDATOR, new FieldValidator(){
             @Override
            public void validate() throws ValidationException{
                if(textfield.getText().isEmpty())
                       throw new ValidationException("text is empty");
            }

});
包含表单中所有JC组件的具体类

公共MyValidator实现FieldValidator{ 专用最终JComponent[]组件

public MyValidator(JComponent ... components){
   this.components=components;
}

@Override
public void validate() throws ValidationException{
    for(JComponent component : components){
        ((FieldValidator)component.getClientProperty(VALIDATOR)).validate();
    }
}
}

然后是客户端代码

 FieldValidator fieldsValidator = new MyValidator(checkbox1,checkbox2,textfield);
    button.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent evt){
               try{
                    fieldsValidator.validate();
                    //all it's ok change the view
                }catch(ValidationException ex){
                   JOptionPane.showMessageDialog(null,"Error happen");// error happen
                }
        }
    });
你可以 您可以对每个
JCheckBox
使用
ActionListener
,并根据所选
JCheckBox
的数量更改
JButton
的状态

看一看

基本上,这个
ActionListener
将是
JCheckBox
s之间的共享实例,其唯一目的是确定实际选择了多少个。为了使这更容易,我将创建一个数组或
列表
,并将所有
JCheckBox
添加到其中。通过这种方式,您可以简单地迭代复选框列表,直到找到一个选定的复选框

你可以。。。 当复选框失去焦点时,使用
InputVerifier
验证复选框的状态。有关更多信息,请参阅

这种方法的唯一问题是

  • 每个组件只能有一个验证器。是的,您可以编写一个执行多个作业的验证器,但这就是问题所在,验证器应该只执行一个作业
  • 在进行验证过程之前,组件必须松开焦点。这可能看起来没什么大不了的,但如果用户坐在那里,“我检查了所有按钮,为什么按钮没有启用”,他们可能没有意识到他们必须更改焦点上下文才能进行验证
  • 你可以 您可以对每个
    JCheckBox
    使用
    ActionListener
    ,并根据所选
    JCheckBox
    的数量更改
    JButton
    的状态

    看一看

    基本上,这个
    ActionListener
    将是
    JCheckBox
    s之间的共享实例,其唯一目的是确定实际选择了多少个。为了使这更容易,我将创建一个数组或
    列表
    ,并将所有
    JCheckBox
    添加到其中。通过这种方式,您可以简单地迭代复选框列表,直到找到一个选定的复选框

    你可以。。。 当复选框失去焦点时,使用
    InputVerifier
    验证复选框的状态。有关更多信息,请参阅

    这种方法的唯一问题是

  • 每个组件只能有一个验证器。是的,您可以编写一个执行多个作业的验证器,但这就是问题所在,验证器应该只执行一个作业
  • 在进行验证过程之前,组件必须松开焦点。这可能看起来没什么大不了的,但如果用户坐在那里,“我检查了所有按钮,为什么按钮没有启用”,他们可能没有意识到他们必须更改焦点上下文才能进行验证


  • 您的问题是什么?我的问题是如何在JC复选框上实现验证。如果复选框未勾选,则应显示一个对话框。Swing是事件驱动的,您希望何时执行此操作?按下按钮时?单击下一个按钮时…您的问题是什么?我的问题是如何在JC复选框上执行验证。如果复选框未勾选,则应显示一个对话框。Swing是事件驱动的,何时执行?当按下按钮时?当单击下一个按钮时…感谢您的建议,当您说//在此处进行验证时,如果有不好的地方。你介意澄清一下吗?当验证没有通过时,谢谢你的建议,当你说//在这里进行验证时,如果有什么不好的地方。你介意澄清一下吗?什么时候不介意pass@nachokk这只是另一种方法。我喜欢实时反馈,我讨厌点击“下一步”并看到“你没有做这样或那样的”错误…看着你的web表单>|这是真的,但是在这种情况下,
    InputVerifier
    也是一个不错的选择。@nachokk-为什么我总是认为
    InputVerifier
    只用于文本组件:P@nachokk这只是另一种方法。我喜欢实时反馈,我讨厌点击“下一步”和seei