2013-03-26 65 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,其中顯示瞭如何將各個文檔過濾器合併爲一個。