2012-10-25 158 views
5

我想限制用戶可以在文本字段中輸入的字符的最大長度,但它似乎不工作。限制在JTextField輸入的長度不起作用

下面是代碼:

text2 = new JTextField("Enter text here",8); 

有什麼我做錯了嗎?我怎樣才能使極限正常工作?

回答

9

構造

new JTextField("Enter text here",8); 

設置可見的列數到8,但不進入更多限制你。

您可以使用DocumentFilter來限制輸入長度。

+1

你可以在這裏找到一個很好的例子(http://www.java2s.com/Tutorial/Java/0240__Swing/LimitJTextFieldinputtoamaximumlength.htm)。 – Designpattern

10

您當前的代碼沒有設置最大長度,而是定義了可見列的數量。

爲了限制數據的最大長度,你可以設置文本字段的自定義Document不允許該打破的最大長度限制補充:

public final class LengthRestrictedDocument extends PlainDocument { 

    private final int limit; 

    public LengthRestrictedDocument(int limit) { 
    this.limit = limit; 
    } 

    @Override 
    public void insertString(int offs, String str, AttributeSet a) 
     throws BadLocationException { 
    if (str == null) 
     return; 

    if ((getLength() + str.length()) <= limit) { 
     super.insertString(offs, str, a); 
    } 
    } 
} 

然後設置你的文本字段使用此文檔:

text2.setDocument(new LengthRestrictedDocument(8)); 
0

只需延伸JTextField類和在構造覆蓋的keyReleased事件並將其指向在該檢查長度的新方法:

package gui; 

import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

import javax.swing.JTextField; 

public class RecordClassTextField extends JTextField { 

    public RecordClassTextField() { 
     this.addKeyListener(new KeyAdapter() { 
      @Override 
      public void keyReleased(KeyEvent e) { 
       cleanText(); 
      } 
     }); 
    } 

    private void cleanText() 
    { 
     if(this.getText().length() > 17){ 
      System.out.println("Over 17"); 
     } 
    } 
} 
0

我相信這會幫助你。我剛剛將keyTyped類型的KeyListener添加到JTextFieldKeyListener在用戶輸入的字符多於if語句中定義的限制時起作用。

text2 = new JTextField("Enter text here",8); 
text2.addKeyListener(new KeyAdapter() { 
     public void keyTyped(KeyEvent e) { 
      if (text2.getText().length() == 8) { 
       e.consume(); 
      } 
     } 
    });