Вырезать и вставить в JTextArea - PullRequest
4 голосов
/ 05 февраля 2010

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

Однако теперь я хочу обработать условие, когда пользователь выполняет опцию «вырезать» или «вставить», нажимая «Ctrl + X» и «Ctrl + V». Я знаю, что методы по умолчанию из JTextComponent наследуются в JTextArea, но я хочу получить обрезанный текст и узнать длину обрезанного текста, чтобы уменьшить счетчик, поддерживаемый для символов, и увеличить его при вставке на соответствующую величину.

Ответы [ 3 ]

4 голосов
/ 05 февраля 2010

Создайте DocumentFilter и установите его на новый PlainDocument. Используйте этот документ для создания JTextArea. (Или используйте документ по умолчанию JTextArea, после приведения к AbstractDocument).

Смотрите мой ответ здесь для образца.

3 голосов
/ 05 февраля 2010

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

Фильтр предпочтительнее для слушателя, потому что он предотвращает обновление документа. Если вы используете прослушиватель, вам нужно будет отменить изменения, когда текст превысит ваш лимит.

3 голосов
/ 05 февраля 2010

Похоже, вам нужно использовать DocumentListener для отслеживания изменений. События в слушателе документа сообщат вам, сколько символов было добавлено / удалено в любом данном изменении, а также дадут вам ссылку на Document, который поддерживает текстовую область.

Ниже приведен пример реализации прослушивателя документов для JTextArea с именем textArea:

textArea.getDocument().addDocumentListener( new DocumentListener() {
  public void changedUpdate( DocumentEvent e )
  {
  }

  public void insertUpdate( DocumentEvent e )
  {
    System.out.println( "insertUpdate: Added " + e.getLength() + 
        " characters, document length = " + e.getDocument().getLength() );
  }

  public void removeUpdate( DocumentEvent e )
  {
    System.out.println( "removeUpdate: Removed " + e.getLength() +
        " characters, document length = " + e.getDocument().getLength() );
  }
});

Этот слушатель обнаружит вырезки и вставки, а также нажатия клавиш.

...