martes, 31 de mayo de 2016

029.- POO - Clases Propias - Java y NetBeans


OBJETOS PROPIOS DEL LENGUAJE JAVA:

Hasta el momento, todos los objetos que ha usado a la hora de programar en Java, han sido objetos incluidos en el propio lenguaje, que se encuentran disponibles para que el programador los use en sus programas.

Estos objetos son: las etiquetas (JLabel), botones (JButton), los cuadros de texto (JTextField), cuadros de verificación (JCheckBox), botones de opción (JRadioButton), colores (Color), imágenes de icono (ImageIcon), modelos de lista (DefaultListModel), etc..


Todos estos objetos, por supuesto, pertenecen cada uno de ellos a una Clase:

Las etiquetas son objetos de la clase JLabel, los botones son objetos de la clase JButton, etc.


Todos estos objetos tienen propiedades que pueden ser cambiadas en la ventana de diseño:

Ancho, alto, color, alineación, etc.


Aunque también poseen métodos que nos permiten cambiar estas propiedades durante la ejecución del programa:

setText cambia el texto del objeto, setBackground cambia el color de fondo del objeto, setVisible hace visible o invisible al objeto, setBounds cambia el tamaño y la posición del objeto, etc.


En cualquier momento le podemos pedir a un objeto que nos dé información sobre sí mismo usando los métodos get:

getText obtenemos el texto que tenga el objeto, getWidth obtenemos la anchura del objeto, getHeight obtenemos la altura del objeto, etc.


Los objetos son como “pequeños robots” a los que se les puede dar órdenes, usando los métodos que tienen disponible.

Por ejemplo, le podemos decir a un objeto que se pinte de nuevo usando el método repaint, podemos ordenarle a un cuadro de texto que coja el cursor, con el método grabFocus, etc.


Todos estos objetos, con sus propiedades y métodos, nos facilitan el desarrollo de nuestros programas. Pero a medida que nos vamos introduciendo en el mundo de la programación y nos especializamos en un tipo de programa en concreto, puede ser necesario la creación de objetos propios, programados por nosotros mismos, de forma que puedan ser usados en nuestros futuros programas.




OBJETOS PROPIOS:

A la hora de diseñar un objeto de creación propia, tendremos que pensar qué propiedades debe tener dicho objeto, y qué métodos serán necesarios para poder trabajar con él. Dicho de otra forma, debemos pensar en qué características debe tener el objeto y qué órdenes le podré dar.

Para crear objetos propios hay que programar la Clase del objeto. Una vez programada la Clase, ya podremos generar objetos de dicha clase, declarándolos y construyéndolos como si de cualquier otro objeto se tratara.

A continuación se propone un caso práctico de creación de objetos propios, con el que trabajaremos en las próximas entradas.

Lo que viene a continuación es un planteamiento teórico de diseño de una Clase de Objetos.



CASO PRÁCTICO: CINES “AMANUVA”:

Planteamiento:

La empresa Cines “AMANUVA” nos encarga desarrollar un programa para facilitar las distintas gestiones que se realizan en dichos cines.

Cines “AMANUVA” cuenta con varias salas, y cada una de ellas genera una serie de información. Para facilitar el control de la información de cada sala programaremos una Clase de objeto a la que llamaremos SalaCine.


La Clase SalaCine:

La Clase SalaCine definirá características de una sala de cine, y permitirá crear objetos que representen salas de cine. Cuando la clase SalaCine esté programada, se podrán hacer cosas como las que sigue:


Los Cines “AMANUVA” tienen una sala central donde se proyectan normalmente las películas de estreno. Se podría crear un objeto llamado salaCentral de la clase SalaCine de la siguiente forma:

SalaCine salaCentral;


Por supuesto, este objeto puede ser construido como cualquier otro:

salaCentral = new SalaCine();


El objeto salaCentral representará a la sala de cine central de los Cines “AMANUVA”.



Los Cines “AMANUVA” tienen otra sala secundaria donde proyectan películas clásicas. Se podría crear un objeto llamado salaSecundaria de la clase SalaCine de la siguiente forma:

SalaCine salaSecundaria;  //declaración

salaSecundaria = new SalaCine();  //construcción




Propiedades de los objetos de la clase SalaCine:

A la hora de decidir las propiedades de un objeto de creación propia, tenemos que preguntarnos, ¿qué información me interesa almacenar del objeto? Trasladando esta idea a nuestro caso práctico, ¿qué información me interesaría tener de cada sala de cine?

