如何使用DocumentFilter设置可以在Jformattedtextfield中输入的最大值和最小值?

梅赫雷斯

我是Java编程的新手。我有一个文档过滤器,该过滤器仅允许使用“。”表示数值和小数。在一个JFormattedTextField现在,我想在该过滤器中实现一个方法,以仅允许一个最大值和一个最小值,就像我想要输入的数字的值一样,该值必须在[0-1]之间,否则它不应接受任何键入的内容。

现在我不想使用JSpinner,因为从0到1有数百万个小数,例如:0.0001,0.0012 ...

这是我的documentFilter代码:

package javagui.views;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.PlainDocument;

public class SeulementNumerique extends PlainDocument  {
    public static final String FLOAT = "0123456789.";
      protected String acceptedChars = null;
      protected boolean negativeAccepted = false;
      public SeulementNumerique() {
        this(FLOAT);
      }
      public SeulementNumerique(String acceptedchars) {  
        acceptedChars = acceptedchars;
      }

      public void setNegativeAccepted(boolean negativeaccepted) {
        if (acceptedChars.equals(FLOAT)) {
          negativeAccepted = negativeaccepted;
          acceptedChars += "-";
        }
      }

      public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {

        if (str == null)
          return;
        for (int i = 0; i < str.length(); i++) {
          if (acceptedChars.indexOf(str.valueOf(str.charAt(i))) == -1)
            return;
        }
        if (acceptedChars.equals(FLOAT) || (acceptedChars.equals(FLOAT + "-") && negativeAccepted)) {
          if (str.indexOf(".") != -1) {
            if (getText(0, getLength()).indexOf(".") != -1) {
              return;
            }
          }
        }
        if (negativeAccepted && str.indexOf("-") != -1) {
          if (str.indexOf("-") != 0 || offset != 0) {
            return;
          }
        }
        super.insertString(offset, str, attr); 
      }
    }

现在在我的主要代码中调用该过滤器:

formattedTextField_5 = new JFormattedTextField();
formattedTextField_5.setDocument(new SeulementNumerique());

有什么简单的方法可以设置可以在JFormattedTextField中输入的最大值和最小值?

科佩格

JTextField可与自定义DocumentFilter一起使用,该自定义DocumentFilter可检查值是否为数字并在指定范围内。下面是一个示例DocumentFilter,它可以完成此任务:

public class RestrictedNumberDocumentFilter extends DocumentFilter{

    private double min;
    private double max;

    public RestrictedNumberDocumentFilter(double min, double max){
        if ( max < min ){
            double temp = max;
            max = min;
            min = temp;
        }
        this.min = min;
        this.max = max;
    }

    @Override
    public void insertString(FilterBypass fb, int off, String str, AttributeSet attr) throws BadLocationException {
        StringBuilder sb = new StringBuilder(fb.getDocument().getText(0, fb.getDocument().getLength()));
        if ( test(sb.toString()) ){
            fb.insertString(off, str, attr);
        }else{
            //warn
        }

    } 
    @Override
    public void replace(FilterBypass fb, int off, int len, String str, AttributeSet attr)throws BadLocationException{
        StringBuilder sb = new StringBuilder(fb.getDocument().getText(0, fb.getDocument().getLength()));
        sb.replace(off, off+len, str);
        if ( test(sb.toString()) ){
            fb.replace(off, len, str, attr); 
        }else{
            //warn
        }

    }
    /**
     * Sanitized the input
     * @param val
     * @return
     */
    private boolean test(String val){
        try{
            double d = Double.parseDouble(val);
            if ( d >= min && d <= max ){
                return true;
            }
            return false;
        }catch(NumberFormatException e){
            return false;
        }
    }
}

若要使用此类,请为JTextField的Document设置DocumentFilter。

JTextField field = new JTextField();
AbstractDocument doc =  (AbstractDocument )field.getDocument();
doc.setDocumentFilter(new RestrictedNumberDocumentFilter (min, max));

您可能需要根据预期的输入情况进一步自定义此类。

