自动向下滚动JTextArea以显示添加的最后几行

时间:2013-05-18 05:51:46

标签: java swing user-interface scrollbar jtextarea

我编写了一个Java应用程序,每10秒钟从服务器接收一次信息。我想在表格上显示这些信息。

目前我正在使用JTextArea。但是,一旦填充了JTextArea,我就看不到添加到此JTextArea的新信息。我是否需要向JTextArea添加滚动条?或者是否有一个全新的GUI表单控件,建议显示每隔x秒添加一次的信息?

2 个答案:

答案 0 :(得分:10)

DefaultCaret尝试使自己可见,这可能导致在JScrollPane内滚动文本组件。可以通过DefaultCaret#setUpdatePolicy方法更改默认插入符号行为。

假设您的变量名称为textArea,您只需要修改插入符号的政策:

DefaultCaret caret = (DefaultCaret) textArea.getCaret(); // ←
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);       // ←
...
JScrollPane scrollPane = new JScrollPane();
scrollPane.setViewportView(textArea);

*谢谢,mKorbel

答案 1 :(得分:3)

  

我是否需要向JTextArea添加滚动条?

将文字区域添加到JScrollPane。有关详细信息,请参阅How to Use Scroll Panes。例子。

以下是一个例子:

Text Area - Scrollable

import java.awt.*;
import java.io.*;
import javax.swing.*;

class TextAreaScrolling {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                final JTextArea out = 
                        new JTextArea(5,10); // suggest columns & rows
                JScrollPane outScroll = new JScrollPane(out);

                File f = new File("TextAreaScrolling.java");
                try {
                    Reader reader = new FileReader(f);
                    out.read(reader, f);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                JOptionPane.showMessageDialog(null, outScroll);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}