L'obiettivo e' realizzare in Java un'interfaccia per una semplice animazione.
L'interfaccia dovra' contenere
Nota: i nomi di play, pause, resume, stop sono stati usati solo per meglio chiarire che cosa si intende. I dispositivi corrispondenti non devono necessariamente essere bottoni etichettati con queste stringhe.
Si chiede anche di gestire i casi di operazioni non valide nello stato attuale.
Procederemo per gradi:
Non occorre consegnare nulla, questo e' solo un esercizio che vi sara' utile per il progetto finale del corso.
SUGGERIMENTO:
E' molto utile programmare tenendo aperta
a fianco una finestra sul sito con il manuale on-line delle
classi Java:
http://java.sun.com/j2se/1.4.2/docs/api/index.html
Prendete il file
BallPanel.java (versione AWT)
oppure JBallPanel.java (versione Swing).
La seguente documentazione vale per entrambe le classi,
naturalmente cambia il nome del costruttore
(con 'J' davanti nella versione Swing).
La classe BallPanel realizza il pannello con la pallina.
Questo e' un componente di interfaccia e come tale
puo' essere aggiunto dentro a un contenitore (finestra o pannello).
BallPanel(int width, int height)
Crea pannello con pallina.
Il pannello ha per altezza e larghezza preferite quelle date.
La pallina e' nelle condizioni iniziali
(al centro con direzione di marcia scelta in modo casuale).
Elenchiamo qui solo quelle rilevanti per realizzare l'interfaccia.
void nextStep()
Esegue un passo dell'animazione. Muove avanti la pallina nella sua
direzione di marcia corrente. Se cosi' facendo urta contro una parete
del pannello, la pallina cambia direzione (cioe' esegue il rimbalzo).
resetBall()
Riporta la pallina nelle condizioni iniziali
(al centro con direzione di marcia scelta in modo casuale).
Per ogni dispositivo richiesto, decidere la classe java da adoperare. Per il pannello con animazione, la classe sara' ovviamente BallPanel.
Decidere come collocare tali dispositivi nella finestra, e di conseguenza la gerarchia di contenimento e i layout manager.
L'animazione puo' essere in uno dei seguenti tre stati:
non iniziata, in corso, sospesa.
Individuare, per ciascuno stato, quali operazioni non sono
valide (per esempio "play" ad animazione in corso).
Per le operazioni valide, individuare se e come modificano lo stato.
Fare un diagramma delle transizioni di stato.
Per gestire l'animazione di usa
la classe Timer contenuta nel pacchetto Swing (per usarla bisogna
importare javax.swing.*).
Nota 1: si puo' usare senza problemi anche se il resto dell'interfaccia e'
realizzato con AWT.
Nota 2: esiste un'altra classe Timer in un altro pacchetto di Java,
verificate di usare quella di Swing.
Un timer e' un tipo di componente particolare che non deve essere aggiunto all'interfaccia, ma e' in grado di ricevere un evento di azionamento (ActionEvent) che scatta automaticamente ogni intervallo di tempo. A questo evento si puo' associare una callback (ActionListener) che manda avanti di un passo l'animazione.
Il costruttore del timer prende come parametri
La classe Timer ha le seguenti funzioni utili:
Definire, per ogni dispositivo di controllo, quali sono le operazioni
da eseguire nella sua callback (event listener).
Queste operazioni agiranno sul pannello della pallina o sul timer.
Ricordate anche di disabilitare i dispositivi corrispondenti ad
azioni non valide e di riabilitarli quando l'azione diventa valida!
Abbiamo ora il progetto completo dell'interfaccia, non resta che scrivere il codice Java.