你可以做类似的事情有一个的JFormattedTextField,但它可能有自己的问题,使用自定义的DocumentFilter描述这里

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用DocumentFilter设置可以在Jformattedtextfield中输入的最大值和最小值?

来自分类Dev

设置可以输入到JFormattedTextField中的最大值

来自分类Dev

如何在接受浮点值的输入类型上设置最小值和最大值?

来自分类Dev

如何基于选择角度动态设置输入控件的最小值和最大值

来自分类Dev

如何在熊猫数据框中设置最小值和最大值?

来自分类Dev

如何使用iOS图表设置x轴的最小值和最大值

来自分类Dev

如何使用iOS图表设置x轴的最小值和最大值

来自分类Dev

如何使用LINQ以删除列表中的最小值和最大值

来自分类Dev

如何使用javascript中的范围在最小值和最大值之间创建刻度?

来自分类Dev

输入数组java的最小值和最大值?

来自分类Dev

在轴上设置最小值和最大值

来自分类Dev

设置 kivy 整数的最小值和最大值

来自分类Dev

使用android webkit可以验证HTML5输入类型=数字的最大值和最小值是多少?

来自分类Dev

如何在Razor中设置数值编辑器的最小值,最大值和默认值

来自分类Dev

最小值和最大值

来自分类Dev

如何将用户提示(输入)存储到数组中并检索其最大值和最小值?

来自分类Dev

gnuplot:如何绘制最大值和/或最小值

来自分类Dev

如何从Json获取最小值和最大值

来自分类Dev

如何打印最大值和最小值?

来自分类Dev

Angularjs:如何检测输入数字的最小值和最大值

来自分类Dev

获取Clojure中的最大值和最小值

来自分类Dev

数组中的Java最小值和最大值

来自分类Dev

在列表中交换最大值和最小值

来自分类Dev

列表集合中的最小值和最大值

来自分类Dev

在.json中查找最大值和最小值

来自分类Dev

元组列表中的最小值和最大值

来自分类Dev

在列表中获取最小值和最大值

来自分类Dev

获取Clojure中的最大值和最小值

来自分类Dev

在.json中查找最大值和最小值

Related 相关文章

  1. 1

    如何使用DocumentFilter设置可以在Jformattedtextfield中输入的最大值和最小值?

  2. 2

    设置可以输入到JFormattedTextField中的最大值

  3. 3

    如何在接受浮点值的输入类型上设置最小值和最大值?

  4. 4

    如何基于选择角度动态设置输入控件的最小值和最大值

  5. 5

    如何在熊猫数据框中设置最小值和最大值?

  6. 6

    如何使用iOS图表设置x轴的最小值和最大值

  7. 7

    如何使用iOS图表设置x轴的最小值和最大值

  8. 8

    如何使用LINQ以删除列表中的最小值和最大值

  9. 9

    如何使用javascript中的范围在最小值和最大值之间创建刻度?

  10. 10

    输入数组java的最小值和最大值?

  11. 11

    在轴上设置最小值和最大值

  12. 12

    设置 kivy 整数的最小值和最大值

  13. 13

    使用android webkit可以验证HTML5输入类型=数字的最大值和最小值是多少?

  14. 14

    如何在Razor中设置数值编辑器的最小值,最大值和默认值

  15. 15

    最小值和最大值

  16. 16

    如何将用户提示(输入)存储到数组中并检索其最大值和最小值?

  17. 17

    gnuplot:如何绘制最大值和/或最小值

  18. 18

    如何从Json获取最小值和最大值

  19. 19

    如何打印最大值和最小值?

  20. 20

    Angularjs:如何检测输入数字的最小值和最大值

  21. 21

    获取Clojure中的最大值和最小值

  22. 22

    数组中的Java最小值和最大值

  23. 23

    在列表中交换最大值和最小值

  24. 24

    列表集合中的最小值和最大值

  25. 25

    在.json中查找最大值和最小值

  26. 26

    元组列表中的最小值和最大值

  27. 27

    在列表中获取最小值和最大值

  28. 28

    获取Clojure中的最大值和最小值

  29. 29

    在.json中查找最大值和最小值

热门标签

归档