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);
        }

    }

}

 

相关文章
|
数据安全/隐私保护 Python
一键导出全部邮件到本地,彻底解放双手
大家可能会遇到这样一种情况:有没有什么办法可以将邮箱里面的邮件全部下载到本地(包括**图文、压缩附件、文档附件**等)。比如HR、收集意见的工作人员甚至是一些负责收邮件的老师等人都会遇到这种情况。
2285 0
|
存储 Java 开发者
深入理解Jar文件:创建、使用和多版本控制
深入理解Jar文件:创建、使用和多版本控制
284 0
|
SQL 关系型数据库 MySQL
MySQL 事务详解
在数据库管理中,事务是一组SQL语句的执行单元,它们被视为一个整体。事务的主要目标是保持数据库的一致性和完整性,即要么所有SQL语句都成功执行,要么所有SQL语句都不执行。在MySQL中,事务起到了非常重要的作用,特别是在需要确保数据的完整性和一致性的应用程序中。 本文将详细介绍MySQL事务的概念、特性、隔离级别、事务的控制和示例代码等内容,以帮助您更好地理解和应用MySQL事务。
500 2
|
JSON Dubbo 测试技术
junit5单元测试自动生成最佳实践
在对比了几款插件后,最终选择了重新打造一套适合自己的插件。参看:【谈一谈单元测试】插件安装本地安装[文件: jcode5-1.0-SNAPSHOT.zip] 请在PC端预览或下载idea插件市场下载,搜索JCode5            插件使用插件有三个功能生成测试代码,也就是生成单元测试。生成json数据,通常用来生成测试数据,比如model。用来参数化测试。增加测试方法,随着业务开发,类可
2677 0
junit5单元测试自动生成最佳实践
|
存储 Python
Python Logging 限制文件大小
Python Logging 限制文件大小
202 3
|
SQL 存储 分布式计算
Hive TextFile数据错行问题解决方案
【8月更文挑战第16天】
242 0
|
SQL 数据库 UED
SQL查询功能的全面解析与实用技巧
SQL(Structured Query Language)作为数据库管理的核心语言,其查询功能是实现数据检索、分析和报告的关键
ESLint—— Failed to load config "standard" to extend from
ESLint—— Failed to load config "standard" to extend from
236 0
|
数据采集 机器学习/深度学习 算法
Python实现AdaBoost分类模型(AdaBoostClassifier算法)项目实战
Python实现AdaBoost分类模型(AdaBoostClassifier算法)项目实战
|
小程序 Java 关系型数据库
基于SpringBoot+Vue医疗管理系统设计和实现(源码+LW+调试文档+讲解等)
基于SpringBoot+Vue医疗管理系统设计和实现(源码+LW+调试文档+讲解等)