Текстовая область не может правильно прокручиваться с помощью каретки - PullRequest
0 голосов
/ 15 февраля 2019

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

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

Я собираюсь разрешить пользователю прокручивать, но не сразу прокручивать вниз, потому что кто-то отправил сообщение.Что было бы идеально, так это то, что он работал как Discord, где он прокручивался только тогда, когда пользователь прокручивал все вниз или что-то в этом роде.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Моя рекомендация похожа на Camickr.Добавьте список изменений на полосу прокрутки и включите / отключите перемещение каретки в зависимости от того, прокручивается ли пользователь вниз или нет.Если полоса прокрутки находится на максимуме, включите перемещение каретки.Если это не так, оставьте его отключенным.

YourJScrollPane.getVerticalScrollBar().getModel().addChangeListener()
{
   //Override stateChanged(ChangeEvent e) With Caret Movement Switch
}

Обнаружение и сравнение текущей позиции полосы прокрутки, вызывая экстент, значение и максимальный экстент из модели (которая является BoundedRangeModel).

https://docs.oracle.com/javase/7/docs/api/javax/swing/BoundedRangeModel.html

/*Where to find the needed scrollbar position values*/
YourJScrollPane.getVerticalScrollBar().getModel().getExtent()
YourJScrollPane.getVerticalScrollBar().getModel().getValue()
YourJScrollPane.getVerticalScrollBar().getModel().getMaximum() //Bottom Position

/*Pseudocode*/
if (Value + Extent == Maximum)
{
    /*Enable Caret Movement - User is at bottom of page*/ 
}
else
{
    /*Disable Caret Movement - User is not at bottom of page*/
}

Комментарий Ниже приведены любые улучшения или рекомендации.

0 голосов
/ 15 февраля 2019

Что было бы идеально, если бы он работал как Discord, где он прокручивается только тогда, когда пользователь прокручивает все вниз или что-то в этом роде.

Извлечение SmartПрокрутка .Он добавляет AdjustmentListener к полосе прокрутки для управления прокруткой:

  1. Когда полоса прокрутки находится внизу, она продолжает автоматически прокручиваться.

  2. Когда он не внизу, он не будет прокручиваться.Пользователю потребуется прокрутить до конца, чтобы возобновить автоматическую прокрутку.

...