2014-02-05 4 views
2

Я пытаюсь создать текстовое поле, которое ограничивает ввод пользователя. У меня есть этот код:Ограничение ввода TextField

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

Он успешно ограничивает вход. Однако, когда я пытался нажимать другие символы на клавиатуре, он меняет последний символ в текстовом поле. Любые идеи, чтобы остановить это? Я знаю, что другие скажут, что я должен использовать документ (не помню) при создании такого рода вещей, но я не могу. Я не знаю, как это сделать в 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

вот этот учебник для того, что означает 'супер': 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 –

Смежные вопросы