Programmazione per TWM: Esercitazione di laboratorio #24 (21/05)

Gli obiettivi di questa esercitazione sono: imparare a utilizzare i componenti per il testo, le applet e saper disegnare sui componenti (capitoli 12 e 13).

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: capire come usare i componenti per il testo.

Attività:

  1. Completare il codice seguente per fare in modo che ogni volta che si scrive un numero nel campo di testo e si batte invio, il numero viene raddoppiato:
    import java.awt.*;
    import java.awt.event.*;
    
    public class Es1 {
      public static void main(String[] args) {
        Frame f = new Finestra24();
        f.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.exit(0);
          }
        });
        f.setVisible(true);
      }
    }
    
    class Finestra24 extends Frame {
      private TextField t;
    
      public Finestra24() {
        this.setLayout(new FlowLayout());
        t = new TextField("0");
        this.add(new Label("Inserisci un numero da raddoppiare e premi invio"));
        this.add(t);
        ...
      }
      class Raddoppia implements ActionListener {
        public void actionPerformed(ActionEvent e) {
          int numero = Integer.parseInt(t.getText());
          t.setText(String.valueOf(...));
        }
      }
    }
    Notate il metodo statico parseInt(int)della classe Integer che data una stringa rappresentante un numero intero restituisce il valore corrispondente di tipo int.
  2. Modificate il programma dell'attività precedente aggiungendo un altro campo di testo e facendo moltiplicare il numero contenuto nel primo per quello contenuto nel secondo ogni volta che si batte invio in uno dei due. Il risultato della moltiplicazione deve comparire sempre nel primo campo di testo.
  3. (*) Scrivere il programma DisegnaRettangolo che
    1. crea una finestra con due campi di testo editabili ed un'area di testo non editabile.
      Il primo campo di testo conterrà l'altezza del rettangolo, il secondo la larghezza.
    2. Aggiunga un ascoltatore di eventi ai due campi di testo in modo che quando si cambia il numero e si batte invio venga disegnato un rettangolo di asterischi nell'area di testo. Il rettangolo deve avere altezza pari al numero inserito nel primo campo di testo e larghezza pari al numero inserito nel secondo campo di testo.

Esercizio 2

Obiettivo: saper disegnare sui componenti.

Attività:

  1. Completate il codice seguente per far disegnare un quadrato di lato 12 al centro del Canvas:
    import java.awt.*;
    import java.awt.event.*;
    
    public class Es2 {
      public static void main(String[] args) {
        Frame f = new Frame();
        f.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.exit(0);
          }
        });
        ...
        f.setBounds(100,100,200,200);
        f.setVisible(true);
      }
    }
    
    class DisegnaQuadrato extends Canvas {
      private int lato;
    
      public DisegnaQuadrato(int lato) {
        this.lato = lato;
      }
      public void paint(Graphics g) {
        Dimension ... getSize();
        ...
      }
    }
  2. Aggiungete un metodo impostaLato(int) alla classe DisegnaQuadrato. Scrivete il programma FinestraConQuadrati che crea una finestra con un canvas, un campo di testo e un pulsante modificaLato. Quando si clicca sul pulsante, deve venire eseguito il metodo impostaLato passandogli come parametro il valore presente nella casella di testo. Ricordatevi di invocare il metodo repaint.
  3. (*) Aggiungete un ascoltatore per fare in modo che il quadrato non venga sempre disegnato al centro, ma centrato nel punto dell'ultimo click.

Esercizio 3

Obiettivo: saper utilizzare le applet.

Attività:

  1. Scrivete un'applet App1 con un'etichetta con scritto ciao.
  2. Scrivete un'applet App2 con due pulsanti che permettono di colorarne lo sfondo di rosso e di verde.
  3. Considerate l'applet seguente:
     
    /*<applet code="DisegnoApplet.class" width="400" height="400"></applet>*/
    
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    
    public class DisegnoApplet extends Applet {
      private final int MAX_ELEM = 10;
      private final int R = 15;
      int[] x = new int[MAX_ELEM];
      int[] y = new int[MAX_ELEM];
      int n = 0;
    
      public void init() {
        this.addMouseListener(new aggiungiCerchio());
      }
    
      public void paint(Graphics abc) {
        for (int i = 0; i < n; i++)
          abc.drawOval(x[i]-this.R,y[i]-this.R,this.R*2,this.R*2);
      }
    
      void add(int x, int y) {
        if (this.n < this.MAX_ELEM) {
          this.x[n] = x;
          this.y[n] = y;
          this.n++;
        } 
      }
    }
    
    class aggiungiCerchio extends MouseAdapter  {
      public void mouseClicked(MouseEvent e) {
        DisegnoApplet dA = (DisegnoApplet)e.getSource();
        dA.add(e.getX(),e.getY());
        dA.repaint(1);
      }
    }
      
    Una volta che sono stati posizionati MAX_ELEM cerchi non è più possibile aggiungerne altri. Modificare l'applet per far in modo che quando si è raggiunto il massimo numero di cerchi, si possa continuare a ad aggiungere cerchi levando quelli vecchi.
    Suggerimento: utilizzare l'operazione aritmetica "modulo" %.

Valid HTML 4.01! Valid CSS! Last modified: 2003-05-20