// Button1.java      Corso C/Java (C) Fabio Ciucci 1996 (www.anfiteatro.it)

/* ************************************************************************
 * Ora vedremo i Button. Il bottone e' un componente che genera un Event
 * quando viene premuto, e fisicamente e' un bottone rettangolare con
 * un'etichetta String. In questo esempio facciamo scrivere un diverso
 * messaggio secondo quale dei 2 bottoni e' premuto.
 ********************************************************************** */

import java.applet.*;      // Include le classi per le applet.
import java.awt.*;         // Include le classi per l'awt


/* ********************************************************************** */

public class Button1 extends Applet {    // Inizio della classe Button1
                                         // che tra l'altro e' derivata da
                                         // Applet.


// Creo una label, che servira' per scrivere i messaggi. La dichiaro in
// questo punto in modo che sia visibile in tutta la classe, altrimenti
// non potremmo modificarne il testo fuori dal metodo init().

      Label MessLabel = new Label("Premi uno dei bottoni", Label.CENTER);

///////////////////////////////////////////////////////////////////////////
// Il main() viene chiamato quando eseguiamo come applicazione con java.exe
///////////////////////////////////////////////////////////////////////////

   public static void main(String args[]) {   // Inizio del main...

     Frame ButAppFram = new Frame("But1");    // Creo un frame grafico
                                              // inizialmente invisibile,
                                              // e lo chiamo But1

     Button1 MiaBut1AppIst = new Button1();   // Istanzio l'applet

     MiaBut1AppIst.init();           // Se esiste init() eseguilo...
//   MiaBut1AppIst.start();          // Se esiste start() eseguilo...

     ButAppFram.add("Center", MiaBut1AppIst); // Attacca l'applet al centro
                                              // del frame.

     ButAppFram.resize(280, 100);    // Ridimensiono (non ho WIDTH di html!)
     ButAppFram.show();              // Visualizza il frame, ora che e' OK.
   }

/*-------------------------------------------------------------------------*
 * L' init(), eseguito come prima cosa al caricamento.
 *----------------------------------------------------------------------- */

   public void init() {

// Creo i 2 bottoni.

      Button OkBottone = new Button("Si, sicuramente");
      Button NoBottone = new Button("Ne ora, ne mai!");

// Aggiungo i bottoni.

      add(OkBottone);
      add(NoBottone);

// Aggiungo la label (Dichiarata fuori dai metodi per renderla "globale").

      add(MessLabel);
   }

/*-------------------------------------------------------------------------*
 * Per la gestione delle interfacce utente esiste il metodo action().
 * Viene passato l'evento, e un oggetto il cui tipo dipende dall'evento che
 * si e' vefificato (si tratta di informazioni addizionali come il testo del
 * bottone premuto, l'elemento selezionato in un menu', ecc.).
 * Si dovra' prima di tutto verificare quale oggetto ha generato l'evento,
 * e per far cio' si verifica la sua variabile "target" tramite l'operatore
 * instanceof (che significa "istanza di")
 *------------------------------------------------------------------------*/

   public boolean action(Event eventuccio, Object argomento) {

      if(eventuccio.target instanceof Button) {	// Uno dei bottoni premuti???

	 if(argomento.equals("Si, sicuramente")) {   // E' si?
            MessLabel.setText("Premuto il SI");      // Allora
         }
	 if(argomento.equals("Ne ora, ne mai!")) {   // E' no?
            MessLabel.setText("Premuto il NO");
         }

	 return true;	// Ok, ritorna VERO
      }

      return false;		// Se non era un bottone, ritorna FALSO
   }

/*-------------------------------------------------------------------------*
 * Questo permette l'uscita col tasto end (fine) o col q, ed e' utile
 * in quanto l'esecuzione come applicazione non fa uscire clickando il
 * gadget di chiusura della finestra.
 *------------------------------------------------------------------------*/

   public boolean keyDown(Event evento, int tasto)
   {
      if(tasto == Event.END) System.exit(0);  // Tasto Fine premuto = esci
      if(tasto == 113) System.exit(0);  // tasto q (ascii 113) = esci
      return false;
   }

}    // Fine classe Button1

/* *************************************************************************
 * Provate a far fare qualcosa di piu' appariscente quando si preme il SI...
 ---------------
 Costruttori:

  Button()   ; Costruisce un bottone senza etichetta.

  Button(String label)  ; Costruisce un bottone con etichetta.

 ---------------
 Metodi principali:

  String getLabel()  ; Restituisce l'etichetta del bottone.

  setLabel(String label) ; Cambia l'etichetta del bottone.

 *********************************************************************** */

