Невозможно установить ограничение на количество символов в JTextField - PullRequest
0 голосов
/ 23 декабря 2010

Я пытаюсь ограничить количество символов, вводимых в JTextField ... для этой цели я создал такой класс:

    class JTextFieldLimiter extends PlainDocument  
    {  
        private int limit;  
        JTextFieldLimiter(int limit)  
        {  
            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);  
        }  
      }
   }

Я думал, что это должно работать нормально, нокомпилятор показывает ошибку, он говорит:

cannot find symbol: method insertString(int,java.lang.String,javax.print.attribute.Attributeset)
location:class javax.swing.text.PlainDocument  
 super.insertString(offset,str,(AttributeSet) attr);  
      ^

Что не так с кодом?

Ответы [ 3 ]

2 голосов
/ 23 декабря 2010

Вы используете неправильный набор атрибутов.Проверьте ваш импорт.

Это должно быть:

javax.swing.text.AttributeSet

not:

javax.print.attribute.Attributeset
0 голосов
/ 14 февраля 2016

Я бы не стал использовать Document или DocumentFilter, если вы просто хотите ограничить количество символов в JTextField. Вы можете просто переопределить событие keyTyped (), как в следующем примере:

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 символа - если это так, вы «потребляете» ключевое событие (например, ), чтобы он не обрабатывался как обычно.

Один из моих учеников задал этот вопрос, и ни один из других ответов в StackOverflow не был таким коротким, как ответ, который я дал им, поэтому я решил опубликовать его для обсуждения :). Ура! * * 1006

0 голосов
/ 23 декабря 2010

Вместо создания пользовательского документа лучшим решением будет использование DocumentFilter.Затем это можно использовать в JTextField или JTextArea или JTextPane.Прочитайте раздел учебника по Swing на Как написать фильтр документов для рабочего примера.

...