Я пытаюсь реализовать JScrollPane с помощью JTextArea. JTextArea присоединяется к, и я хочу, чтобы JScrollPane продолжал прокручиваться по мере добавления большего текста. Как это можно достичь?
Создание JScrollPane автоматически прокрутки вниз
Ответ 1
Для (как я думаю) более простой ответ: Прокрутка текстовой области.
До JDK5 вам придется вручную изменить позицию каретки после каждого добавления. Теперь вы можете использовать это поведение как значение по умолчанию:
JTextArea textArea = new JTextArea(); DefaultCaret caret = (DefaultCaret)textArea.getCaret(); caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Преимущество этого заключается в том, что вам не нужно использовать этот фрагмент кода более одного раза в своем коде!
Ответ 2
Я нашел ответ здесь: Автопрокрутка JScrollPane и JList
scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
e.getAdjustable().setValue(e.getAdjustable().getMaximum());
}
});
Ответ 3
Если вы постоянно записываете данные, вы можете использовать:
textArea.setCaretPosition(textArea.getDocument().getLength());
сразу после добавления новых данных.
Это автоматически прокрутит весь путь до JScorllPane.
Ответ 4
Вот решение.
JTextArea textArea = new JTextArea();
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);`
Ответ 5
Возможна работа: вы можете объявить слушателя как класс, а затем создать экземпляр этого события в случае, когда это необходимо. После этого вы можете удалить класс после принудительной перерисовки экрана. Работает как шарм.
Ответ 6
(PS: Edit для SCREEN SHOOT)
import javax.swing.*;
import javax.swing.text.DefaultCaret;
public class NewClass {
public static void main(String[] args) {
JFrame win = new JFrame("test");
win.setSize(800, 500);
win.setResizable(false);
win.setLayout(null);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setLocationRelativeTo(null);
JTextArea txtListNum = new JTextArea();
JScrollPane barList = new JScrollPane(txtListNum);
DefaultCaret crList = (DefaultCaret) txtListNum.getCaret();
crList.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
barList.setLocation(10, 10); // Scrollbar Position
barList.setSize(180, 450); // Scrollbar Dimession
win.add(barList); // Scrolbar add to Frame
win.setVisible(true);
}
}