我正在尝试将信息记录到JTextArea,因为进程在后台发生。当用户单击按钮时,我希望消息可以立即显示在JTextArea中,当JTextArea已满时,JScrollPane可以自动向下滚动。
我在stackoverflow中尝试了很多方法。
JTextArea可以立即刷新。但是JScrollPane仍然无法自动向下滚动。
最后,我找到了一个方法。我将代码放在如下的线程中。
public class MyRunnable implements Runnable
{
@Override
public void run()
{
//code......
}
}
public class nodeListBtnListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
Runnable threadJob = new MyRunnable();
Thread myThread = new Thread(threadJob);
myThread.start();
}
}
......
text = new JTextArea(20,18);
//important
DefaultCaret caret = (DefaultCaret)text.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
......
JScrollPane可以自动向下滚动。
不需要这些代码。
text.setSelectionStart(text.getText().length());//not needed.
text.update(text.getGraphics());//not needed
text.setCaretPosition(text.getDocument().getLength());//not needed
我的问题是为什么当我把它放在线程中时,JScrollPane可以向下滚动?