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.
Obiettivo: saper utilizzare le classi DataInputStream
e DataOutputStream del package java.io.
Attività:
DataFile a pagina 260. Compilatelo ed
eseguitelo.DataFile per far chiedere da tastiera
il nome del file.DataFile per far passare come primo
parametro della riga di comando (args[0]) il nome del file.DataFile per far scrivere il vostro
nome, il vostro cognome e il vostro numero di matricola nel file.
...
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. Obiettivo: iniziare a prendere confidenza con l'AWT.
Attività:
ProvaGUI1 per far creare 2 finestre.GUI1 per far creare una finestra quadrata e non
rettangolare.GUI1 per permettere di passare come parametro del
costruttore il titolo e la dimensione della finestra. Modificate di conseguenza
anche ProvaGUI1.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.Obiettivo: prendere confidenza con ascoltatori e adattatori.
Attività:
e.getWindow().dispose(); dal metodo windowClosing.
La finestra si chiude ancora? I messaggi vengono stampati ancora?System.exit(0); al metodo windowClosing.
La finestra si chiude ancora? I messaggi vengono stampati ancora?System.exit(0); dal metodo windowClosed.
La finestra si chiude ancora? I messaggi vengono stampati ancora?Ascoltatore con il codice a pagina 273-274. Compilate
ed eseguite.Ascoltatore per far stampare
Ciao quando la finestra viene ridotta a icona e Hello
quando vengono ripristinate le sue dimensioni. Ascoltatore per far stampare un messaggio diverso
in ogni metodo. Compilate ed eseguite.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!.Obiettivo: comprendere l'uso delle classi interne e anonime.
Attività:
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);
}
}
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());
}
...
}
Paolo Coppola