In der Beispielklasse wird im Konstruktor die selbst definierte Methode createProgressBarWindow() aufgerufen. In ihr
werden zunächst je ein Objekt eines JWindow und einer JProgressBar
erzeugt. Nach der Dimensionierung der JProgressBar wird deren
Status durch die Methode setIndeterminate(true) auf unbestimmt (indeterminate)
gesetzt. Dies bedeutet, das diese Anzeige prinzipiell bis in alle Ewigkeit
laufen kann und keinen wirklichen Fortschritt anzeigt.
Die Progressbar
wird dem Fenster hinzugefügt, die Größe des Fensters gesetzt
und schließlich, bevor es sichtbar gemacht wird, zentriert und auf
eine hohe Z-Ebene gesetzt, damit es immer als oberstes Fenster erscheint.
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.JWindow;
public class InditerminateProgressBar extends JFrame {
public InditerminateProgressBar() {
createProgressBarWindow();
}
private void createProgressBarWindow() {
JWindow win = new JWindow();
JProgressBar pb = new JProgressBar();
pb.setPreferredSize(new Dimension(200, pb.getPreferredSize().height - 4));
pb.setIndeterminate(true);
win.add(pb, BorderLayout.CENTER);
win.setSize(pb.getPreferredSize());
win.setAlwaysOnTop(true);
win.setLocationRelativeTo(this);
win.setVisible(true);
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setTitle("Progress Bar");
frame.setVisible(true);
new InditerminateProgressBar();
}
}
In der main()-Methode wird vor der Instanzierung der
Progressbar-Klasse ein leerer JFrame erzeugt. Er ist hier
prinzipiell überflüssig und dient nur dazu, das Programm über
den fenstereigenen Schließen-Button bequem zu beenden. Allerdings...
die
Beispielklasse ist ja von JFrame abgeleitet, wozu dann hier nochmals einer?
Die Lösung liegt darin, dass auf diese Weise die Progressbar individueller
dimensioniert werden kann. Kommentiert man in main() die Erzeugung und
Methodenaufrufe des JFrame aus, so wird ein eine blanke Progressbar erzeugt,
die keine fenstereigenen Möglichkeiten zum Schließen besitzt.
Startet man
das Programm aus einer Konsole heraus, lässt es sich in diesem Falle mit Ctrl
+ C beenden.