2010-08-21 3 views
4

Я стараюсь ограничить количество допустимых символов до 5 с помощьюПредельное количество символов в JTextField

try { 
     jFormattedTextField2.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.MaskFormatter("*****"))); 
    } catch (java.text.ParseException ex) { 
     ex.printStackTrace(); 
    } 

Однако, когда я только ввести 1 символ, всегда будет 4 другие пространства быть проложенные. Как я могу избежать заполнения, в то же время ограничивая количество символов?

ответ

8

JFormattedTextField ведет к неправильным пользовательским интерфейсам.

Класс, который вы хотите, это javax.swing.text.DocumentFilter. Это позволяет изменять мутации в стиле цепочки команд.

+0

http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html имеет раздел «Реализация фильтра документов», в котором более подробно объясняется, как использовать 'DocumentFilter' для ограничения длины поле, включая исходный код для класса example, DocumentSizeFilter, который делает именно это. –

1

Вместо JFormattedTextField используйте простой JTextField. Измените документ текстового поля, чтобы принять только определенное количество символов, установив собственный документ.

+0

A DocumentListener, который их отвергает? –

+0

@Tom: не знаю, что я думал там с слушателем. Я изменю свой ответ, чтобы просто упомянуть пользовательский документ. Это упоминается в учебнике Java Text. Я согласен с тем, что DocumentFilter - это путь сюда. – jackrabbit

0

Отличный вопрос, и странно, что набор инструментов Swing не включает эту функциональность изначально для JTextFields. Но, вот большой ответ от моего курса Udemy.com «Learn Java Как Kid»:

txtGuess = new JTextField(); 
txtGuess.addKeyListener(new KeyAdapter() { 
    public void keyTyped(KeyEvent e) { 
     if (txtGuess.getText().length() >= 3) // limit textfield to 3 characters 
      e.consume(); 
    } 
}); 

Это ограничивает количество символов в угадайку текстового поля до 3-х символов, с помощью переопределения события keyTyped и проверок чтобы увидеть, имеет ли текстовое поле 3 символа, если это так, вы «потребляете» ключевое событие (e), чтобы оно не обрабатывалось как нормальное.

Надеюсь, что это поможет :)

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