Wie kann man eine kontinuierlich laufende Aktivitätsanzeige erzeugen, die in einem eigenen Fenster erscheint?
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.