La JProgressBar è uno strumento molto utile in quanto ci permette di monitorare l'avanzamento del processo che "monitora". La classe JProgressBar non consente la personalizzazione dei colori quindi dovremo ricorrere all'UI Manager, la classe che gestisce il look&feel degli oggetti swing.
Vediamo come modificare alcune proprietà della JProgressBar:
UIManager.put("ProgressBar.background", Color.BLUE);UIManager.put("ProgressBar.foreground", Color.WHITE);UIManager.put("ProgressBar.selectionBackground",Color.GREEN);UIManager.put("ProgressBar.selectionForeground",Color.BLUE);
In questo modo è possibile modificare i colori, con un pò di fantasia possiamo realizzare una JProgressBar più originale: il codice seguente è quello utilizzato per ottenere la JProgressBar dell'immagine di sopra.
Ecco il codice:
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.*;
import javax.swing.plaf.basic.BasicProgressBarUI;
public class progressBar{
public progressBar(){
JFrame f = new JFrame("Progress Bar - demo");JPanelWithBackgr progress_background = new JPanelWithBackgr ("C:\progress_background.png");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));final JProgressBar jp = new JProgressBar();jp.setUI(new BasicProgressBarUI());jp.setBounds(11, 12 ,434, 25);jp.setMinimum(0);jp.setMaximum(100);jp.setStringPainted(true);jp.setBorder(null);progress_background.add(jp);f.add(progress_background);f.setResizable(false);f.pack();f.setVisible(true);Thread runner = new Thread() {int counter;
int minValue = 0;int maxValue = 100;public void run() {counter = minValue;while (counter <= maxValue) {Runnable runme = new Runnable() {public void run() {jp.setValue(counter);System.out.println(counter);}
};
SwingUtilities.invokeLater(runme);counter++;try {Thread.sleep(100);} catch (Exception ex) {}
}
}
};
runner.start();WindowListener wndCloser = new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}
};
f.addWindowListener(wndCloser);}
public static void main(String Args[]){
new progressBar();}
}
Con questo codice ho applicato uno sfondo (Applicare uno sfondo ad un JPanel - Java) realizzato in Photoshop che corrisponde alla "cornice" della barra e posto su questo la JProgressBar a cui ho assegnato, il colore grigio dell'immagine di sfondo in modo da farla sembrare parte integrante dello sfondo e un colore blu/azzurro come colore per l'avanzamento.
Download: Ketek - JprogressBar