Swing, VerticalScrollBar - Java

Узнай цену своей работы

Формулировка задачи:

    public void resetScrollPosition() {
        mainTextContainer.getVerticalScrollBar().setValue(mainTextContainer.getVerticalScrollBar().getMaximum());
    }
TextContainer - это JPanel. В нём находится TextArea. Приложение является чатом. Мне нужно сделать так, чтобы при добавлении новых сообщений скролл перемещался в самый низ. Метод выше активируется каждый раз после добавления сообщения, но работает кое-как. Скролл, перемещается в самый низ, что и требуется, то ровно на строчку выше, изредка на две. Что нужно добавить к этому методу, чтобы он всегда работал корректно?
mainTextContainer - это не JPanel, а JScrollPane. repaint() и validate() не помогают.
Когда добавил сон перед методом resetScroll на 5 миллисекунд и добавил repaint() и validate(), то стало хотя бы на входящие сообщения реагировать нормально(вероятно из-за того, что они выводятся другим потоком), однако при исходящих всё равно на строку выше показывает. Похоже на какие-то глюки. Будто текст добавляется позже установки скролла, однако в коде всё наоборот.

Решение задачи: «Swing, VerticalScrollBar»

textual
Листинг программы
    private void resetScrollPosition() {
        mainTextContainer.getVerticalScrollBar().setValue(mainTextContainer.getVerticalScrollBar().getMaximum());
        mainTextContainer.validate();
    }
 
    public void addMessage(String message) {
        mainTextField.append("\n" + message);
        resetScrollPosition();
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5