Принятое решение работает хорошо, но только когда текстовая область редактируема, то есть без jTextArea.setEditable(false)
. Решение, предложенное Krigath , является более общим, но имеет проблему, как указано здесь JScrollPane и JList auto scroll . Используя ответы на этот вопрос, вы можете получить общее решение, например ::10000
JScrollPane scrollPane = new JScrollPane(jTextArea);
verticalScrollBarMaximumValue = scrollPane.getVerticalScrollBar().getMaximum();
scrollPane.getVerticalScrollBar().addAdjustmentListener(
e -> {
if ((verticalScrollBarMaximumValue - e.getAdjustable().getMaximum()) == 0)
return;
e.getAdjustable().setValue(e.getAdjustable().getMaximum());
verticalScrollBarMaximumValue = scrollPane.getVerticalScrollBar().getMaximum();
});
Панель прокручивается вниз, только когда вертикальная полоса прокрутки расширяется, в ответ на добавленные строки текста.
Я признаю, что можно найти метод фильтрации событий без дополнительных переменных, и был бы признателен, если бы кто-нибудь опубликовал его.