JScrollPane прокрутить на последней добавленной строке - PullRequest
2 голосов
/ 09 мая 2011

У меня есть текст JTextArea и JScrollPane pane = new JScrollPane (text), я поставил pane.setAutoScrolls (true). Как получить это, когда я добавляю некоторый текст к моему компоненту, который прокручивается в конце (последняя строка) панели?

Ответы [ 3 ]

3 голосов
/ 09 мая 2011

Лучшее (и насколько мне известно, современное) объяснение того, как перемещается каретка, Роб Кэмик:

http://tips4java.wordpress.com/2008/10/22/text-area-scrolling/

3 голосов
/ 09 мая 2011

следует по ссылке из этой темы ScrollPane прокрутить до нижней задачи

1 голос
/ 29 августа 2011

Возможно ли, что вы не на EDT? Если добавление не происходит в EDT, позиция JTextArea не обновляется.

Короткий, запускаемый пример, чтобы показать это поведение:

import java.awt.TextArea;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;


public class Sample {

    public static void main(String[] args) {

        /*
         * Not on EDT
         */
        showAndFillTextArea("Not on EDT", 0, 0);

        /*
         * On EDT
         */
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                showAndFillTextArea("On EDT", 400, 0);
            }
        });
    }

    private static void showAndFillTextArea(String title, int x, int y) {

        JFrame frame = new JFrame(title);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JTextArea textArea = new JTextArea(20, 20);
        JScrollPane scrollPane = new JScrollPane(textArea);
        frame.getContentPane().add(scrollPane);
        frame.pack();
        frame.setLocation(x, y);
        frame.setVisible(true);
        for(int i = 0; i < 50; i++) {
            textArea.append("Line" + i + "\n");
        }
    }

}
...