5

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

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

4

2 回答 2

10

DefaultCaret试图使自己可见,这可能会导致JScrollPane. 该方法可以更改默认插入符号行为DefaultCaret#setUpdatePolicy

假设你的变量名是textArea,你只需要修改 caret 的策略:

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

* 谢谢,mKorbel

于 2013-05-18T06:16:42.333 回答
3

我需要向 JTextArea 添加滚动条吗?

将文本区域添加到JScrollPane. 有关更多信息和示例,请参阅如何使用滚动窗格

这是一个例子:

文本区域 - 可滚动

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);
    }
}
于 2013-05-18T05:56:53.647 回答