簡體   English   中英

如何在java中刷新進度條?

[英]How to refresh a progress bar in java?

我試圖創建這個進度條:

public class ProgressBar extends JFrame{

private JButton fine = new JButton("Chiudi");
final JProgressBar jp;
JPanel body;
JLabel banner1;
JLabel banner2;
JPanel testo;
JTextArea areatesto;
JPanel provapannello;
JTextArea provatesto;
JPanel pannellofine;

public ProgressBar() {
     super("loading");

    setSize(440, 400);
    setResizable(true);
    Container content = getContentPane();
    content.setBackground(Color.YELLOW);
    body = new JPanel();
    body.setLayout(new FlowLayout());
    ImageIcon image1 = new ImageIcon("prova1.png");
    banner1 = new JLabel();
    banner2 = new JLabel();
    banner1.setIcon(image1);
    JTextArea prova = new JTextArea("bar", 2, 40);
    prova.setBackground(Color.LIGHT_GRAY);
    prova.setLineWrap(true);
    body.add(banner1);
    body.add(prova);
    body.add(banner2);
    banner.setBounds(30, 80, 120, 120);
    testo = new JPanel();
    areatesto = new JTextArea("Attendi Per Favore, Sto Preparando Il Tuo PDF", 2, 33);
    areatesto.setLineWrap(true);
    testo.add(areatesto);
   ImagePanel progress_background = new ImagePanel("p.jpg"); 

    UIManager.put("ProgressBar.background", new Color(29, 29, 29));
    UIManager.put("ProgressBar.foreground", new Color(16, 95, 173));
    UIManager.put("ProgressBar.selectionBackground", new Color(214, 214, 214));
    UIManager.put("ProgressBar.selectionForeground", new Color(29, 29, 29));

    jp = new JProgressBar();
    jp.setUI(new BasicProgressBarUI());

    jp.setBounds(0, 205, 434, 25);
    jp.setMinimum(0);
    jp.setMaximum(100);
    jp.setStringPainted(true);
    jp.setBorder(null);
    progress_background.add(jp);
    provapannello = new JPanel();
    provatesto = new JTextArea("prova", 2, 70);


    provatesto.setBackground(Color.LIGHT_GRAY);
    provapannello.setBounds(0, 226, 500, 100);
    provapannello.add(provatesto);

    content.add(provapannello);
    content.add(progress_background);

    pannellofine = new JPanel();

    pannellofine.add(fine);
    pannellofine.setBounds(340, 330, 100, 100);
    pannellofine.setVisible(false);

    content.add(pannellofine);
    content.add(testo);

    content.add(body);
    Thread runner;
    jp.setValue(0);
    setVisible(true);
    public void setValue(final int j) {

    Runnable target = new Runnable() {
        @Override
        public void run() {
            jp.setValue(j);
        }
    };

    SwingUtilities.invokeLater(target);

}
    public static void main(String Args[]) {
    ProgressBar p = new ProgressBar();


    int i = 0;
    while(true){
        System.out.println("work");
        try {
            Thread.sleep(500);
        } catch (InterruptedException ex) { }

        p.setValue(i++);
    }
}

我試圖用方法“setValue”改變ProgressBar的值,但是條形不會增加,“while”循環到無窮大,但我看不到任何變化。 怎么了?

我已經刪除了大部分不必要的代碼(並修復了你的編譯錯誤),並且你的例子有效(我已經改變了延遲和增量,因為再次出於再現目的,你不應該浪費人們的時間)

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;

public class ProgressBar extends JFrame {

    private JProgressBar progressBar;

    public ProgressBar() {
        super("loading");
        setSize(200, 100);
        Container content = getContentPane();
        content.setLayout(new BorderLayout());
        progressBar = new JProgressBar();
        progressBar.setMinimum(0);
        progressBar.setMaximum(100);
        progressBar.setStringPainted(true);
        progressBar.setBorder(null);
        content.add(progressBar, BorderLayout.SOUTH);
        setVisible(true);
    }

    void updateProgress(final int newValue) {
        progressBar.setValue(newValue);
    }

    public void setValue(final int j) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                updateProgress(j);
            }
        });
    }

    public static void main(final String Args[]) {
        ProgressBar myProgressBar = new ProgressBar();
        int i = 0;
        while (i <= 100) {
            System.out.println("" + i + "%");
            myProgressBar.setValue(i);
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                break;
            }
            i = i + 5;
        }
    }
}

你真的應該投入時間來創建一個SSCCE

另外,在處理InterruptedExcetion時,您應該遵循此建議

暫無
暫無

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

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