簡體   English   中英

如何在需要時更新ProgressBar並停止它?

[英]How to update a ProgressBar and stop It when I want?

首先,我使用Eclipse IDE 所以我的問題是:我創建了一個進度條,但是我想根據程序所在的位置加載它。 我有一個刷新按鈕,當我單擊它時,我的整個程序都會更新。 我想要的是一個進度條,它伴隨着更新過程,並在結束時結束。

抱歉,如果我的英語水平不是最好,但是我是一位年輕的葡萄牙開發人員。

我的btn碼

JButton btnActualizar = new JButton("\u21BB");
    btnActualizar.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {


            TxtIpExternoLoja.setText(" ");
            TxtSSIDLoja.setText(" ");
            TxtFirewallLoja.setText(" ");

            TxtIpLojaEtho.setText(" ");
            TxtMaskLojaEtho.setText(" ");
            TxtGWLojaEtho.setText(" ");
            TxtDns1LojaEtho.setText(" ");
            TxtDns2LojaEtho.setText(" ");

            TxtIpLojaWlan.setText(" ");
            TxtMaskLojaWlan.setText(" ");
            TxtGwLojaWlan.setText(" ");
            TxtDns1LojaWlan.setText(" ");
            TxtDns2LojaWlan.setText(" ");

            TxtIpLojaVpn.setText(" ");
            TxtMaskLojaVpn.setText(" ");
            TxtGwLojaVpn.setText(" ");
            TxtDns1LojaVpn.setText(" ");
            TxtDns2LojaVpn.setText(" ");

            // DefaultTableModel model = (DefaultTableModel)
            // tablePing.getModel();
            // model.setRowCount(0);
            TxtTime.setText(" ");

            i = 0;
            t.start();
            btnActualizar.setEnabled(false);
            update();

        }
    });

我的進度條代碼:

JProgressBar progressBar = new JProgressBar(0, 15);
    GridBagConstraints gbc_progressBar = new GridBagConstraints();
    gbc_progressBar.insets = new Insets(0, 0, 0, 5);
    gbc_progressBar.gridx = 3;
    gbc_progressBar.gridy = 0;
    PanelBotoes.add(progressBar, gbc_progressBar);
    GridBagConstraints gbc_btnImprimir = new GridBagConstraints();
    gbc_btnImprimir.insets = new Insets(0, 0, 0, 5);
    gbc_btnImprimir.gridx = 5;
    gbc_btnImprimir.gridy = 0;
    PanelBotoes.add(btnImprimir, gbc_btnImprimir);
    progressBar.setStringPainted(true);
    progressBar.setValue(0);

    t = new Timer(interval, new ActionListener() {
        public void actionPerformed(ActionEvent ae) {
            if (i == 15) {
                t.stop();
                btnActualizar.setEnabled(true);
            } else {
                i++;
                progressBar.setValue(i);
            }
        }
    });

看一下此頁面: https : //docs.oracle.com/javase/tutorial/uiswing/components/progress.html

具體來說,“ 使用確定的進度條 ”一節應該是您所要的。 示例代碼有點復雜,但可能與使用這些東西所獲得的一樣簡單。

請注意:該示例使用SwingWorker有關此處的更多信息 )來更新進度值。 這是因為進度條是在Swing線程中繪制的,如果進程也在該線程上運行,則不會更新。 您將需要在不是Swing線程的線程上更新程序。


編輯1-使用代碼更新您的問題

這樣看來您已經知道進度條碼了。 我沒有運行它,但是您所擁有的看起來應該可以運行。 下一步是用update()方法流程替換計時器。 為此,您需要執行以下操作:

  1. 確保您的update()方法在與swing線程不同的線程中運行(此處可以使用SwingWorker類的東西)。
  2. 要更新條,需要在更新線程內調用progressBar.setValue(x) ,其中x = how far your process has got
  3. 在更新線程中,再添加一些對progressBar.setValue(x)調用。 您可以將它們放置在任意位置,但是最好將它們放置在長時間的處理之前和之后。

注意:必須將線程用於進度條。 這意味着您可能會遇到僵局競爭狀況 小心!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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