通过Java中的JFormattedTextFields进行验证

通过Java中的JFormattedTextFields进行验证,java,swing,validation,jformattedtextfield,Java,Swing,Validation,Jformattedtextfield,我想要两个文本字段,它们将具有以下验证 两者都应该是整数 一个文本字段中的值应为另一个文本字段的整数倍 我已经使用了两个JFormattedTextFields来完成此操作。这就是我到现在为止所做的 NumberFormat updateFormat,sampleFormat; updateFormat = NumberFormat.getNumberInstance(); updateFormat.setMaximumFractionDigits(0); updateFormat.setPar

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

  • 两者都应该是整数
  • 一个文本字段中的值应为另一个文本字段的整数倍
  • 我已经使用了两个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。但我该怎么做呢?请帮助我解决问题的第二部分,因为限制不是数据格式限制,而是数据值限制,所以NumberFormat不起作用。我认为第二部分需要使用DocumentFilter。要了解更多关于如何使用这些,请看这里:

    也考虑使用AN,如在

    交叉点@ MkBoel:谢谢您的警告。如果他以后在此处再次提问,则会注意到这一点。您应该指定在以下方面违反任一规则时希望发生的情况,例如截断、导航、通知、,等等@trashgood对于这两条规则,我最初想要一个通知,但我认为我也可以通过截断来管理,所以你在备选方案中进行考虑是正确的;你也看到了。你指出了一个很好的观点,我必须设置一个数据值限制,NumberFormat将不起作用。我看了一下u发布的文档过滤器,但认为答案更容易使用。谢谢你的回复