Ограничение количества символов в сообщении в JTextPane - PullRequest
0 голосов
/ 15 июля 2010

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

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

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

// 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();
       }

Ответы [ 3 ]

1 голос
/ 15 июля 2010

Перетащите и падение.Скопировать и вставить.Доступность методов ввода.Есть много причин, по которым этот подход не подходит.

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

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

0 голосов
/ 15 июля 2010

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

0 голосов
/ 15 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...