Para este ejemplo supondremos que de cada sala de cine nos interesa tener conocimiento de las siguientes características (propiedades):

-       aforo: define el número de butacas de la sala (un número entero).
-       butacasOcupadas: define el número de butacas ocupadas (un número entero).
-       tituloPelicula: define el título de la película que se está proyectando en determinado momento en la sala (una cadena de texto).
-       precioEntrada: define el precio de la entrada a sala de cine (un número double).




Valores por defecto de las propiedades de los objetos de la clase SalaCine:

Cuando se construye un objeto, se asignan unos valores por defecto a sus propiedades. Por ejemplo, cuando se construye una etiqueta (Clase JLabel), esta tiene un tamaño inicial definido, un color, etc.

Lo mismo se tiene que hacer con los objetos propios que definimos. Es necesario decidir qué valores tendrá las propiedades del objeto al construirse.

En nuestro caso, las características de un objeto de la clase SalaCine en el momento de construirse serán las siguientes:

aforo:                     100
butacasOcupadas:  0
tituloPelicula:         “”        (cadena vacía)
precioEntrada:       5.00

Observa este código, en él construimos el objeto correspondiente a la sala central de Cines “AMANUVA”:

SalaCine salaCentral;
salaCentral = new SalaCine();


En este momento (en el que el objeto salaCentral está recién construido) este objeto tiene asignado un aforo de 100, el número de butacas ocupadas es 0, el título de la película que se proyecta en la sala central es “” y el precio de la entrada para esta sala es de 5.00 euros.

Los valores por defecto que se asignan a los objetos de una clase son valores arbitrarios que el programador decidirá según su necesidad.



Métodos de los objetos de la clase SalaCine:

Para comunicarnos con los objetos de la Clase SalaCine que construyamos, tendremos que disponer de un conjunto de métodos que nos permitan asignar valores a las propiedades de los objetos, recoger información de dichos objetos y que le den órdenes al objeto.

Será el programador el que decida qué métodos le interesará que posea los objetos de la Clase que está programando.

Para nuestro caso particular, supondremos que los objetos de la Clase SalaCine deberán tener los siguientes métodos:


Métodos de cambio de propiedades (Métodos set):

setAforo     - asignará un aforo a la sala de cine
setButacasOcupadas       - asignará una cantidad de butacas ocupadas a la sala de cine
setButacasLibres  - asignará una cantidad de butacas libres a la sala de cine
setTituloPelicula   - asignará un título de película a la sala de cine
setPrecioEntrada  - fijará el precio de las entradas a la sala de cine

Gracias a estos métodos podemos dar forma a un objeto de la clase SalaCine recién creado.

Por ejemplo, supongamos que queremos crear el objeto que representa la sala secundaria de películas clásicas. Resulta que esta sala tiene un aforo de 50 localidades, que se está proyectando la película “El Club de la Pelea” y que la entrada para ver la película es de 3.0 euros. La sala está vacía de momento.




Para crear el objeto, se usaría el siguiente código:

//Se construye el objeto
SalaCine salaSecundaria;
salaSecundaria = new SalaCine();

//Se le asignan características
salaSecundaria.setAforo(50);                       //aforo 50
salaSecundaria.setPelicula(“El Club de la Pelea”);     //la película que se proyecta
salaSecundaria.setEntrada(3.0);                  //entrada a 3.0 euros


Al construir el objeto salaSecundaria tiene por defecto los valores siguientes en sus propiedades:

aforo:                     100
butacasOcupadas:  0
tituloPelicula:         “”
precioEntrada:       5.00


Gracias a los métodos disponibles hemos asignados estos nuevos valores:

aforo:                     50
butacasOcupadas:            0
tituloPelicula:                   “El Club de la Pelea”
precioEntrada:                 3.0



Métodos para pedirle información al objeto (Métodos get):

Se programarán los siguientes métodos get en la clase SalaCine:

getAforo    - devuelve el aforo que tiene el objeto
getButacasOcupadas     - devuelve el número de butacas ocupadas que tiene el objeto
getButacasLibres  - devuelve el número de butacas que tiene libres el objeto
getPorcentajeOcupacion - devolverá el porcentaje de ocupación de la sala
getIngresosSala    - devolverá los ingresos producidos por la sala (‘entradas vendidas’ multiplicadas el precio)
getTituloPelicula   - devolverá el título de la película que se está proyectando
getPrecioEntrada  - devolverá el precio de la entrada asignado al objeto



