简单写了一个只能输入数字的JTextField

本文介绍了一种使用Java Swing实现仅允许输入指定范围内数字的JTextField组件的方法。通过自定义NumJTextField类,可以确保用户输入的数值在设定的最小值和最大值之间,并通过弹窗反馈错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import javax.swing.JTextField;
import javax.swing.event.CaretListener;
import javax.swing.event.CaretEvent;
import javax.swing.JOptionPane;

public class NumJTextField extends JTextField
 {
  static final long serialVersionUID = 1L;
  
  private JTextField objNTF = this;
  
  private int min = 0, max =0;
  
  NumJTextField(int minValue,int maxValue)
   {
    super();
    min = minValue;
    max = maxValue;
    
    this.addCaretListener(new CaretListener()
     {

      public void caretUpdate(CaretEvent e)
       {
        try
         {
          int value = Integer.parseInt(objNTF.getText());

          if (value > min && value < max)
           {
            //-----DONOTHING-----  
           } else
           {
            System.out
              .println("input   must   between   "
                + min
                + "   ~   "
                + max);
            JOptionPane.showMessageDialog(null, "输入必须在" + min + "~" + max +"之间", "超出范围", JOptionPane.ERROR_MESSAGE);
           }
         } catch (Throwable ex)
         {
          System.out.println("need   input   integer   value");
          JOptionPane.showMessageDialog(null, "请输入整数!", "输入非法", JOptionPane.ERROR_MESSAGE);
         }
       }
     });
   }

 } 

//以后想用到只能输入数字的JTextField的话,就JTextFiled compName = new NumJTextField(minValue,maxValue),就可以了。

//但还有些问题,需要改进,如果输入非法虽然有提示,但是这时非法的字符已经留在你的NumJTextField部件上了。所以最好改成先保留上次输入结果,如果这次的输入非法,则恢复回去。这个我再改进。

//上面这个方法比较笨,后面又发现一个更好的方法。

public class NumField extends JTextField
 {

  public NumField(String cols)
   {
    super(cols);
   }

  protected Document createDefaultModel()
   {
    return new NumDocument();
   }

  static class NumDocument extends PlainDocument
   {

    public void insertString(int offs, String str, AttributeSet a)
      throws BadLocationException
     {

      if (str == null)
       {
        return;
       }
      char[] upper = str.toCharArray();
      for (int i = 0; i < upper.length; i++)
       {
        if (!Character.isDigit(upper[i]))
         str = str.substring(0, i);
       }
      super.insertString(offs, str , a);
     }
   }
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值