我写如下语句:
for (int i = 0 ; i<amount ; i++){
jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
}显示的时候只显示最后的100%的一个界面
我想让这个JTextField随时刷新显示(或每加1%就刷新显示一次之类的也行),怎么办?
因为这个工作可能会处理很长时间。
for (int i = 0 ; i<amount ; i++){
jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
}显示的时候只显示最后的100%的一个界面
我想让这个JTextField随时刷新显示(或每加1%就刷新显示一次之类的也行),怎么办?
因为这个工作可能会处理很长时间。
{
while(i<amount)
{
jtf.setText("共有"+amount+"户,目前处理第"(i+1)+"户,已完成"+((i+1)*100/amount)+"%");
try
{
Thread.sleep(35);
}
catch(InterruptedException e){}
i++;
}
}
{
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++;
}
}
-----
呵呵^_^
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jtf.setText(...);
}
});
}
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();
}
}