2013-05-21 2 views
1

Я этот код, который «отключает» пользовательский ввод на JTextField после п вставляются символы:Блок текста письма после п символов

JTextField tf = new JTextField(); 
tf.addKeyListener(new KeyAdapter() { 
    public void keyTyped(KeyEvent e) { 
     if (((JTextField) e.getSource()).getText().length() > n) { 
      e.consume(); 
     } 
    } 
}); 

Он работает, но мне было интересно, если есть альтернатива, потому что я попробовал это на старом медленном компьютере, и когда я ввожу что-то в текстовое поле, добавляется письмо, тогда оно исчезает ... Я бы хотел избежать использования e.consume() после ввода пользователем и вместо этого предотвратить помехи.

Возможно ли это?

EDIT

Я забыл упомянуть, что я использовал JTextField только для этого примера, но я хотел бы этот код для работы с родовыми ввода текста компонентов, как JTextPane, JTextArea, и т.д.

+0

это может помочь: http://stackoverflow.com/questions/3519151/how-to-limit-the-number-of-characters- in-jtextfield –

+0

Кажется, что documentFilter - это путь для всех этих случаев. JTextPane поддерживает документы, а для JTextArea: http://www.linuxquestions.org/questions/programming-9/java-jtextarea-limiting-amount-of-characters-entered-155469/#post805335 –

+0

Все, что реализует 'JTextComponent 'interface имеет документ. Если конкретный документ поддерживает setDocumentFilter (например, как в 'AbstractDocument'), вы можете использовать этот метод. http://docs.oracle.com/javase/6/docs/api/javax/swing/text/JTextComponent.html. –

ответ

3

Вы можете использовать DocumentSizeFilter класс

Что делается для этого конкретного использования: http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TextComponentDemoProject/src/components/DocumentSizeFilter.java

Учебник о том, как сделать это в Реализация такой фильтр документа, Раздел:

Цитирование оттуда:

Чтобы ограничить символов в документе , DocumentSizeFilter переопределяет метод insertString класса DocumentFilter, который равен., каждый раз, когда текст вставляется в документ. Он также переопределяет метод замещения, который, скорее всего, будет вызван, когда пользователь вставляет новый текст. В общем случае вставка текста может привести к , когда пользователь вводит или вставляет новый текст или когда вызывается метод setText . Вот реализация Класс DocumentSizeFilter по метод insertString:

public void insertString(FilterBypass fb, int offs, 
         String str, AttributeSet a) 
    throws BadLocationException { 

    if ((fb.getDocument().getLength() + str.length()) <= maxCharacters) 
     super.insertString(fb, offs, str, a); 
    else 
     Toolkit.getDefaultToolkit().beep(); }