Re: [問題] how to update JProgressBar in a loop?

看板java作者時間19年前 (2006/11/28 08:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《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
文章代碼(AID): #15QuE300 (java)
文章代碼(AID): #15QuE300 (java)