Esercitazione 29, 30 aprile 2002

Nota
Gli esercizi marcati con (*) sono considerati più difficili degli altri. Suggeriamo pertanto di affrontare la loro soluzione successivamente, per approfondire le conoscenze.

Esercizio 1

Scrivere una classe asc che implementa un WindowAdapter che chiude le finestre e fa terminare il programma.
Modificare il programma finestra01 dell'esercitazione precedente facendo in modo che il Frame creato possa anche essere chiuso quando si clicca sul pulsante in alto a destra della finestra.

Esercizio 2

Modificare il programma es03 dell'esercitazione precedente facendo in modo che i due Frame possano essere chiusi quando si clicca sul pulsante in alto a destra della finestra.

Utilizzare la classe asc definita nell'esercizio precedente.

Quante istanze della classe asc servono?

Esercizio 3(*)

Modificare opportunamente l'esercizio 1 per far in modo che quando si clicca sul pulsante in alto a destra della finestra, invece di chiudersi, la finestra mostra nella barra del titolo la frase "NO! Non voglio chiudermi!!".

Il metodo getWindow() ritorna un oggetto Window e non Frame. Per poter utilizzare i metodi della classe Frame occorre per prima cosa trasformare l'oggetto Window in Frame con un cast.

Esercizio 4

Scrivere un programma es04 che mostra un Frame con un bottone. Ogni volta che si schiaccia il bottone, il programma deve scrivere in output (sulla consolle) la scritta "ahi!".

Esercizio 5

Modificare l'esercizio precedente facendo in modo che il programma scriva in output la prima volta "ahi!" una volta sola, la seconda volta che si preme il bottone lo scriva 2 volte e così via, alla trentesima volta ripeta per trenta volte la scritta "ahi!", ecc.

Esercizio 6

Modificare l'esercizio precedente facendo in modo che alla quarta pressione del bottone il programma scriva "Adesso mi hai stufato!" ed esca dal programma.

Esercizio 7(*)

Scrivere un programma creaFinestre che mostra un Frame con un Panel con all'interno un bottone ed una casella di testo. Quando si preme il bottone, il programma deve creare un nuovo Frame di dimensioni 150 x 150 posizionato a 30 pixel di distanza dall'alto e da sinistra dello schermo e con il titolo uguale a quello che sta scritto nella casella di testo.

Passare la casella di testo come parametro nel costruttore della classe ascoltatore.

Esercizio 8

Considerate il seguente programma:

import java.awt.*;
import java.awt.event.*;

public class es05 {
  public static void main(String arg[]) {
    Frame f = new Frame();
    CheckboxGroup c = new CheckboxGroup();
    Checkbox c1 = new Checkbox("cerchio",c,false);
    Checkbox c2 = new Checkbox("quadrato",c,true);
    Button b1 = new Button("Disegna");
    Button b2 = new Button("Cancella");
    Canvas cn = new Canvas();
    cn.setSize(200,200);
    Panel p = new Panel();
    p.add(c1);
    p.add(c2);
    p.add(b1);
    p.add(b2);
    p.add(cn);
    f.add(p);
    disegnatore dis = new disegnatore(c1,cn);
    b1.addActionListener(dis);
    b2.addActionListener(dis);
    f.pack();
	f.setVisible(true);
  }
}

class disegnatore implements ActionListener {
  Checkbox cerchio;
  Canvas c;
  disegnatore(Checkbox c1, Canvas c) {
    this.cerchio = c1;
    this.c = c;
  }

  public void actionPerformed(ActionEvent e) {
    if (e.getActionCommand().equals("Disegna")) {
      c.paint(c.getGraphics());
      if (cerchio.getState()) {
        c.getGraphics().drawOval(c.getSize().width/2,c.getSize().height/2,10,10);
      } else {
        c.getGraphics().drawRect(c.getSize().width/2,c.getSize().height/2,10,10);
      }
    } else {
      c.paint(c.getGraphics());
    }
  }
}
  1. Compilate ed eseguite il programma
  2. Cosa succede se si cambia disegnatore dis = new disegnatore(c1,cn); in disegnatore dis = new disegnatore(c2,cn);?
  3. E se si cambia il campo cerchio della classe disegnatore in quadrato?
  4. (*) Modificare il codice aggiungendo una checkbox con etichetta "rosso". Quando si preme il bottone "Disegna", prima di disegnare il cerchio o il quadrato, lo sfondo del Canvas deve essere colorato di rosso se la checkbox è selezionata.

Valid HTML 4.01! Valid CSS! Paolo Coppola
Last modified: 2002/04/24