JTextAreaDemo

简介: 问题:java swing 图形界面程序,拖了一个JTextArea出来,程序中有很多地方调用JTextArea中的append这个方法不断往文本域结尾处追加数据,但是程序每次运行,总是在程序运行完成时才将最终的结果一股脑的填在该文本域上,中间运行时根本不对文本域添加任何数据。

 

问题:java swing 图形界面程序,拖了一个JTextArea出来,程序中有很多地方调用JTextArea中的append这个方法不断往文本域结尾处追加数据,但是程序每次运行,总是在程序运行完成时才将最终的结果一股脑的填在该文本域上,中间运行时根本不对文本域添加任何数据。
解决方法:
JTextArea若只用append()函数会等到整个类方法运行完后才会将添加的内容统一添加到文本框中显示,之前只会暂存于缓存中,
所以及时添加并显示文本要有两步:
利用JTextArea从类 javax.swing.JComponent 继承来的方法paintImmediately来立即刷新JTextArea即可。

JTextArea textArea=new JTextArea();
textArea.append("进程2输出完毕!\n");//紧跟在此后面加上下面语句即可
textArea.paintImmediately(textArea.getBounds());

其中getBounds()方法是获得组件的边界,API中对getBounds方法是这样说的:
public Rectangle getBounds() 获得此对象的边界,用 Rectangle 对象的形式表示它。
这些边界了指定此对象的宽度、高度和相对其父对象的位置。

 

 

package swing.jtextarea;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.TimeUnit;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

/*2015-7-13*/
public class JTextareaDemo {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JTextAreaJFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
                frame.setLocationRelativeTo(null);
            }
        });

    }

}

class JTextAreaJFrame extends JFrame {
    private static final long serialVersionUID = -1886518634127203315L;

    private static final int DEFAULT_WIDTH = 400;
    private static final int DEFAULT_HEIGHT = 200;

    private JTextArea textarea;

    public JTextAreaJFrame() {
        setTitle(getClass().getSimpleName());
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        textarea = new JTextArea();
        textarea.setLineWrap(true);
        textarea.setWrapStyleWord(true);

        add(new JScrollPane(textarea), BorderLayout.CENTER);
        JButton btn = new JButton("Print");
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    appendData();
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
            }
        });

        JPanel southPanel = new JPanel();
        southPanel.add(btn);
        add(southPanel, BorderLayout.SOUTH);
    }

    private void appendData() throws InterruptedException {
        for (int i = 0; i < 10; i++) {
            textarea.append(i + ":append!\n");
//            int length = textarea.getText().length();
//            textarea.setCaretPosition(length);
            textarea.paintImmediately(textarea.getBounds());

            TimeUnit.SECONDS.sleep(1);
        }

    }

}

 

相关文章
|
XML 缓存 前端开发
Thymeleaf一篇就够了
Thymeleaf是Springboot官方支持的模板引擎,有着动静分离等独有特点,通过本文简单学习下吧!
50478 21
Thymeleaf一篇就够了
|
5月前
|
SQL 关系型数据库 Go
Golang ORM框架介绍及比较
Golang ORM框架介绍及比较
|
5月前
|
SQL 关系型数据库 Go
Golang微服框架Kratos与它的小伙伴系列 - ORM框架 - GORM
[GORM](https://gorm.io/index.html) 是基于Go语言实现的ORM库,它是Golang目前比较热门的数据库ORM操作库,对开发者也比较友好,使用非常方便简单。
50 0
|
11月前
|
存储 SQL 数据管理
【数据库原理 • 四】数据库设计和规范化理论
数据库技术是计算机科学技术中发展最快,应用最广的技术之一,它是专门研究如何科学的组织和存储数据,如何高效地获取和处理数据的技术。它已成为各行各业存储数据、管理信息、共享资源和决策支持的最先进,最常用的技术。 当前互联网+与大数据,一切都建立在数据库之上,以数据说话,首先需要聚集数据、分析数据和管理数据,数据库技术已成为各种计算机系统的核心技术。数据库相关知识也已成为每个人必须掌握的知识。
336 0
|
11月前
uni.showToast和uni.navigateTo不能同时执⾏,怎么解决
uni.showToast和uni.navigateTo不能同时执⾏,怎么解决
|
9月前
|
存储 数据采集 自然语言处理
基于大模型构建本地知识库
基于大模型构建本地知识库
3116 1
|
机器学习/深度学习 数据采集 自然语言处理
数据挖掘:比赛的流程干货分享
数据挖掘:比赛的流程干货分享
136 0
数据挖掘:比赛的流程干货分享
|
SQL 前端开发 Java
Java/JavaWeb 连接数据库完成增删改查
Java/JavaWeb 连接数据库完成增删改查
376 0
Java/JavaWeb 连接数据库完成增删改查
|
Java 程序员 API
IDEA插件开发(一)
IDEA插件开发
2080 0
|
存储 Java Maven
spring boot修改代码后无需重启设置,在开发时实现热部署
Spring Boot在开发时实现热部署(开发时修改文件保存后自动重启应用)(spring-boot-devtools) 热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应的各种信息,然后Class文件将被虚拟机的ClassLoader加载。
2217 0