Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于JTextArea刷新和JScrollPane自动向下滚动_Java_Swing - Fatal编程技术网

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

Java 关于JTextArea刷新和JScrollPane自动向下滚动,java,swing,Java,Swing,我正在尝试将信息记录到JTextArea,因为该过程是在后台进行的。当用户单击按钮时,我希望消息可以立即显示在JTextArea中,当JTextArea已满时,JScrollPane可以自动向下滚动 我在stackoverflow中尝试了很多方法 JTextArea可以立即刷新,但是JScrollPane仍然不能自动向下滚动 最后,我找到了一个方法,我将代码放在线程中,如下所示 public class MyRunnable implements Runnable { @Overrid

我正在尝试将信息记录到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放入线程时,为什么它可以向下滚动?

是滚动到
JTextArea
中特定点的一个示例。通常,当我想滚动到底部时,我只是将插入符号位置设置为字符串的长度,可能会稍微复杂一些,但会显示
setCaretPosition
的用法。如果这些都不起作用,那么您需要提供一个可运行的示例,说明您正在做的事情不起作用