有一个专为触摸屏设计的 Java Swing 应用程序(到处都是大按钮),其中有很多表单,像往常一样,由输入字段(文本框、组合、复选框、单选按钮等)+一个按钮组成保存数据。
我需要一种“通用”方式来实现 validator (必需、仅限数字、正则表达式等),该 validator 在单击按钮时触发,显示验证摘要(可能在消息框中),非常类似于 ASP .NET 的 validator 系统,您可以将一堆 validator 与按钮一起分配到同一验证组中的输入字段,并且在每个 validator 通过测试之前不会触发单击事件。
问题是如何实现或使用哪个框架来实现这种验证样式?
到目前为止,我在网上看到了 3 个选项,但没有一个符合我的需求:
Java Swing 的 InputVerfier 类:该类简单而美观,但在输入失去焦点时起作用,并且对于触摸屏用户来说确实很烦人。
简单验证 API:它是最适合我的验证风格的 API,但它似乎与底部显示错误的验证面板紧密耦合。我可以使用此 API 的变体来更改其在屏幕上显示错误的方式。
JGoodies 验证:似乎太强大了,但找不到任何简单的示例,而且我没有实现任何模型模式,因为该框架似乎需要它。
最佳答案
OVal(http://http://oval.sourceforge.net/)可以完全满足您的需求。
假设您有一个占位符来表示表单中的所有值。当用户提交表单时,可以用实际数据构建并填充它。 OVal 允许您定义类字段的约束:
public class BusinessObject {
@NotNull
@NotEmpty
@Length(max=32)
private String name;
...
}
定义后,您可以轻松触发验证过程。 OVal 将为您提供违规行为列表,以便您可以轻松构建摘要对话。
Validator validator = new Validator();
BusinessObject bo = new BusinessObject();
// collect the constraint violations
List<ConstraintViolation> violations = validator.validate(bo);
您可以通过使用 getters 约束来消除中间占位符。
public class BusinessObject {
@IsInvariant
@NotNull
@Length(max = 4)
public String getName() {
...
}
}
请注意,OVal 遵循简洁的设计原则,并且可以轻松扩展。不管怎样,它提供了相当多的开箱即用的功能:
- 使用表达式语言的条件约束
- 嵌套属性的约束
- 递归验证
- 方法参数的约束
- 先决条件的脚本表达式
- 方法返回值约束
- 简化 UI 用户输入验证的探测模式
- 还有更多
关于java - 单击按钮时触发验证(Java swing),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12506061/