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