【问题标题】:Fire validations on button click (Java swing)单击按钮时触发验证(Java swing)
【发布时间】:2012-09-12 10:21:59
【问题描述】:

拥有一个专为触摸屏(到处都是大按钮)设计的 Java Swing 应用程序,其中包含许多表单,像往常一样,带有输入字段(文本框、组合、复选框、单选...)+ 一个按钮保存数据。

我需要一种“通用”方式来实现验证器(必需、仅限数字、正则表达式……),它会在按钮单击时触发,显示验证摘要(可能在消息框上),非常类似于 ASP .NET 的验证器系统,您可以在其中将一堆验证器与您的按钮一起分配给同一验证组中的输入字段,并且在每个验证器通过测试之前不会触发单击事件。

问题是如何实现或使用哪个框架来实现这种验证风格?

到目前为止,我在网上看到了 3 个选项,但没有一个适合我的需求:

  • Java Swing 的 InputVerfier 类:这很简单也很好,但是当输入失去焦点并且对于触摸屏用户来说真的很烦人时可以工作。

  • 简单验证 API:它是最适合我的验证风格的 API,但它似乎与底部显示错误的验证面板紧密耦合。我可以使用此 API 的变体来更改它在屏幕上显示错误的方式。

  • JGoodies 验证:似乎太强大了,但找不到任何简单的示例,而且我没有实现任何模型模式,因为该框架似乎需要它。

【问题讨论】:

    标签: java swing validation


    【解决方案1】:

    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);
    

    您可以通过使用 getter 约束来摆脱中间占位符。

    public class BusinessObject {
    
      @IsInvariant
      @NotNull 
      @Length(max = 4)
      public String getName() {
      ...
      }
    }
    

    请注意,OVal 遵循简洁的设计原则,可以轻松扩展。无论如何,它提供了相当多的开箱即用功能:

    • 使用表达式语言的条件约束
    • 嵌套属性的约束
    • 递归验证
    • 方法参数的约束
    • 先决条件的脚本表达式
    • 方法返回值约束
    • 探测模式可简化 UI 用户输入验证
    • 等等

    请看http://oval.sourceforge.net/userguide.html

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 2014-05-15
      相关资源
      最近更新 更多