Re: [問題] how to update JProgressBar in a loop?
※ 引述《GrayAngel.bbs@ptt.cc (灰天使)》之銘言:
> 假設我按了一個button會開始跑一個for loop
> 然後我想要同時顯示loop的進度..
> 大概像下面這樣子... 可是ProgressBar只會在loop跑完的時候才會update
> 也就是一次從0% 跳到 100%
> 請問有什麼辦法可以解決嗎?
> button.addActionListener(new ActionListener(){
> public void actionPerformed(ActionEvent e){
> JProgressBar pro = new JProgressBar(0, 100000);
> JFrame frame = new JFrame();
> frame.add(pro);
> frame.setSize(50,50);
> frame.setVisible(true);
> pro.setStringPainted(true);
> Runnable runner = new Runnable(){
> public void run(){
> int val = pro.getValue();
> pro.setValue(val+1);
> }
> };
> for(int i=0;i<100000;i++){
> //operations..
> SwingUtilities.invokeLater(runner);
> }
> }
> });
一個亂亂的例子XD
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Test {
public static void main(String[] args) {
final JFrame f = new JFrame("test");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
final JProgressBar b = new JProgressBar(0, 1000);
b.setStringPainted(true);
b.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
final JProgressBar jb = (JProgressBar) e.getSource();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
SwingUtilities.updateComponentTreeUI(jb);
}
});
}
});
b.setVisible(true);
b.setValue(0);
f.getContentPane().setLayout(new FlowLayout());
f.getContentPane().add(b);
JButton go = new JButton("go");
final int limit = 1000;
final Thread later = new Thread(){
public void run() {
for(int i=0;i<limit;i+=2){
b.setValue(i);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
};
go.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
later.start();
}
});
f.getContentPane().add(go);
f.pack();
f.setVisible(true);
}
}
--
※ Origin: SayYA 資訊站 <bbs.sayya.org>
◆ From: 163.26.34.20
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):