После того, как вы выделите текст, JTextArea больше не будет прилипать к низу.
Проблема в том, что автоматическая c прокрутка будет происходить только тогда, когда курсор находится в конце документа.
Выделение текста не является проблемой. Проблема заключается в том, что пользователь щелкает мышью в любом месте текстовой области, поскольку это изменит положение каретки.
Итак, если вы хотите, чтобы автоматическая c прокрутка была всегда включена, правильным решением будет удаление MouseListener
и MouseMouseMotionListener
из текстовой области, чтобы предотвратить все действия, связанные с мышью.
Или, как простой прием, вы всегда можете сбросить положение курсора в документе:
textArea.addMouseListener( new MouseAdapter()
{
@Override
public void mouseReleased(MouseEvent e)
{
JTextArea textArea = (JTextArea)e.getSource();
textArea.setCaretPosition(textArea.getDocument().getLength());
}
});
Изменить:
Предположим, у вас есть несколько текстовых областей для одинаковой функциональности. Вам не нужно создавать собственный слушатель для каждой текстовой области. Слушателем можно поделиться. Код может быть записан как:
MouseListener ml = new new MouseAdapter()
{
@Override
public void mouseReleased(MouseEvent e)
{
JTextArea textArea = (JTextArea)e.getSource();
textArea.setCaretPosition(textArea.getDocument().getLength());
}
};
textArea1.addMouseListener(ml);
textArea2.addMouseListener(ml);