之前使用Qt編寫Gui程序的時候,可以直接使用正則表達式限制所有輸入框,非常方便。
這段時間要做一份課程設計,使用java編寫,ui要限制輸入,比如只能輸入x位數字,輸入身份證等。
百度了許多資料,發現了一個 JFormattedTextField 的類可以規范輸入。
剛開始試用覺得還不錯,后來發現一個嚴重的問題:如果光標不是從最左邊插入的話,那么左邊的位置就會被空格占滿,影響輸入。
其實輸入框都會提供一個 setDocument 的方法以規范輸入,所以我決定自己寫一個類來實現正則表達式。
代碼:
import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; public class MyRegExp extends PlainDocument { private Pattern pattern; private Matcher m; public MyRegExp(String pat) { super(); this.pattern=Pattern.compile(pat); } @Override public void insertString (int offset, String str, AttributeSet attr) throws BadLocationException { if (str == null){ return; } String tmp=getText(0, offset).concat(str); m=pattern.matcher(tmp); if(m.matches()) super.insertString(offset, str, attr); } }
OK,接下來就是調用,方法非常簡單,比如我想限制只能輸入最多兩位小數:
JTextField textFiled=new JTextFiled(); textFiled.setDocument(new MyRegExp("\\d*(\\.\\d{0,2})?"));
這個方法也同時適用於粘貼操作。也可以用於其他擁有setDocument的類,如JPasswordField
但是有一點必須注意,限制輸入范圍必須從0開始,不能強行限制位數,例如 new MyRegExp("\\d{2,2}") 是不行的
轉載請注明出處:http://www.cnblogs.com/ztzheng/p/3639056.html