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