Literatur

JProgressBar

Die Klasse JProgressBar dient dazu, einen Fortschrittsbalken zu schaffen. Ein solcher Balken ist Ihnen mit Sicherheit schon häufiger in vielen Anwendungen während eines länger andauernden Vorgangs (z.B. der berühmte Ladebalken) begegnet.

Neben dem parameterlosen Standardkonstruktor besitzt die Klasse JProgressBar vier weitere Konstruktoren, die wir in folgender Tabelle kurz näher erläutern wollen:

Konstruktor Kurzbeschreibung
JProgressBar (int orientation) Hier wird eine JProgressBar erzeugt, für die man über den Parameter orientation gleich die Ausrichtung setzt.  Für die vertikale bzw. horizontale Ausrichtung, besitzt die Klasse JProgressBar die vom Interface SwingConstants geerbten Konstanten VERTICAL und HORIZONTAL.
JProgressBar (int orientation,  int min, int max) Wie oben, nur dass zusätzlich zur Ausrichtung noch der minimale und maximale Wert als Parameter bei der Erstellung des JProgressBar-Objektes übergeben wird.
JProgressBar (BoundedRangeModel brm) Hier wird eine Referenz auf ein BoundedRangeModel-Objekt übergeben. Das BoundedRangeModel gibt die Rahmenbedingungen für den Wertebereich vor, so dass z.B. sichergestellt ist, dass der minimale Wert nicht größer sein kann als der maximale Wert. Um die Standardvorgaben zu ändern, kann auch eine eigene Modellklasse verwendet werden.
JProgressBar (int min, int max) Hier werden dem Konstruktor die min- und max-Werte übergeben.

Die Klasse JProgressBar besitzt neben den von JComponent geerbten Methoden auch eigene, von denen wir einige ausgewählte hier näher erläutern möchten:

Methode Kurzbeschreibung
void addChangeListener (ChangeListener l) Diese Methode fügt einen ChangeListener hinzu, der Veränderungen registriert, so dass entsprechend darauf reagiert werden kann.
ChangeListener[] getChangeListeners ()        Hier wird ein Array mit allen ChangeListenern zurückgegeben, welche der JProgressBar hinzugefügt wurden.
int getMaximum () Diese Methode liefert den maximalen Wert des Fortschrittsbalkens.
int getMinimum () Diese Methode liefert den minimalen Wert des Fortschrittsbalkens.
BoundedRangeModel getModel () Gibt das Datenmodell zurück, in dem die Grenzen für die Werte min, max und value abgesteckt sind.
int getOrientation () Hier wird die Ausrichtung des Fortschrittsbalkens zurückgegeben. Der Rückgabewert kann mit den Konstanten HORIZONTAL bzw. VERTICAL abgeglichen werden.
double getPercentComplete () Diese Methode liefert den prozentualen Wert des Fortschritts zurück (prozentualer Anteil des aktuellen Wertes vom Maximalwert).
String getString () Gibt den prozentualen Wert (von getPercentComplete) als String zurück (z.B. "35%"). Mit setString kann der Text geändert werden.
int getValue () Diese Methode liefert den aktuellen absoluten Wert der Fortschrittsleiste, also die Position, bis zu der der Ladebalken ausgefüllt ist.
boolean isBorderPainted () Gibt an, ob die JProgressBar einen Rahmen hat oder nicht.
boolean isIndeterminate () Hier wird true zurückgegeben, wenn der Fortschrittsbalken animiert werden soll, um anzuzeigen, dass ein Prozess unbekannter Länge noch andauert.
void removeChangeListener (ChangeListener l) Entfernt den angegebenen ChangeListener.
void setBorderPainted (boolean b) Hier wird festgelegt, ob die JProgressBar mit einem Rahmen versehen werden soll (true) oder nicht (false).
void setIndeterminate (boolean newValue) Wird true übergeben, so wird durch einen animierten Fortschrittsbalken, der ständig von links nach rechts wandert, angezeigt, dass der Prozess noch andauert.
void setMaximum (int max) Diese Methode setzt den maximalen Wert des Fortschrittsbalkens.
void setMinimum (int min) Diese Methode setzt den minimalen Wert des Fortschrittsbalkens.
void setModel (BoundedRangeModel newModel) Hier wird das Datenmodell für die JProgressBar gesetzt, das die Wertebereiche von min, max und value eingrenzt (so dass der min-Wert z.B. nicht größer sein kann als der max-Wert).
void setOrientation (int newOrientation) Mit dieser Methode kann man die Ausrichtung des Fortschrittsbalkens festlegen. Als Parameter werden die von SwingConstants geerbten Konstanten VERTICAL und HORIZONTAL verwendet.
void setString (String s) Hier kann man einen Text setzen, der innerhalb des Fortschrittbalkens angezeigt werden soll.
void setStringPainted (boolean b) Mit dieser Methode kann man festlegen, ob der gesetzte Text angezeigt werden soll (true) oder nicht (false).
void setValue (int v) Hier wird der der Wert des Fortschrittsbalkens gesetzt, bis zu dem die Leiste ausgefüllt sein soll.

Nachfolgend wollen wir an einem kleinen Beispiel einige der Methoden anwenden:

 
import javax.swing.*;
 
public class JProgressBarBeispiel {
	public static void main(String[] args) {
		JFrame meinJFrame = new JFrame();
		meinJFrame.setSize(300, 100);
		meinJFrame.setTitle("JProgressBar Beispiel");
		JPanel meinPanel = new JPanel();
 
		// JProgressBar-Objekt wird erzeugt
		JProgressBar meinLadebalken = new JProgressBar(0, 100);
 
		// Wert für den Ladebalken wird gesetzt
		meinLadebalken.setValue(0);
 
		// Der aktuelle Wert wird als 
		// Text in Prozent angezeigt
		meinLadebalken.setStringPainted(true);
 
		// JProgressBar wird Panel hinzugefügt
		meinPanel.add(meinLadebalken);
 
		meinJFrame.add(meinPanel);
		meinJFrame.setVisible(true);
 
		// Wert des Ladebalkens wird in der Schleife
		// bei jedem Durchgang um 1 erhöht bis der
		// maximale Wert erreicht ist
		for(int i=0; i<=meinLadebalken.getMaximum(); i++){
			meinLadebalken.setValue(i);
			try {
				// aktueller Thread pausiert  
				// für 50 Millisekunden
				Thread.sleep(50);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
 
		}
 
	}
}

Wir erstellen eine JProgressBar, indem wir den Konstruktor aufrufen, dem wir den minimalen und maximalen Wert als Parameter mitgeben. Da der Fortschrittsbalken in unserem Fall einen Ladebalken repräsentieren soll, wählen wir hier als Minimum 0 und als Maximum 100. Den Wert setzen wir zunächst auf 0. Damit der Prozent-Wert angezeigt wird, rufen wir setStringPainted(true) auf.

Damit die Ladeleiste sich sichtbar schrittweise füllt, erhöhen wir, nachdem der JFrame sichtbar gemacht wurde, in einer Schleife den Wert des Fortschrittsbalkens so lange um eins, bis der Maximalwert erreicht ist. Nach der Erhöhung pausieren wir  in jedem Durchgang den aktuellen Thread für 50 Millisekunden, da sonst der Balken direkt voll wäre und wir den Fortschritt nicht sehen würden. Threads werden wir in einem späteren Kapitel näher erläutern. In einer echten Anwendung würde man die Erhöhung abhängig vom realen Fortschritt des Ladevorgangs machen.

JProgressBar Beispiel