Paola Magillo, Univestita' di Genova, Corso di Interfacce Utente per Informatica, a.a. 2004-2005.

LABORATORIO - INTERFACCE GRAFICHE IN JAVA

Contesto generale

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:

  1. prima vediamo la classe BallPanel, gia' fatta, che realizza il pannello con la pallina
  2. poi progettiamo l'interfaccia, esclusa la parte di animazione
  3. poi vediamo come si realizza l'animazione in java e terminiamo il progetto
  4. infine realizziamo l'interfaccia

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

1 - La classe BallPanel

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).

Costruttore

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).

Funzioni

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).

2 - Progettazione (animazione esclusa)

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.

3 - Animazione (e progettazione completa)

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.

Costruire un timer

Il costruttore del timer prende come parametri

Avviare e fermare un timer

La classe Timer ha le seguenti funzioni utili:

Per le altre funzioni, se necessario, si puo' vedere il manuale in linea di Java.

Finalmente completiamo la progettazione

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!

4 - Realizzazione

Abbiamo ora il progetto completo dell'interfaccia, non resta che scrivere il codice Java.