[英]JProgressBar moves instantly and not gradually (java)
我想使用 Jbutton 使 ProgressBar 逐漸移動。 為此,我使用了一個 for 循環和 Thread.sleep 方法。 問題是按下按鈕后每秒移動一點點(進度條),程序一直等到循環完成,然后立即向上移動進度。 當我將循環置於按鈕偵聽器之外時,它會按我想要的方式工作,但我確實需要它在按下按鈕時工作。 這是代碼:
progressBar.setOrientation(SwingConstants.VERTICAL);
progressBar.setMinimum(0);
progressBar.setMaximum(100);
progressBar.setValue(50);
panel1.setLayout(null);
panel1.add(progressBar);
progressBar.setBounds(40,6,100,100);
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int counter = 5;
for (int i = 0; i < 5; i++) {
progressBar.setValue(progressBar.getValue() + counter);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
throw new RuntimeException(ex);
}
}
}
});
如果有人可以幫助我,我將不勝感激!
您的代碼在事件調度程序線程 (EDT) 上運行。 該線程負責處理事件,但也負責重新繪制。 因為它只是一個線程,所以重繪只會在您的方法結束后發生。
有一些方法可以解決這個問題。 在您的情況下, javax.swing.Timer
可能是最簡單的。 單擊按鈕不是在單一方法中運行循環,而是啟動一個每秒運行的計時器。 完成后,計時器可以自行取消。 一個稍微困難的替代方法是使用SwingWorker
。 您可以在doInBackGround
方法中publish
數據,並覆蓋process
以執行對進度條的更新。
更多信息請閱讀Swing 中的並發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.