Estos métodos nos permitirán obtener información de un objeto del tipo SalaCine. Por ejemplo, supongamos que tenemos el objeto llamado salaCentral (correspondiente a la sala principal de Cines “AMANUVA”), para obtener el título de la película que se está proyectando en dicha sala solo habría que usar este código:

String tituloPelicula;           //una variable de cadena
tituloPelicula = salaCentral.getTituloPelicula();


Para saber los ingresos producidos por la sala central se usará este código:

double ingresos;
ingresos = salaCentral. getIngresosSala ();



Métodos para dar órdenes al objeto:

Se programarán los siguientes métodos para dar órdenes a los objetos de la clase SalaCine.

vaciarSala
-       Este método pondrá el número de plazas ocupadas a cero y le asignará a la película la cadena vacía.

entraUno
-       Este método le dice al objeto que ha entrado una nueva persona en la sala. (Esto debe producir que el número de plazas ocupadas aumente en uno).




Resumen SalaCine

He aquí un resumen de la Clase de objetos SalaCine, la cual se programará en la próxima entrada de este blog:


Clase de objetos: SalaCine


Propiedades de los objetos SalaCine:

          aforo                     - número entero (int)
          butacasOcupadas  - número entero (int)
          tituloPelicula         - cadena (String)
          precioEntrada       - número decimal (double)



Valores por defecto de los objetos del tipo SalaCine:

          aforo:                     100
          butacasOcupadas:  0
          tituloPelicula:         (cadena vacía)
          precioEntrada:       5



Métodos de los objetos del tipo SalaCine:


          Métodos de asignación de propiedades (set)

          setAforo     - modifica la propiedad Aforo
setButacasOcupadas       - modifica la propiedad butacasOcupadas
setButacasLibres  - modifica la propiedad butacasOcupadas también
setTituloPelicula   - modifica la propiedad tituloPelicula
setPrecioEntrada  - modifica la propiedad precioEntrada
         


          Métodos de petición de información (get)

getAforo     - devuelve el valor de la propiedad aforo
getButacasOcupadas     - devuelve el valor de la propiedad butacasOcupadas
getButacasLibres  - devuelve el número de butacas libres
getPorcentajeOcupacion - devuelve el porcentaje de ocupación de la sala
getIngresosSala    - devuelve los ingresos obtenidos por la venta de entradas
getTituloPelicula   - devuelve el valor de la propiedad tituloPelicula
getPrecioEntrada  - devuelve el valor de la propiedad precioEntrada



          Métodos de orden

          vaciarSala   - vacía la ocupación de la sala y borra el título de la película
          entraUno     - le indica al objeto que ha entrado una persona más en la sala




EJERCICIO PRÁCTICO

Supongamos que programamos una Clase de objetos llamada Rectangulo, la cual permitirá construir objetos que representen a rectángulos.

  1. ¿Cómo declararía y construiría un objeto llamado suelo del tipo Rectangulo?


  1. Supongamos que las propiedades de los objetos de la clase Rectangulo sean las siguientes:

    1. Base (double)
    2. Altura (double)

¿Qué métodos de tipo set programaría para cambiar las propiedades de los objetos del tipo Rectangulo?


  1. Como ejemplo de los métodos anteriores, suponga que quiere asignar al objeto suelo una base de 30 y una altura de 50. ¿Qué código usaría?


  1. Teniendo en cuenta que nos puede interesar conocer el área de un objeto Rectangulo y su perímetro, y teniendo en cuenta que los objetos Rectangulo tienen dos propiedades (Base y Altura), ¿qué cuatro métodos get serían interesantes de programar para los objetos del tipo Rectangulo?


  1. Teniendo en cuenta los métodos del punto 4. Supongamos que quiero almacenar en una variable double llamada area el área del objeto suelo. ¿Qué código usaría? Y si quiero almacenar el perímetro del objeto suelo en una variable llamada peri?




CONCLUSIONES:

Para crear un objeto propio, necesita tener claro lo siguiente:

Nombre de la Clase del objeto.

Propiedades que tendrán los objetos de dicha clase.

Valores iniciales que tendrán las propiedades cuando se construya cada objeto.

Métodos que serán interesantes de programar:

              Métodos de ajuste de propiedades (set)
              Métodos de petición de información (get)
              Métodos de orden

Una vez que se tenga claro lo anterior, se podrá empezar la programación de la Clase de objetos.


domingo, 10 de abril de 2016

028.- Introducción a la Programación Orientada a Objetos - POO - Java y NetBeans


Introducción a la Programación Orientada a Objetos – POO:

