2014-02-05 257 views
2

我正在嘗試製作限制用戶輸入的文本字段。 我有這樣的代碼:限制文本字段輸入

private void jTextField5KeyTyped(java.awt.event.KeyEvent evt) {          
//This limits the input: 
if(jTextField5.getText().length()>=2) { 
    jTextField5.setText(jTextField5.getText().substring(0, 1)); 
} 
}     

它成功地限制了輸入。但是,當我嘗試按鍵盤上的其他字符時,它會更改文本字段上的最後一個字符。 任何想法,以阻止此?我知道其他人會說我應該使用Document(不記得)來製作這種東西,但我不能。我不知道如何在netbeans中做到這一點。 請幫忙。

+0

可以擴展['PlainDocument'](http://docs.oracle.com /javase/7/docs/api/javax/swing/text/PlainDocument.html)。 – Maroun

+1

如何?在netbeans中? – user3260589

+0

使用'DocumentSizeFilter'類 –

回答

2

這裏有一個簡單的方法來做到這一點:

private void textFieldKeyTyped(java.awt.event.KeyEvent evt) {      
if(textField.getText().length()>=2) { 
    evt.consume(); 
} 
} 
+0

這就是偉大 – user3260589

+0

謝謝太多了! – user3260589

+0

它工作嗎?您可以將其標記爲答案:) –

0

試試這個例子使用PlainDocument

class JTextFieldLimit extends PlainDocument { 

private int limit; 

JTextFieldLimit(int limit) { 
    super(); 
    this.limit = limit; 
} 

JTextFieldLimit(int limit, boolean upper) { 
    super(); 
    this.limit = limit; 
} 

public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException { 
    if (str == null) { 
     return; 
    } 

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

public class Main extends JFrame { 

JTextField textfield1; 
JLabel label1; 

public void init() { 
    setLayout(new FlowLayout()); 
    label1 = new JLabel("max 10 chars"); 
    textfield1 = new JTextField(10); 
    add(label1); 
    add(textfield1); 
    textfield1.setDocument(new JTextFieldLimit(110));///enter here the Maximum input length you want 
    setSize(300, 300); 
    setVisible(true); 
} 


} 
+0

你能解釋一下這些代碼嗎?我不是很擅長這個,我不明白什麼是超級或其他的東西 – user3260589

+0

這裏這個教程是什麼'super'的意思是:http: //docs.oracle.com/javase/tutorial/java/IandI/super.html –

+0

另一個用於'PlainDocument' http://docs.oracle.com/javase/7/docs/api/javax/swing/text /PlainDocument.html –