MaxLengthTextField

来源:互联网 发布:杰克逊总统知乎 编辑:程序博客网 时间:2024/06/14 08:18
大概是用的最多的组件的, 限制最大字符数.
不多说了, 一段代码解决他, :)
public class MaxLengthField extends JTextField {
 
private int maxLength = -1;
 
class MaxLengthDocument extends PlainDocument {
  
/**
   * (非 Javadoc)
   *
   * 
@see javax.swing.text.PlainDocument#insertString(int, java.lang.String,
   *      javax.swing.text.AttributeSet)
   
*/

  @Override
  
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
   
if (str == null || str.length() == 0)
    
return;
   
if (maxLength < 0)
    
super.insertString(offs, str, a);
   
else {
    String oldStr 
= getText(0, getLength());
    
if (oldStr.getBytes().length + str.getBytes().length > maxLength)
     
return;
    
else
     
super.insertString(offs, str, a);
   }

  }

 }

 
/**
  * (非 Javadoc)
  *
  * 
@see javax.swing.JTextArea#createDefaultModel()
  
*/

 @Override
 
protected Document createDefaultModel() {
  
return new MaxLengthDocument();
 }

 
public MaxLengthField(int maxLength) {
  setMaxLength(maxLength);
 }

 
public MaxLengthField() {
  
super();
 }

 
/**
  * 
@return Returns the maxLength.
  
*/

 
public int getMaxLength() {
  
return this.maxLength;
 }

 
/**
  * 
@param maxLength 要设置的 maxLength。
  
*/

 
public void setMaxLength(int maxLength) {
  
this.maxLength = maxLength;
 }

}
说白了没什么花头, 就是重写JTextField的Document, 也就是JTextField之MVC的Model部分. 至于蓝色代码部分, 是因为有中文字存在, 中文字是算2个长度的. 当然这和你数据库有关(大多数数据最后是要存放到数据库中, 数据库中中文字算几个字符还很难说, 我这里对应的是GB的数据库, 算2个字符. 如果你是U8的数据库, 我也不知道算几个, 据猜测:有时3位, 有时4位, -_-;;;)
 
就此打住, 今天先发一个easy的, 改天再发.