La programación orientada a objetos es una nueva forma de entender la creación de programas. Esta filosofía de programación se basa en el concepto de objeto.


OBJETO:

Un objeto se define como un elemento que tiene unas propiedades y métodos.

Un objeto posee unas características (ancho, alto, color, etc…). A las características de un objeto se les llama propiedades.

Un objeto es un elemento “inteligente”. A un objeto se le puede dar órdenes y él obedecerá. A estas órdenes se les llama métodos. Con los métodos podemos cambiar las características del objeto, pedirle información, o hacer que el objeto reaccione de alguna forma.

En Java todo son objetos. Veamos algunos ejemplos de uso de objetos en Java:


Ejemplo N° 1:

Supongamos que tenemos una etiqueta llamada etiTexto. Esta etiqueta es un objeto.

Como objeto que es, la etiqueta etiTexto tiene una serie de características, como por ejemplo: el color de fondo, el tamaño, la posición que ocupa en la ventana, el ser opaca o no, el ser invisible o no, etc… Son las propiedades de la etiqueta.

A una etiqueta le podemos dar órdenes, a través de sus métodos.

A través de los métodos podemos por ejemplo cambiar las características del objeto. Por ejemplo, se puede cambiar el tamaño y posición de la etiqueta usando el método setBounds:

etiTexto.setBounds(20,20,100,30);

Normalmente, los métodos que permiten cambiar las características del objeto son métodos cuyo nombre empieza por set.

Los métodos también permiten pedirle al objeto que dé información. Por ejemplo, podríamos usar el conocido método getText para recoger el texto que contenga la etiqueta y almacenarlo en una variable:

String texto;
texto = etiTexto.getText();


Los métodos que le piden información al objeto suelen tener un nombre que empieza por get.

Los métodos también sirven para ordenarle al objeto que haga cosas. Por ejemplo, podemos ordenar a la etiqueta etiTexto que no se muestre en la ventana usando el método setVisible:

etiTexto.setVisible(false);



Ejemplo N° 2:

Supongamos que tenemos un cuadro de texto llamado txtCuadro. Como todo en Java, un cuadro de texto es un objeto.

Un objeto tiene propiedades, es decir, características. Nuestro cuadro de texto txtCuadro tiene características propias: un color de fondo, un ancho, un alto, una posición en la ventana, el estar activado o no, el estar visible o no, etc…

A un objeto se le puede dar órdenes, llamadas métodos. Estas órdenes nos permiten cambiar las características del objeto, pedirle información, o simplemente pedirle al objeto que haga algo.

Por ejemplo, podemos cambiar el color de fondo del cuadro de texto txtCuadro usando el método llamado setBackground:

txtCuadro.setBackground(Color.BLUE);


Otros métodos que permiten cambiar las propiedades del objeto cuadro de texto son:

setVisible       - permite poner visible o invisible el cuadro de texto
setEnabled    - permite activar o desactivar el cuadro de texto
setEditable    - permite hacer que se pueda escribir o no en el cuadro de texto
setText         - permite modificar el texto del cuadro de texto
setBounds     - permite cambiar el tamaño y posición del objeto
setToolTipText         - permite asociar un texto de ayuda al cuadro de texto
etc…

Un objeto nos da información sobre él. Para pedirle información a un objeto usaremos métodos del tipo get. Por ejemplo, para pedirle al cuadro de texto el texto que contiene, usaremos el método getText:

String cadena = txtCuadro.getText();


Otros métodos que devuelven información del cuadro de texto son:

getWidth               - devuelve el ancho que tiene el cuadro de texto
getHeight               - devuelve el alto que tiene el cuadro de texto
getSelectedText       - devuelve el texto que está seleccionado dentro del cuadro de texto
getToolTipText        - devuelve el texto de ayuda que tiene asociado el cuadro de texto
etc…

También se le puede dar al objeto simplemente órdenes para que haga algo. Por ejemplo, podemos ordenar al cuadro de texto txtCuadro que seleccione todo el texto que contiene en su interior a través del método selectAll:

txtCuadro.selectAll();


Otros métodos que ordenan al cuadro de texto son:

repaint         - le ordena al cuadro de texto que se vuelva a pintar
copy            - le ordena al cuadro de texto que copie el texto que tenga seleccionado
cut              - le ordena al cuadro de texto que corte el texto que tenga seleccionado
paste           - le ordena al cuadro que pegue el texto que se hubiera copiado o cortado
etc…




CLASE:

