简体   繁体   English

如何在java中刷新进度条?

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

I have tried to create this progress bar: 我试图创建这个进度条:

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++);
    }
}

I have tried to change the value of the ProgressBar with the method "setValue" but the bar does not increase, "while" cycles to infinity, but I see no change. 我试图用方法“setValue”改变ProgressBar的值,但是条形不会增加,“while”循环到无穷大,但我看不到任何变化。 what's wrong? 怎么了?

I've stripped out most of the unnecessary code (and fixed your compilation errors), and your example works (I've changed the delay and increment, because again, for reproduction purposes you shouldn't waste people's time) 我已经删除了大部分不必要的代码(并修复了你的编译错误),并且你的例子有效(我已经改变了延迟和增量,因为再次出于再现目的,你不应该浪费人们的时间)

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;
        }
    }
}

You should really have invested the time in creating an SSCCE 你真的应该投入时间来创建一个SSCCE

Also on a side note, you should follow this advice when handling InterruptedExcetion s 另外,在处理InterruptedExcetion时,您应该遵循此建议

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM