##
BOTONES

Veremos ejemplos de cómo se añaden botones a un panel para la interacción del usuario con la aplicación, pero antes vamos a ver la creación de botones como objetos.

Se pueden crear objetos Button con el operador new:

        Button boton;

        boton = new Button( "Botón");

La cadena utilizada en la creación del botón aparecerá en el botón cuando se visualice en pantalla. Esta cadena también se devolverá para utilizarla como identificación del botón cuando ocurra un evento.

### Eventos Button

Cada vez que el usuario pulsa un botón, se produce un evento, de la misma forma que se produce un evento cuando se aprieta el botón del ratón. Los eventos de pulsación de un botón se pueden capturar sobrecargando el método action():

    public boolean action( Event evt,Object obj ) {
        if( evt.target instanceof Button )
            System.out.println( (String)obj );
        else
            System.out.println( "Evento No-Button" );
        }

La distinción entre todos los botones existentes se puede hacer utilizando el objeto destino pasado por el objeto Event y comparándolo con los objetos botón que hemos dispuesto en nuestro interface:

    import java.awt.*;
    import java.applet.Applet;

    public class Botones extends Applet {
        Button b1,b2,b3;

        public void init() {
            b1 = new Button( "Botón B1" );
            b2 = new Button( "Botón B2" );
            b3 = new Button( "Botón B3" );

            this.add( b1 );
            this.add( b2 );
            this.add( b3 );
            }

        public boolean action( Event evt,Object obj ) {
            if( evt.target.equals( b1 ) )
                System.out.println( "Se ha pulsado el boton B1" );
            if( evt.target.equals( b2 ) )
                System.out.println( "Se ha pulsado el boton B2" );
            if( evt.target.equals( b3 ) )
                System.out.println( "Se ha pulsado el boton B3" );

            return true;
            }
        }

En el applet anterior, Botones.java, observamos que se imprime el texto asociado al botón que hayamos pulsado.

### Botones de Pulsación

Los botones presentados en el applet son los botones de pulsación estándar; no obstante, para variar la representación en pantalla y para conseguir una interfaz más limpia, AWT ofrece a los programadores otros tipos de botones.

### Botones de Lista

Los botones de selección en una lista (Choice) permiten el rápido acceso a una lista de elementos. Por ejemplo, podríamos implementar una selección de colores y mantenerla en un botón Choice:

    import java.awt.*;
    import java.applet.Applet;

    public class BotonSeleccion extends Applet {
        Choice Selector;

        public void init() {
            Selector = new Choice();

            Selector.addItem( "Rojo" );
            Selector.addItem( "Verde" );
            Selector.addItem( "Azul" );

            add( Selector );
            }

        public boolean action( Event evt,Object obj ) {
            if( evt.target instanceof Choice )
                {
                String color = (String)obj;

                System.out.println( "El color elegido es el " + color );
                }

            return true;
            }
        }

En este ejemplo, BotonSeleccion.java, la cadena proporcionada al método addItem() será devuelta en el argumento Object de un evento Choice, por ello en el manejador del botón de selección, comprobamos en primer lugar que se trate efectivamente de un evento generado en un botón de tipo Choice.

### Botones de Marcación

Los botones de comprobación (Checkbox) se utilizan frecuentemente como botones de estado. Proporcionan información del tipo Sí o No (true o false). El estado del botón se devuelve en el argumento Object de los eventos Checkbox; el argumento es de tipo booleano: verdadero (true) si la caja se ha seleccionado y falso (false) en otro caso.

Tanto el nombre como el estado se devuelven en el argumento del evento, aunque se pueden obtener a través de los métodos getLabel() y getState() del objeto Checkbox.

    import java.awt.*;
    import java.applet.Applet;

    public class BotonComprobacion extends Applet {
        Checkbox Relleno;

        public void init() {
            Relleno = new Checkbox( "Relleno");

            add( Relleno );
            }

        public boolean action( Event evt,Object obj ) {
            if( evt.target instanceof Checkbox )
                System.out.println( "CheckBox: " + evt.arg.toString() );

            return true;
            }
        }

El sencillo ejemplo anterior, BotonComprobacion.java, muestra los cambios que se producen en el estado del botón cuando la caja está o no seleccionada.

### Botones de Selección

Los botones de comprobación se pueden agrupar para formar una interfaz de botón de radio (CheckboxGroup), que son agrupaciones de botones Checkbox en las que siempre hay un único botón activo.

    import java.awt.*;
    import java.applet.Applet;

    public class BotonRadio extends Applet {
        CheckboxGroup Radio;

        public void init() {
            Radio = new CheckboxGroup();

            add( new Checkbox( "Primero",Radio,true) );
            add( new Checkbox( "Segundo",Radio,false) );
            add( new Checkbox( "Tercero",Radio,false) );
            }
        }

En el ejemplo anterior, BotonRadio.java, observamos que siempre hay un botón activo entre los que conforman el interfaz de comprobación que se ha implementado.

### Botones Autocontenidos

La naturaleza orientada a objetos de Java nos da la posibilidad de crear botones completamente autocontenidos. En este tipo de botón, se construye el manejador de eventos dentro de la propia clase extendida de botón. Se pueden añadir estos botones a la aplicación, sin tener que preocuparse de los eventos que pudieran generar.

En el ejemplo siguiente, BotonAuto.java, creamos el botón que muestra la figura, un botón que genera el texto "Boton Aceptar" por la salida estándar:

    import java.awt.*;
    import java.applet.Applet;

    class BotonAceptar extends Button {

        public BotonAceptar() {
            setLabel( "Aceptar" );
            }

        public boolean action( Event evt,Object obj ) {
            System.out.println( "Boton Aceptar" );
            return true;
            }
        }

    public class BotonAuto extends Applet {
        BotonAceptar boton;

        public void init() {
            boton = new BotonAceptar();
            add( boton );
            }
        }

Es de hacer notar que no hay un método action() en la clase applet BotonAuto, la clase BotonAceptar manejará sus eventos. Si se hubiesen colocado otros objetos en el applet, se podría haber usado un método action() para tratar los eventos de esos objetos.

|  | ##### [Anterior] [Indice] [Siguiente]