问题: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. java IO流文件的读写具体实例

    IO流的分类:1.根据流的数据对象来分:高端流:所有的内存中的流都是高端流,比如:InputStreamReader  低端流:所有的外界设备中的流都是低端流,比如InputStream,Output ...

  2. onmouseover 执行 ToolTip 控件

    Tooltip控件是一个简单,但非常有用的控件.它能够为我们的软件提供非常漂亮的提示信息,提高软件的可用性,给用户比较好的体验.假设现在有两个按钮,一个用来预览吊线世系图,一个用来预览行转.为了保持按 ...

  3. 屏蔽DataGridView控件DataError 事件提示的异常信息

    DataGridView.DataError 事件简单介绍: 出现故障.则外部数据分析或验证操作引发异常,或者.当尝试提交数据写入数据源失败. 具体信息:參见MSDN this.dgvState.Da ...

  4. spring整合flex

    在常规的开发中只是用flex二不和后台交互是不可能的,为此flex也提供了和后台交互的2种解决方案一种是Data Services另一种是BlazeDs,本篇博客是用的是后一种,我的开发步骤如下: 1 ...

  5. Android error:No CPU/ABI system image available for this target

    原文:Android error:No CPU/ABI system image available for this target No CPU/ABI system image available ...

  6. 从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)

    原文:从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)  1.安装对应dll     Update-Package Xama ...

  7. MyBatis+Spring+Spring MVC整合开发

    MyBatis+Spring+Spring MVC整合开发课程观看地址:http://www.xuetuwuyou.com/course/65课程出自学途无忧网:http://www.xuetuwuy ...

  8. 工作经常使用的SQL整理,实战篇(三)

    原文:工作经常使用的SQL整理,实战篇(三) 工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实 ...

  9. 【Hibernate步步为营】--双向关联一对一映射具体解释(一)

    一对一的映射在对象模型中是常常见到的,为了将对象模型转换为关系模型就必须在映射文件里进行配置,上篇文章讨论了一对一映射的单向关联的情况,重点是<one-to-one>标签的使用,须要在映射 ...

  10. 完全合并C++面试题

    C++面试题 1.是不是父母写了virtual 功能,假设子类重写它的功能不virtual ,也使多态性? virtual修饰符隐形遗传. private 还集成.问权限而已 virtual可加可不加 ...