Laboratorio di Interfacce Grafiche

Esercizio 1 (Java prima parte)

Ovviamente non e' necessario fare tutto...

Istruzioni generali

Se un programma e' fatto da piu' classi, si ha un file per ogni classe. Si compilano tutte le classi, si esegue quella contenente il main. Il sistema pensa automaticamente a mandare in esecuzione tutte le classi coinvolte (purche' i corrispondenti file ".class" siano nella stessa directory).

(1) Scopo: aggiungere componenti e comportamenti

Usare base di partenza l'esempio visto a lezione:
AWTExample.java(versione AWT) oppure SwingExample.java(versione Swing).

(2) Scopo: sperimentare vari layout manager

Usare base di partenza sempre il programma d'esempio visto a lezione.

(3) Scopo: monitorare tutti gli eventi possibili su un frame

Usare base di partenza il seguente programma:
EsFrame.java(versione AWT).

L'esempio gia' monitora gli eventi di classe ComponentEvent e WindowEvent stampando ad ogni evento una linea sullo standard output.

Il programma e' strutturato come segue:

Nota 1

E' necessario stabilire le dimensioni della finestra con setSize(...) prima di mapparla, altrimenti per default le sue dimensioni sarebbero nulle.
Un altro modo per stabilire le dimensioni e' pack(), che dimensiona la finestra basandosi sul suo contenuto. Qui pero' non e' possibile usare "pack" perche' la finestra non contiene nulla.

Nota 2

Esistono due modi principali di scrivere event listener in Java:
  1. Definire un listener separato per ogni componente e per ogni evento a cui si vuole reagire. E' il modo usato nell'esempio visto a lezione, dove si crea un action listener per il bottone e un window listener per il frame.
  2. Definire un solo listener che reagisce a tutti gli eventi. E' il modo usato qui. In generale e' meglio il primo modo. Il secondo modo e' indicato quando la componente che deve reagire agli eventi e' sempre la stessa (qui e' sempre il frame).

    Una classe puo' essere sottoclasse (implements...) di una sola classe, ma puo' implementare (implements...) un numero arbitrario di interfacce.
    Siccome gli event listener sono interfacce, una classe puo' implementarne piu' di uno (qui ne implementa gia' due). Non potevo invece usare gli adapter perche' gli adapter sono classi, e la mia classe EsFrame e' gia' sottoclasse di Frame, per cui non puo' essere sottoclasse di altro.

    Che cosa bisogna fare

    Aggiungere la gestione degli eventi di classi FocusEvent, MouseEvent, KeyEvent, aggiungendo: Per informazioni sui metodi da implementare per i vari listener, vedere le dispense o la documentazione in linea su Java API.