问题: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);
} } }

JTextAreaDemo的更多相关文章

  1. Java-GUI基础(三)java.swing

    1. 简介 swing与awt:可以认为awt是swing的前身,awt即Abstrace Window Toolkit抽象窗口工具包,swing是为了解决awt在开发中的问题而开发的,是awt的改良 ...

随机推荐

  1. 关于split与StringTokenizer的理解

    关于split与StringTokenizer的理解 一.split    依据匹配给定的正則表達式来拆分此字符串.此方法返回的数组包括此字符串的子字符串,每一个子字符串都由还有一个匹配给定表达式的子 ...

  2. Android 一些错误

    android fragment里面放viewpager 嵌套fragment 报错: 解决:在adapter的构造方法里加上 super(fragment.getChildFragmentManag ...

  3. mybatis配置文件xxxx.xml中缺失返回类型的后果A query was run and no Result Maps were found

    使用mybatis时出现异常问题: 有如下的错误 Error querying database.  Cause: org.apache.ibatis.executor.ExecutorExcepti ...

  4. EF 批量 循环删除

    var list = db.T_xAppRecord.Where(u => u.Id == 1).ToList(); //2.0 遍历集合,将 要删除的 对象 的代理对象的State 设置为 D ...

  5. python : 批量下载R语言库包

    soupR.py 代码例如以下 # -*- coding: cp936 -*- import urllib import urllib2 import os, re from BeautifulSou ...

  6. HDU 4126 Genghis Khan the Conqueror MST+树形dp

    题意: 给定n个点m条边的无向图. 以下m行给出边和边权 以下Q个询问. Q行每行给出一条边(一定是m条边中的一条) 表示改动边权. (数据保证改动后的边权比原先的边权大) 问:改动后的最小生成树的权 ...

  7. C++转让Lua

    转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/39756423 我使用的cocos2d-x版本号是2.3.3.先在一个C++projec ...

  8. 判断DAG图

    拓扑排序O(E), bellman O(VE)   , 使用邻接表的dfs O(V+E) ,floyd O(N*N*N) bellman算法只能判断是否存在负环. 所以可以先把权值全部设为-1 #in ...

  9. MyEclipse建立JVM内存大小

    1.你为什么要设置JVM它的内存大小? 因为假定程序执行过JVM默认的内存大小.他们不会报告传说中的内存溢出异常. Exception in thread "main" java. ...

  10. ant利用先进,ant订单具体解释,ant包,ant包装删除编译jar文件

    在日常的项目开发,经常需要我们可以打包测试.特别是,开发环境是windows.实际情况是linux. 这样的话.一个非常大的程序猿将包,其中将包,这些软件包可能非常大,这里是真正的代码会改变的一部分, ...