2010-07-15 3 views
0

У меня есть JTextPane, где я хочу ограничить ввод пользователем сообщения только 200 символами. Итак, у меня есть KeyListener, который слушает Keyevent и проверяет KeyEvent. Если сообщение содержит более 200 символов, отображается JOptionPane.showMessageDialog для отображения предупреждения пользователю. Этот бит работает отлично.Ограничение количества символов в сообщении в JTextPane

Проблема заключается в том, что после того, как предупреждение отображается, и пользователи нажимают кнопку «ОК», он может использовать только клавишу Backspace в JTextPane. Я хочу, чтобы пользователь мог использовать ключ удаления, клавиши со стрелками, клавиши сдвига и управления, чтобы иметь возможность выбирать текст для удаления.

Может ли кто-нибудь предложить способ достижения этого?

// Add Key Listener to Send Field 
chatEditorKeyListener = new KeyAdapter() 
{ 
    public void keyPressed(KeyEvent e) 
    { 
     checkKeystroke(e); 
    } 
}; 



private void checkKeystroke(KeyEvent e) 
{ 
    //Check if enter or back space is entered 
    if(e.getKeyCode() != KeyEvent.VK_BACK_SPACE && e.getKeyCode() != KeyEvent.VK_ENTER) 
    { 
     // user is typing, so test the size as we go and report when we hit boundary 
     String text = messageBox.getText(); 
     if(text.length() > maxMessageSize) 
     { 
     showAlertBox(); 
     } 
    } 
    else if (e.getKeyCode() == KeyEvent.VK_ENTER) 
    { 
     //User sending the message 
     e.consume(); 
     String text = messageBox.getText(); 
     if(text.length() > maxMessageSize) 
     { 
      showAlertBox(); 
     } 

ответ

0

Прочтите раздел от Swing tutorial «Функции текстовых компонентов», который содержит раздел «Реализация фильтра документов», который делает именно то, что вы хотите.

1

Перетаскивание. Скопировать и вставить. Методы ввода специальных возможностей. Существует много причин, по которым этот подход не подходит.

Вместо этого ограничивайте содержимое с помощью Document. Установите DocumentFilter по AbstractDocument.setDocumentFilter, чтобы вам не нужно было подклассы или реализовать документ.

Всплывающее окно отлично подходит для пользователей. Будьте более тонкими. Не позволяйте больше персонажа (пожалуйста, не подавайте звуковой сигнал!). Возможно, добавьте обратный отсчет, как твиттер, и stackoverflow.

0

Проверьте, соответствует ли текущий размер + 1 границе, потребляет событие и показывает окно сообщения. Важно, чтобы это событие никогда не превышало размер вашего текстового поля!

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