2013-03-26 33 views
1

我在我的应用程序中有几个jtextfield,我想把其中一个允许大写和小写,并且可以引入到jtextfield的字符数量的限制。我必须把班级分开,一个放上限制,另一个放上限或小写。在同一时间设置jtextfield文本限制和大写

代码JTextField的极限:

package tester; 

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

public class TextLimiter extends PlainDocument { 

    private Integer limit; 

    public TextLimiter(Integer limit) { 
     super(); 
     this.limit = limit; 
    } 

    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { 
     if (str == null) { 
      return; 
     } 
     if (limit == null || limit < 1 || ((getLength() + str.length()) <= limit)) { 
      super.insertString(offs, str, a); 
     } else if ((getLength() + str.length()) > limit) { 
      String insertsub = str.substring(0, (limit - getLength())); 
      super.insertString(offs, insertsub, a); 
     } 
    } 
} 

,这里是设置大写或反之亦然代码:

package classes; 

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

public class upperCASEJTEXTFIELD extends DocumentFilter { 

    @Override 
    public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, 
      AttributeSet attr) throws BadLocationException { 
     fb.insertString(offset, text.toUpperCase(), attr); 
    } 

    @Override 
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, 
      AttributeSet attrs) throws BadLocationException { 

     fb.replace(offset, length, text.toUpperCase(), attrs); 
    } 
} 

恢复我的问题,我想设置一个JTextField上限= 11和大写。

+0

你会考虑使用'regex'吗? – Smit 2013-03-26 16:13:31

+0

请勿扩展文档。仅使用DocumentFilter。 – camickr 2013-03-26 16:38:01

回答

2
PlainDocument doc = new TextLimiter(); 
doc.setDocumentFiletr(new upperCASEJTEXTFIELD()); 
JTextField textField = new JTextField(); 
textField.setDocument(doc); 
1

我不得不separe类,一个把限制和其他将上或lowcase。

为什么你需要单独的类?仅仅因为你碰巧在网上找到了使用两个不同类的例子并不意味着你需要这样实现你的需求。

您可以轻松地将两个类的逻辑组合成一个DocumentFilter类。

或者,如果您希望获得更多的爱好者,可以查看Chaining Document Filters,其中显示了如何将各个文档过滤器合并为一个。