【问题标题】:Validation through JFormattedTextFields in Java通过 Java 中的 JFormattedTextFields 进行验证
【发布时间】:2011-08-06 11:31:33
【问题描述】:

我想要两个文本字段,它们将具有以下验证

  1. 两者都应该是整数
  2. 一个文本字段中的值应该是其他文本字段的整数倍

我为此使用了两个 JFormattedTextFields。这就是我到目前为止所做的事情

NumberFormat updateFormat,sampleFormat;
updateFormat = NumberFormat.getNumberInstance();
updateFormat.setMaximumFractionDigits(0);
updateFormat.setParseIntegerOnly(true);
sampleFormat = NumberFormat.getNumberInstance();
sampleFormat.setMaximumFractionDigits(0);
sampleFormat.setParseIntegerOnly(true);
javax.swing.JFormattedTextField jFormattedTextField1 =new javax.swing.JFormattedTextField(updateFormat);        
javax.swing.JFormattedTextField jFormattedTextField2 = new javax.swing.JFormattedTextField(sampleFormat);

有了这个帮助,我的第一部分就完成了 现在我坚持第二部分,即 jFormattedTextField1 值应该是 jFormattedTextField2 的整数倍。我想我需要通过扩展它来自定义我的 NumberFormat。但是我该怎么做呢?请帮帮我

【问题讨论】:

  • @mKorbel:感谢您的警告。如果他以后再次在这里提问,会注明这一点。
  • 您应该指定在违反任一规则时要发生的情况,例如截断、导航、通知等
  • @trashgod 对于这两个规则,我最初想要一个通知,但我认为我也可以通过截断来管理
  • 你在备选方案中深思熟虑是对的;另请参阅article

标签: java swing validation jformattedtextfield


【解决方案1】:

还可以考虑使用InputVerifier,如Validating Input 中所述。

【讨论】:

    【解决方案2】:

    NumberFormat 不适用于问题的“第二”部分,因为限制不是 数据格式 限制,而是 数据值 限制。我认为您将需要在第二部分使用 DocumentFilter。要了解有关如何使用这些的更多信息,请查看此处:Implementing a Document Filter

    【讨论】:

    • 您指出了一个很好的观点,即我必须设置数据值限制,而 NumberFormat 将不起作用。我查看了您发布的文档过滤器,但认为答案让垃圾神更易于使用。感谢回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 2018-06-15
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多