送分!JTextField的显示刷新的问题

comcy 2005-06-04 04:41:03
我写如下语句:
for (int i = 0 ; i<amount ; i++){
jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
}

显示的时候只显示最后的100%的一个界面
我想让这个JTextField随时刷新显示(或每加1%就刷新显示一次之类的也行),怎么办?
因为这个工作可能会处理很长时间。
...全文
445 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gtlang78 2005-06-05
  • 打赏
  • 举报
回复
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class RefreshTest {
public static void main(String[] args) {
final JTextField tf = new JTextField(40);
JButton btn = new JButton("Start");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new Thread() {
public void run() {
final int amount = 100;
for (int i = 0; i < amount; i++) {
final int t = i;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
tf.setText("共有" + amount + "户,目前处理第" + (t + 1)
+ "户,已完成" + ((t + 1) * 100 / amount) + "%");
}
});
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
}
};
}.start();
}
});

JFrame f = new JFrame();
f.getContentPane().add(tf, BorderLayout.CENTER);
f.getContentPane().add(btn, BorderLayout.SOUTH);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setLocationRelativeTo(null);
f.show();
}
}
comcy 2005-06-05
  • 打赏
  • 举报
回复
upupupupupupupup
believefym 2005-06-04
  • 打赏
  • 举报
回复
我认为,用不用线程要看楼主的目的
假如只是为了美化界面,可以考虑
假如涉及到性能问题,这个线程就没必要了,纯粹浪费时间
xinghe2004 2005-06-04
  • 打赏
  • 举报
回复
学习!
comcy 2005-06-04
  • 打赏
  • 举报
回复
上面的方法我都试过了
还是显示的时候只显示最后的100%的一个界面
各位大哥帮帮忙吧,急啊
comcy 2005-06-04
  • 打赏
  • 举报
回复
都不好使啊,大哥们!
这个类本身我没有定义成线程类,我该怎么做?
怎么定义成线程类?
cyicecream 2005-06-04
  • 打赏
  • 举报
回复
updateUI();
nian86 2005-06-04
  • 打赏
  • 举报
回复
二楼的狠!
我也想不出好办发
hzh_net 2005-06-04
  • 打赏
  • 举报
回复
通过线程控制。

public void run()
{
while(i<amount)
{
jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
try
{
Thread.sleep(30);//30--the length of time to sleep in milliseconds.

}
catch(InterruptedException e){}
i++;
}
}


-----
呵呵

^_^
aheadjava 2005-06-04
  • 打赏
  • 举报
回复
不好意思.进来了.....
mustdobetter 2005-06-04
  • 打赏
  • 举报
回复
路过
Z_Beginner 2005-06-04
  • 打赏
  • 举报
回复
通过线程控制。

public void run()
{
while(i<amount)
{
jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
try
{
Thread.sleep(35);
}
catch(InterruptedException e){}
i++;
}
}
play100 2005-06-04
  • 打赏
  • 举报
回复
for (int i = 0 ; i<amount ; i++){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jtf.setText(...);
}
});
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