java - 单击按钮时触发验证(Java swing)

标签 java swing validation

有一个专为触摸屏设计的 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 用户输入验证的探测模式
  • 还有更多

请参阅http://oval.sourceforge.net/userguide.html

关于java - 单击按钮时触发验证(Java swing),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12506061/

相关文章:

java - JSlider 适合 JPanel 的宽度

javascript - 为什么设置 input.value 等于空字符串不会删除最近按下的键?

c++ - C++ 中的数值数据验证

java - 是否有正则表达式可以防止输入 Javascript?

java - 同时启动和终止线程

java - 通过 Session.update 和 HibernateTemplate.merge 进行 Hibernate 更新的区别

java - 正则表达式是否足够,或者我需要检查编码吗?

java - 是否可以像在 gradle 中设置 sonar.sources 一样在 jenkins 中设置?

java - 如何访问 JPanel 上的控件...?

java - 从 Swing 应用程序中的 JFXPanel 创建模态舞台