关于JTextArea刷新和JScrollPane自动向下滚动

时间:2017-01-14 08:30:21

标签: java swing

我正在尝试将信息记录到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可以向下滚动?

0 个答案:

没有答案