JScrollPane 滚动到最后添加的行

发布于 2024-11-05 13:31:27 字数 130 浏览 2 评论 0原文

我有 JTextArea 文本和 JScrollPane pane=new JScrollPane(text),我放置pane.setAutoScrolls(true)。当我将一些文本附加到窗格在末尾(最后一行)滚动的组件文本时,如何获得该结果?

I have JTextArea text and JScrollPane pane=new JScrollPane(text), I put pane.setAutoScrolls(true). How to get that when I append some text to my component text that pane scrolls at the end ( last line ) ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

丑疤怪 2024-11-12 13:31:27

遵循此线程的链接ScrollPane滚动到底部问题

follows link from this thread ScrollPane scroll to bottom problem

赏烟花じ飞满天 2024-11-12 13:31:27

关于插入符号如何移动的最佳(据我所知也是最新的)解释,作者:Rob Camick:

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

Best (and up-to-date, as far as I can tell) explanation of how caret is moved, by Rob Camick:

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

£烟消云散 2024-11-12 13:31:27

有没有可能,您不在 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");
        }
    }

}

Is it possible, that you are not on the EDT?
If the append does not happen on the EDT, the position of the JTextArea does not update.

Short, runnable example to show this behaviour:

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");
        }
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文