Todo objeto es de una “clase” determinada, o dicho de otra forma, tiene un “tipo de datos” determinado.

Por ejemplo, las etiquetas que se usan en las ventanas son objetos que pertenecen a la clase JLabel. Los cuadros de texto en cambio son objetos de la clase JTextField.

Para poder usar un objeto hay que declararlo y construirlo.


Declaración de un Objeto:

La declaración de un objeto es algo similar a la declaración de una variable. Es en este momento cuando se le da un nombre al objeto. Para declarar un objeto se sigue la siguiente sintaxis:

Clase nombreObjeto;


Por ejemplo, para declarar la etiqueta del ejemplo N° 1, se usará el siguiente código:

JLabel etiTexto;


Para declarar, en cambio, el cuadro de texto del ejemplo N° 2, se usará el siguiente código:

JTextField txtCuadro;



Construcción de un Objeto:

En el momento de la “construcción” de un objeto, se le asignan a este una serie de propiedades iniciales. Es decir, unas características por defecto. Se puede decir que es el momento en que “nace” el objeto, y este nace ya con una forma predeterminada, que luego el programador podrá cambiar usando los métodos del objeto.

Es necesario construir el objeto para poder usarlo. La construcción del objeto se hace a través del siguiente código general:

nombreObjeto = new Clase();


Por ejemplo, para construir la etiqueta del ejemplo N° 1, se hará lo siguiente:

etiTexto = new JLabel();


Para construir el cuadro de texto del ejemplo N° 2, se hará lo siguiente:

txtCuadro = new JTextField();


NOTA: En algunos casos, la sintaxis de la declaración y la construcción se une en una sola línea. Por ejemplo, supongamos que queremos declarar la etiqueta etiTexto y construirla todo en una línea, entonces se hará lo siguiente:

JLabel etiTexto = new JLabel();


En general, para declarar y construir un objeto en una sola línea se sigue la siguiente sintaxis:

Clase nombreObjeto = new Clase();




La Clase como Generadora de Objetos:

Conociendo la Clase, se pueden crear tantos objetos de dicha Clase como se quiera. Es decir, la Clase de un objeto funciona como si fuera una plantilla a partir de la cual fabricamos objetos iguales. Todos los objetos creados a partir de una clase son iguales en un primer momento (cuando se construyen) aunque luego el programador puede dar forma a cada objeto cambiando sus propiedades.

Por ejemplo, la Clase JLabel define etiquetas. Esto quiere decir que podemos crear muchas etiquetas usando esta clase:

JLabel etiTexto = new JLabel();
JLabel etiResultado = new JLabel();
JLabel etiMensaje = new JLabel();


En el ejemplo se han declarado y construido tres etiquetas llamadas etiTexto, etiResultado y etiMensaje. Las tres etiquetas al momento de ser creadas son iguales, pero a través de los distintos métodos podemos dar forma a cada una:

etiTexto.setBackground(Color.RED);
etiTexto.setText(“Hola”);
etiResultado.setBackground(Color.GREEN);
etiResultado.setText(“Error”);
etiMensaje.setBackground(Color.BLUE);
etiMensaje.setText(“Cadena”);


En el ejemplo se le ha dado, usando el método setBackground un color distinto a cada etiqueta, además se ha cambiado el texto de cada una. De este modo se le da forma a cada etiqueta.



Hasta ahora has usado objetos aunque no tengas mucha conciencia de ello. Por ejemplo ha usado etiquetas, cuadros de texto, botones, botones de opción y demás en los temas anteriores. Como práctica y para ampliar tus conocimientos investiga y responde las siguientes interrogantes:

-        ¿Cuál es el nombre de la clase de los botones normales que usa en sus ventanas?
-        ¿Cómo declararías un botón llamado btnAceptar, y otro llamado btnCancelar?
-        ¿Cómo construirías dichos botones?
-        Indica algunos métodos para cambiar propiedades de dichos botones (métodos set)
-        Indica algunos métodos para pedirle información a dichos botones (métodos get)
-        Indica algún método para dar órdenes a dichos botones (algún método que no sea ni set ni get)









CONCLUSIONES:

Un Objeto es un elemento que tiene una serie de características llamadas PROPIEDADES.

Por otro lado, al objeto se le pueden dar órdenes que cumplirá de inmediato. A dichas órdenes se les denomina MÉTODOS.

Los métodos se pueden dividir básicamente en tres tipos:

Para cambiar las propiedades del objeto (Métodos set)
Para pedir información al objeto (Métodos get)
Para dar órdenes al objeto.


