送分!JTextField的显示刷新的问题
我写如下语句:
for (int i = 0 ; i<amount ; i++){
jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
}
显示的时候只显示最后的100%的一个界面
我想让这个JTextField随时刷新显示(或每加1%就刷新显示一次之类的也行),怎么办?
因为这个工作可能会处理很长时间。
问题点数:50、回复次数:13Top
1 楼Z_Beginner(探索中)回复于 2005-06-04 07:50:37 得分 5
通过线程控制。
public void run()
{
while(i<amount)
{
jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
try
{
Thread.sleep(35);
}
catch(InterruptedException e){}
i++;
}
}Top
2 楼mustdobetter(Java使一切皆有可能)回复于 2005-06-04 08:05:31 得分 1
路过Top
3 楼zhaoshuxian(aheadjava)回复于 2005-06-04 08:33:37 得分 1
不好意思.进来了.....Top
4 楼hzh_net(_风云_)回复于 2005-06-04 08:37:32 得分 2
通过线程控制。
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++;
}
}
-----
呵呵
^_^Top
5 楼nian86()回复于 2005-06-04 08:38:09 得分 1
二楼的狠!
我也想不出好办发Top
6 楼xinghe2004()回复于 2005-06-04 10:21:15 得分 1
学习!Top
7 楼believefym(feng)回复于 2005-06-04 11:02:23 得分 2
我认为,用不用线程要看楼主的目的
假如只是为了美化界面,可以考虑
假如涉及到性能问题,这个线程就没必要了,纯粹浪费时间Top
8 楼play100(坐天观井)回复于 2005-06-04 16:58:56 得分 3
for (int i = 0 ; i<amount ; i++){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jtf.setText(...);
}
});
}Top
9 楼cyicecream(为了升仙(星)到处UP)回复于 2005-06-04 21:00:26 得分 3
updateUI();Top
10 楼comcy(故乡的云)(▲▲▲▲▲▲▲▲▲▲▲▲▲)回复于 2005-06-04 21:09:54 得分 0
都不好使啊,大哥们!
这个类本身我没有定义成线程类,我该怎么做?
怎么定义成线程类?Top
11 楼comcy(故乡的云)(▲▲▲▲▲▲▲▲▲▲▲▲▲)回复于 2005-06-04 21:16:35 得分 0
上面的方法我都试过了
还是显示的时候只显示最后的100%的一个界面
各位大哥帮帮忙吧,急啊Top
12 楼comcy(故乡的云)(▲▲▲▲▲▲▲▲▲▲▲▲▲)回复于 2005-06-05 14:29:34 得分 0
upupupupupupupupTop
13 楼gtlang78()回复于 2005-06-05 17:12:21 得分 31
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();
}
}
Top




