Like it?
Personalizzare la JProgressBar in Java
Scritto da carloVentrella  in  Programmazione >>  Java  il 2012-06-25

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.

JProgressBar personalizzata

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


Tags:   JProgressBar   colore   sfondo   personalizzare   UIManager
Commenti(0)

    Non ci sono commenti.

Sono Carlo Ventrella, studente e appassionato di programmazione, particolarmente interessato allo sviluppo di applicazioni e script per il web. Linguaggi attualmente conosciuti: C,Java, Javascript, css, css3, php e html5.

Carlo Ventrella
Sito realizzato da Carlo Ventrella | Feb 2012

Feedback

La tua opinione è indispensabile per migliorare il sito!

Critica Consiglio


CAPTCHA Image

Collabora

Ciao! Come sicuramente avrai notato il sito è ancora 'spoglio' e lo si deve al fatto che è nato da poco e la manodopera diciamo che...scarseggia! Il sito al momeno è gestito da una sola persona ed è per questo motivo che nuovi collaboratori sarebbero ben accetti! La collaborazione parte dalla gestione di una o più categorie fino all'inserimento di un semplice articolo che secondo voi potrebbe suscitare particolare interesse. Se volete aiutarmi potete anche solo mandarmi un feedback nel quale mi dite cosa vi piace o cosa pensate che debba essere migliorato. Ve ne sarei molto grato!
Grazie.

Feedback

Cosa ne pensi di questo articolo?