Programmazione per TWM: Esercitazione di laboratorio #22 (14/05)

Gli obiettivi di questa esercitazione sono: saper utilizzare le classi DataInputStream e DataOutputStream del package java.io, iniziare a prendere confidenza con AWT, ascoltatori e adattatori (capitoli 11 da 11.6.3 fino a 11.6.5 e 12 fino a 12.3).

Raccomandazioni: Ove non altrimenti indicato, rispondete alle domande prima ragionando su carta e poi provando a editare, compilare ed eseguire. Gli esercizi etichettati con l'asterisco (*) sono più difficili: affrontateli dopo aver risolto gli altri.

Esercizio 1

Obiettivo: saper utilizzare le classi DataInputStream e DataOutputStream del package java.io.

Attività:

  1. Copiate il programma DataFile a pagina 260. Compilatelo ed eseguitelo.
  2. Visualizzate il file tmp con il comando more tmp. Contiene quello che vi aspettate?
  3. Modificate il programma DataFile per far chiedere da tastiera il nome del file.
  4. Modificate il programma DataFile per far passare come primo parametro della riga di comando (args[0]) il nome del file.
  5. Modificate il programma DataFile per far scrivere il vostro nome, il vostro cognome e il vostro numero di matricola nel file.
  6. (*) Completate il seguente TDA:
    ...
    public class Studente {
      private String matricola;
      private float[] voti;
      private int esami = 0;
      public Studente(String matricola, int numeroMaxEsami) {
        this.matricola = matricola;
        this.voti = new float[numeroMaxEsami];
      }
      public void aggiungiVoto(float voto) {
        voti[esami++] = voto;
      }
      public void salvaSuFile(Data...Stream file) {
        ...
      }
      public static Studente leggiDaFile(Data...Stream file) {
        ...
        ... new Studente(...);
        ...
        ... aggiungiVoto(...);
        ...
        return ...;
      }
    }
    Il metodo leggiDaFile deve restituire una nuovo oggetto Studente con tutti i dati precedentemente salvati sul file.

Esercizio 2

Obiettivo: iniziare a prendere confidenza con l'AWT.

Attività:

  1. Copiate il codice a pagina 268 e 269, compilate ed eseguite.
  2. Modificate ProvaGUI1 per far creare 2 finestre.
  3. Modificate GUI1 per far creare una finestra quadrata e non rettangolare.
  4. Modificate GUI1 per permettere di passare come parametro del costruttore il titolo e la dimensione della finestra. Modificate di conseguenza anche ProvaGUI1.
  5. (*) Modificate GUI1 aggiungendo una variabile intera statica che conta quante volte viene chiamato il costruttore. Il titolo della finestra deve essere Finestra seguito dal numero. Modificate ProvaGUI1 per far chiedere da tastiera quante finestre creare e verificate che il programma crei il numero giusto di finestre e con i titoli giusti.

Esercizio 3

Obiettivo: prendere confidenza con ascoltatori e adattatori.

Attività:

  1. Copiate il codice di pagina 270 e 271. Compilate ed eseguite.
  2. Togliete e.getWindow().dispose(); dal metodo windowClosing. La finestra si chiude ancora? I messaggi vengono stampati ancora?
  3. Aggiungete System.exit(0); al metodo windowClosing. La finestra si chiude ancora? I messaggi vengono stampati ancora?
  4. Togliete System.exit(0); dal metodo windowClosed. La finestra si chiude ancora? I messaggi vengono stampati ancora?
  5. Modificate Ascoltatore con il codice a pagina 273-274. Compilate ed eseguite.
  6. Modificate la seconda versione di Ascoltatore per far stampare Ciao quando la finestra viene ridotta a icona e Hello quando vengono ripristinate le sue dimensioni.
  7. Modificate Ascoltatore per far stampare un messaggio diverso in ogni metodo. Compilate ed eseguite.
  8. (*) Modificate Ascoltatore per far comportare la finestra in modo controintuitivo: quando si clicca sul pulsante per chiudere viene creata una nuova finestra, quando si clicca sul pulsante per ridurre a icona viene chiusa la finestra e stampato Ciao!.

Esercizio 4

Obiettivo: comprendere l'uso delle classi interne e anonime.

Attività:

  1. Completate il programma seguente aggiungendo un ascoltatore anonimo che permette di chiudere la finestra.
    import java.awt.*;
    import java.awt.event.*;
    
    public class Es4Att1 {
      public static void main(String[] args) {
        Frame f = new Frame("Esempio ascoltatore anonimo");
        f.add...Listener(new ...() {
          public void windowClosed(WindowEvent e) {
            ...
          }
          public void ...(...Event ...) {
            ...
          }
        });
        f.setBounds(100,100,400,400);
        f.setVisible(true);
      }
    }
  2. Copiate il codice di pag 275 compilate ed eseguite. Quanti file .class sono stati generati dalla compilazione? I loro nomi sono quelli che vi aspettavate?
  3. Completate il codice di FinestraCheSiChiude aggiungendo l'ascoltatore interno ChiudiFinestra che chiude la finestra, ma non esce dal programma.
    import ...;
    import ...;
    
    class FinestraCheSiChiude extends Frame {
      public FinestraCheSiChiude(String titolo) {
        super(titolo);
        addWindowListener(new ChiudiFinestra());
      }
      ...
    }

Valid HTML 4.01! Valid CSS! Paolo Coppola
Last modified: 2003-05-14