我编写了一个Java应用程序,每10秒钟从服务器接收一次信息。我想在表格上显示这些信息。
目前我正在使用JTextArea。但是,一旦填充了JTextArea,我就看不到添加到此JTextArea的新信息。我是否需要向JTextArea添加滚动条?或者是否有一个全新的GUI表单控件,建议显示每隔x秒添加一次的信息?
答案 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。例子。
以下是一个例子:
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);
}
}