我一直在試圖瞭解如何添加一個進度條,我可以在GUI中創建一個我正在實現並使其顯示,但即使通過http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html檢查後,我仍然沒有更清楚如何將方法設置爲任務,以便我可以創建運行方法的進度條。請有人可以嘗試向我解釋這一點,或者發佈GUI中使用的進度條示例,並將任務設置爲方法。謝謝。如何添加進度欄?
Q
如何添加進度欄?
3
A
回答
11
也許我可以幫你一些示例代碼,一個類似的例子:
public class SwingProgressBarExample extends JPanel {
JProgressBar pbar;
static final int MY_MINIMUM = 0;
static final int MY_MAXIMUM = 100;
public SwingProgressBarExample() {
// initialize Progress Bar
pbar = new JProgressBar();
pbar.setMinimum(MY_MINIMUM);
pbar.setMaximum(MY_MAXIMUM);
// add to JPanel
add(pbar);
}
public void updateBar(int newValue) {
pbar.setValue(newValue);
}
public static void main(String args[]) {
final SwingProgressBarExample it = new SwingProgressBarExample();
JFrame frame = new JFrame("Progress Bar Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(it);
frame.pack();
frame.setVisible(true);
// run a loop to demonstrate raising
for (int i = MY_MINIMUM; i <= MY_MAXIMUM; i++) {
final int percent = i;
try {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
it.updateBar(percent);
}
});
java.lang.Thread.sleep(100);
} catch (InterruptedException e) {
;
}
}
}
}
4
你的問題有點含糊,但在我看來,你想讓進度條顯示特定運行方法的進度,我將其稱爲「work()」方法。不幸的是,沒有辦法只將方法的引用傳遞給進度條 - 你的方法需要明確地告訴進度條顯示什麼。這是我會做:
製作進度條的參考提供給工作() - 無論是把它作爲一個參數對(),或提供一個訪問方法,你在工作代碼()可以調用獲得對進度條的參考。在你獲得對進度條(我將稱之爲「pb」)的引用後,調用pb.setMinimum(0)和pb.setMaximum(n),其中n是數字。的步驟你的方法具有打通
作爲你的方法完成的每個步驟,呼叫pb.setValue(pb.getValue()+ 1);
在你的方法結束時,呼叫PB。 setValue(0);在返回之前重置進度條
此外,如果你想讓你的進度條顯示一條String消息,你首先必須調用pb.setStringPainted(true),隨後調用pb.setString(string)將顯示在進度條上。
2
請參閱my answer on another SO question其中包括JProgressBar
的示例,該示例通過使用SwingWorker
進行更新。 SwingWorker
用於在後臺執行長時間運行的任務(例如,它只是一個常規的Thread.sleep
),並以特定的時間間隔報告進度。
我也強烈建議看看Swing concurrency tutorial以獲得更多背景信息,說明爲什麼在執行干擾UI的長時間運行任務時應該使用SwingWorker
。
因爲我張貼的一個可用的Swing tutorial about JProgressBar
s,它也值得一
相關問題
- 1. 如何在asp.net gridview中添加進度條欄
- 2. 如何更新進度欄?
- 3. 如何使用進度欄?
- 4. 如何更新進度欄?
- 5. 如何關閉進度欄?
- 6. 如何在plupload中添加進度條?
- 7. 如何將%rate添加到進度條?
- 8. 添加進度條
- 9. 添加進度條
- 10. 添加進度進行BZip2CompressorInputStream
- 11. 如何在加載時加載自定義進度欄
- 12. 如何添加工具欄
- 13. 如何添加標籤欄?
- 14. 如何添加側邊欄?
- 15. 如何添加搜索欄?
- 16. 如何進度欄添加到一個HTML文件上傳表單
- 17. 如何向自定義組件中的圖像添加進度欄?
- 18. 我可以將消息添加到tqdm進度欄嗎?
- 19. 添加進度欄複製功能中的R
- 20. 更新在運行時添加的JQuery進度欄
- 21. Devexpress如何更改進度欄顏色
- 22. 如何設計自定義進度欄?
- 23. 如何設置進度欄顏色?
- 24. Excel/VBA /添加進度條
- 25. Android:添加進度條?
- 26. 向webview添加進度條
- 27. 時尚的Javascript進度(加載)欄...?
- 28. 如何使自動加載進度欄重定向?
- 29. 如何顯示進度欄,直到整個aspx頁面加載?
- 30. 如何通過XAML動畫增加進度欄?
一個答案在這[可以在主類之外的類中使用進度條嗎?](http://stackoverflow.com/questions/4637215/can-a-progress-bar-be-used-in-a-class-outside-主)可能有所幫助。 – trashgod 2012-01-18 19:44:38
我不明白。爲什麼你想創建一個運行方法的進度條**(如你所說)?進度條的目標是向用戶提供有關正在運行的任務的信息。所以在oracle doc中告訴的任務指的是將管理進度條的線程。因此,使用揮杆工具創建進度條(如鏈接所示),然後在(長?)任務中更新該進度條。 SwingWorker的'doInBackground()'方法用於管理進度條。我建議你再看一下你的oracle tuto,解釋很清楚,例子可重用。祝你好運! – 2012-01-18 19:56:25