限制JTextField的输入个数和格式

来源:互联网 发布:知乎snh48 编辑:程序博客网 时间:2024/05/01 07:17

 public class Input extends javax.swing.JFrame {
    private String limit1="[0-9]",limit2="[a-h]";
    /** Creates new form Input */
    public Input() {
        initComponents();
        CheckInput c1=new CheckInput();
        c1.setCharLimit(limit1);     //设置输入范围
        c1.setMaxLength(5);          //设置输入的最大长度
        c1.setMaxValue(10000);       //设置输入的最大数字
        jTextField1.setDocument(c1);
        
        CheckInput c2=new CheckInput();
        c2.setCharLimit(limit2);
        c2.setMaxLength(7);
        jTextField2.setDocument(c2);
        
    }

   
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("可以输入0到9之间的数字5个,最大值为10000,不正确或超出长度均报警");

        jLabel2.setText("请输入");

        jLabel3.setText("可以输入a到h之间的字母7个,不正确或超出长度均报警");

        jLabel4.setText("请输入");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addGap(18, 18, 18)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, 384, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel4)
                        .addGap(18, 18, 18)
                        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 156, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jLabel3)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(15, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

   
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Input().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration

}


import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
import java.awt.Toolkit;
import java.util.regex.Pattern;


public class CheckInput extends PlainDocument {
    private String limit = null; // 输入字符限制的正则表达式
    private int maxLength = -1; // 输入字符最大长度的限制,-1为不限制
    private double maxValue = 0; // 如果输入的是数字,则最大值限制
    private boolean isMaxValue = false; // 是否采用了最大值限制
    private Toolkit toolkit = null; // 用来在错误的时候发出系统声音
    public CheckInput() {
        super();
        this.init();
    }
    private void init() {
        toolkit = Toolkit.getDefaultToolkit();
    }   
    public void setCharLimit(String limit) {
        this.limit = limit;
    }
    public void setMaxLength(int maxLength) {
        this.maxLength = maxLength;
    }
    public void setMaxValue(double maxValue){
        this.isMaxValue = true;
        this.maxValue = maxValue;
    }
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException, NumberFormatException {
        //offs起始的偏移量  str - 要插入的字符串
        // 若字符串为空,直接返回。
        if (str == null) {
            return;
        }
        char[] ch = str.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            String temp = String.valueOf(ch[i]);
            // 如果要输入的字符不在允许范围内
            boolean ab=Pattern.compile(limit).matcher(temp).find();
            if (!ab) {
               toolkit.beep(); // 发出声音
               return;
            }
            // 如果有字符长度限制,并且现在的字符长度已经大于或等于限制
            if (maxLength > -1 && this.getLength() >= maxLength) {
                toolkit.beep(); // 发出声音
                return;
            }            
        }
        // 如果内容设置了最大数字
        if (isMaxValue) {
            String s = this.getText(0, this.getLength()); // 文档中已有的字符
            s = s.substring(0, offs) + str + s.substring(offs, s.length());
            if (Double.parseDouble(s) > maxValue) {   
                toolkit.beep(); // 发出声音   
                return;
            }
        }   
        super.insertString(offs, new String(ch), a);
    }
}

 

 

 

JTextField.addKeyListener(new KeyListener() {public void keyTyped(KeyEvent e) {if(JTextField.getText().length>16&&e.getKeyChar()!='\b') { e.setKeyChar('\0'); JOptionPane.showMessageDialog(null,"密码已达最大长度!"); } }public void keyPressed(KeyEvent e){}public void keyReleased(KeyEvent e){} });

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 16岁不认字怎么办 数学细节丢分怎么办 感觉自己老了怎么办 小学拼音不过关怎么办 小学面试不过关怎么办 小学阅读不过关怎么办 孩子计算老出错怎么办 工作中总是马虎怎么办 孩子总是计算错误怎么办 做设计老是犯错怎么办 小学生阅读总出错怎么办 写作文没思路怎么办 孩子不爱写作文怎么办 写作文没有素材怎么办 写作文没有灵感怎么办 做事工作马虎粗心大意怎么办 小孩作业马虎粗心大意怎么办 孩子写字一直错怎么办 孩子写字老错怎么办 写错字涂黑了怎么办 写错字不能涂改怎么办 孩子爱写错别字怎么办 孩子读题马虎怎么办 孩子知错不该怎么办 小孩胆小反应慢怎么办 孩孑经常流鼻血怎么办 中考考号写错了怎么办 头后仰就头晕怎么办 感觉自己要晕倒怎么办 孩子不愿动手写字怎么办 老年人恶心想吐怎么办 小学生老写错别字怎么办 突然头晕站不稳 怎么办 早上起床突然天旋地转怎么办 躺着突然感觉天旋地转怎么办 眩晕症发作时怎么办 低血糖恶心想吐怎么办 更年期头晕头胀怎么办 年轻人头晕头胀怎么办 教案:《眯眼了怎么办》 迷路了怎么办活动意图