Todo objeto pertenece a una CLASE.

La CLASE nos permite declarar objetos y construirlos:


Declaración:

     CLASE nombreObjeto;


Construcción:

     nombreObjeto = new CLASE();


Declaración y Construcción en una misma línea:

     CLASE nombreObjeto = new CLASE();

En la construcción de un objeto se asignan unas propiedades (características) por defecto al objeto que se construye, aunque luego, estas características pueden ser cambiadas según necesidad y criterio del desarrollador.



sábado, 9 de abril de 2016

027.- Vectores de Componentes y Eventos Desde Código - Java y NetBeans


Asignación de eventos a los elementos de un vector de componentes:

En Java se pueden crear vectores de componentes, como ya se vio en el post anterior. Estos vectores pueden contener un grupo de etiquetas, cuadros de texto, botones, etc.

Gracias a los vectores de componentes se pueden crear rápidamente por código estos componentes y trabajar sobre ellos sin tener que usar muchas líneas de código.

En esta hoja se verá cómo se pueden asignar eventos a los componentes de un vector.


Ejercicio:


  1. Crea un proyecto en java.

  1. Empecemos definiendo desde código las características de la ventana. Crearemos el método crearVentana, y lo llamaremos desde el método constructor de la clase:



  1. Vamos a situar en la ventana 5 botones, y para ello usaremos un vector de botones, que tendremos que declarar en la zona de variables globales (propiedades de la clase):



  1. Dentro del método crearVentana construiremos el vector y construiremos cada uno de los botones que contiene, asignando las distintas características de cada uno. Debes añadir el siguiente código dentro del método crearVentana:



  1. En el código anterior se crea un vector de cadenas (String) con el texto de cada botón.

Luego se construye el vector de botones, asignándole 5 botones.

A continuación, usando un bucle for, construimos cada botón del vector, le asignamos el texto correspondiente, le asignamos su posición y su tamaño, y lo colocamos en el panel de contenido de la ventana.


  1. Ejecuta el programa para observar su aspecto hasta ahora:



  1. Ahora, interesaría asignar un evento actionPerformed a cada botón. Esto se hará aprovechando el que todos los botones pertenezcan a un vector, usando un bucle for. Añade el siguiente código al final del método crearVentana:



Este código asigna a cada botón un evento actionPerformed que hace una llamada a un método al que he llamado botonActionPerformed. (Esta llamada da error porque aún no ha sido programado dicho evento. Esto se hará a continuación.)

Hay que tener en cuenta que cuando se pulse cualquiera de los botones, se ejecutará el método botonActionPerformed. Programa este procedimiento (fuera de crearVentana, por supuesto) de la siguiente forma:



  1. Ejecuta el programa y observa el resultado. Cuando pulsas cualquiera de los botones, se ejecuta la respuesta al evento y esta lo que hace es mostrar un mensaje a través de un JOptionPane donde aparece el texto “Has pulsado uno de los botones.”.

El método botonActionPerformed sirve como respuesta para todos los botones. El problema que plantea esto es, ¿cómo saber qué botón se ha pulsado? Es aquí donde entra en funcionamiento el parámetro ae (ActionEvent) que suelen llevar todos los eventos.

  1. Modifica el método botonActionPerformed de forma que quede así:



Este código resulta muy interesante. El parámetro ae tiene siempre un método llamado getSource que devuelve el componente de la ventana sobre el que ha sucedido el evento. De esta manera obtenemos el botón que ha sido pulsado. (Observa que es necesario hacer un cast) Aprovechamos esto para introducir el botón en una variable auxiliar que hemos llamado botonPulsado.

Luego solo hay que usar la variable botonPulsado como un botón normal y corriente. Por ejemplo, la usamos en el JOptionPane mostrando el texto que contiene el botón pulsado con el método getText.

  1. Ejecuta el programa y observa el resultado, por ejemplo al pulsar el botón Aplicar se muestra lo siguiente:





CONCLUSIONES:

Se pueden asignar eventos a los elementos de un vector a través de un bucle for que recorra los distintos elementos del vector y le asigne el evento o eventos necesarios.

Cuando se asigna un mismo método de respuesta a eventos de varios componentes, es necesario usar el parámetro ae (ActionEvent) junto con el método getSource para averiguar el componente sobre el que ha sucedido el evento.


La forma general de acceder al elemento sobre el que sucedió el evento es la siguiente:

TipoComponente  var = (TipoComponente) ae.getSource();

La variable var contendrá el componente activado.