Java Reference
In-Depth Information
In der Endlosschleife wird geprüft, ob der rechte oder linke Rand des Panels erreicht
wurde. Je nachdem wird dann die Bewegungsrichtung umgestellt. Je nach Bewegungs-
richtung wird dann die x-Koordinate um 2 Pixel erhöht oder verringert. Zur Steuerung
der Geschwindigkeit wird der Thread dann für 20 Millisekunden angehalten. Nicht bei
allen Werten ergeben sich flüssige Bewegungsabläufe. Sie sollten mit diesen Werten
durchaus etwas experimentieren und sich die Auswirkungen ansehen.
Das
JBallPanel
können Sie jetzt in einem Programm-Frame einsetzen. Erstellen Sie
einen Frame
Ballanimation
, und fügen Sie ein Panel (
jPanel1
) und die beiden Buttons
(
jBtnStart
und
jBtnStop
) in den Frame ein. Im Quellcode ersetzen Sie dann überall den
Bezeichner JPanel durch
JBallPanel
. Sie ergänzen noch die beiden
ActionListener
für
die Buttons und ergänzen dort den Quellcode zum Starten und Anhalten des Threads:
private void jBtnStartActionPerformed(ActionEvent evt) {
t=new Thread(jPanel1);
t.start();
}
14
private void jBtnStopActionPerformed(ActionEvent evt) {
t.interrupt();
}
Listing 14.14
Starten und Anhalten des Animationsthreads
Sie können nun die Animation starten und anhalten und ausgiebig testen. Sie sollten
den Programm-Frame auch einmal schließen, während die Animation läuft. Achten Sie
dabei auf die Ansicht Console. Normalerweise erscheint dort der Hinweis termina-
ted, und die Schaltfläche Stop geht von rot in den gegrauten Zustand über. Das Pro-
grammfenster ist zwar geschlossen, aber das reicht offensichtlich nicht aus, um auch
den Thread zu beenden. Wenn Sie keinen eigenen Button zum Beenden des Programms
vorsehen wollen, dann können Sie die erforderlichen Aufräumarbeiten so hinterlegen,
dass sie beim Schließen des Frames abgearbeitet werden.
Markieren Sie dazu den Frame in der Ansicht Outline oder in der Vorschauansicht,
damit die GUI Properties die Eigenschaften des Frames zeigen. Erstellen Sie unter
Win-
dowListener
einen Listener für
windowClosed
. In der erstellten Methode ergänzen Sie
dann noch das Unterbrechen des Threads.