簡體   English   中英

JProgressBar 立即移動而不是逐漸移動 (java)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM