JTextArea添加到JScrollPane无法显示滚动条
哈得撸泽 2020-08-21 11:02:51 各位大佬,小弟遇到一个问题,好几天解决不掉,特来寻找大佬的帮助。
实现需求:只要产生新的String就到实时打印到JTextArea(JTextArea添加到JScrollPane),并且需要实时显示滚动条。
我的实现:,每次产生新的String就要启动一个新的线程(Thread_update)进行打印,部分代码如下。
问题:JScrollPane的滚动条只有在结束完成才会一次显示,中间String都超过JScrollPane的可视域了但是进度条都没有显示。
求大佬们帮助。
//初始化JTextArea()和JScrollPane()
return_text = new JTextArea();
//return全局输出编辑框不可编辑
return_text.setEditable(false);
//设置自动换行
return_text.setLineWrap(true);
// 设置断行不断字
return_text.setWrapStyleWord(true);
//return输出界面(带进度条)初始化
return_scrollpane = new JScrollPane();
return_scrollpane.setViewportView(return_text);
return_scrollpane.setAutoscrolls(true);
return_scrollpane.setBounds(10, 40, 570, 408);
container.add(return_scrollpane);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//每次产生新的sth就要启动一个线程进行打印
updateThread(sth);
//启动打印线程
private void updateThread(String sth) {
Thread_update thread_update = new Thread_update(sth);
thread_update.start();
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
//子线程的实现
private class Thread_update extends Thread {
private String sth;
public Thread_update(String sth) {
this.sth = sth;
}
@Override
public void run() {
return_text.setText(return_text.getText() + sth);
return_text.paintImmediately(return_text.getBounds());
return_text.setCaretPosition(return_text.getDocument().getLength());
return_scrollpane.revalidate();
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
}
}