�Qu� metodos tenemos que implementar?
Cuando implementamos los intefaces ActionListener e ItemListener nos comprometimos a definir o implementar los dos siguientes m�todos:
public void actionPerformed(ActionEvent ae) public void itemStateChanged(ItemEvent ie)
El interface ActionListener requiere que implementemos el m�todo actionPerformed(ActionEvent ae), y el interface ItemListener requiere que implementemos el m�todo itemStateChanged(ItemEvent ie), incluso si los cuerpos de los m�todos est�n vac�os.
En el caso de la clase UIWestPanel, les a�adiremos alguna funcionalidad, como obtener un String indicando qu� bot�n estaba seleccionado o qu� �tem del men� se eligi�.
�Definir M�todos para la Funcionalidad
Podr�amos dejar estos m�todos sin nada m�s que un cuerpo vac�o, pero como queremos saber que �tem de men� seleccion� el usuario, definiremos las instrucciones para disparar esta informaci�n en los m�todos actionPerformed y itemStateChanged:
�El M�todo actionPerformed
Como se mencion� anteriormente, el m�todo getSelectedItem de la clase JComboBox devuelve el �tem seleccionado como un Object. En otras palabras, un objeto gen�rico. Nosotros necesitamos un objeto String, para que podamos compararlos posteriormente. Para convertir, o mejor, para forzar el Object devuelto a un String espec�fico, debemos especificar el tipo encerrado entre par�ntesis.
Por ejemplo, si el identificador del objeto JComboBox es fishspecies, y queremos saber si el usuario seleccion� Goldfish o Rockfish:
- Llamamos al m�todo getSelectedItem con el operador punto y el identificador.
- Forzamos el Object a un objeto String.
- Lo asignamos a un variable del tipo String.
Aqu� podemos verlo:
String fs = (String)fishspecies.getSelectedItem();
Una vez que tenemos los resultados asignados al identificador, podemos comparar los strings con:
if ((fs.equals("Goldfish")) System.out.println("Buy a fish bowl."); else System.out.println("Go scuba diving.");
Para el panel Log Dives, usamos JOptionPane para mostrar ciertos mensajes, dependiendo de la selecci�n del usuario. Ya utilizamos esta t�cnica cuando aprendimos el manejo de errores, y requerimos informaci�n del usuario. En el panel Log Dives, tambi�n podemos utilizarlo para proporcionar comentarios como se muestra abajo:

La imagen de arriba muestra un mensaje de aviso cuando el usuario selecciona una profundidad de 120 pies.
Sigue estos pasos... |
---|
|
�El m�todo itemStateChanged
Se llama a itemStateChanged cuando se selecciona uno de los botones de radio. Los mensajes desplegables son innecesarios ya que s�lo hay dos botones de radio, lo que si necesitamos dentro de este m�todo es un modo de determinar qu� bot�n se seleccion�. Una forma de encontrarlo es utilizar el m�todo getItemSelectable de la clase ItemEvent. Este m�todo devuelve el objeto que gener� el objeto ItemEvent invocante, en este caso un bot�n de radio. Al igual que el m�todo getSelectedItem, debemos forzar al tipo apropiado:
Sigue estos pasos... |
---|
|
El resultado de la selecci�n de usuario se asigna a la variable rb, que utilizaremos m�s tarde en otros m�todos que utilizan la informaci�n.
�Crear M�todos de Acceso P�blico
La clase UIWestPanel crea las caracter�sticas GUI para que el usuario interact�e, pero con funcionalidad limitada. Poder recolectar la entrada del usuario desde estas caracter�sticas gr�ficas, proporciona un significado para que otras clases obtengan esta informaci�n y trabajen con los datos. Veamos, hasta ahora hemos declarado los campos con la palabra clave private para protegerlos de una corrupci�n intencionada o no intencionada. �C�mo puede la clase que vamos a crear recuperar los datos si estos se daclaran como private y por lo tanto no est�n disponibles? A trav�s de m�todos de acceso public.
Estos m�todos, tambi�n conocidos como m�todos get, proporcionan una forma para que otras clases puedan recuperar y trabajar con datos private. Con estos m�todos get, definimos la instrucci�n de c�mo se puede usar el dato de forma exacta, luego las otras clases llaman a los m�todos p�blicos y recogen los datos s�lo a trav�s de los m�todos que hemos proporcionado. Es como si dij�ramos, "Puedes tener esta informaci�n particular, pero esto es todo lo que puedes hacer con ella", mientras protegemos el resto de los datos.
No hemos proporcionado la funcionalidad de los botones de esta clase UIWestPanel, para escribir el objeto en un fichero y para recuperarlo. En su lugar, inicializamos los botones en esta clase, y proporcionamos un m�todo public para acceder a los botones desde la clase donde est�mos proporcionando la funcionalidad, incluyendo los t�tulos de los botones.
Para crear el bot�n en esta clase y proporcionar la funcionalidad en otra, definimos un m�todo accesor que s�lo devuelve un objeto JButton. Entonces la otra clase llama a este m�todo y obtiene un objeto JButton en el que puede definir la funcionalidad.
Sigue estos pasos... |
---|
|
La clase que hemos creado ahora puede acceder a estos botones a trav�s de sus m�todos de acceso public.
�Acceder a la Entrada del Usuario
Despu�s de que usuario introduzca los datos en los campos de texto, seleccione los �tems de los men�s y los botones de radio, e introduzca el texto en el area de texto, recoge los datos y los almacena. Afortunadamente, muchos componentes GUI heredan un m�todo getText que devuelve un String para un nombre de bot�n, el texto introducido en un campo de texto, o �tem de men� o de lista que ha sido seleccionado.
Por ejemplo, en la documentaci�n de la clase JButton, descubrir�s que hereda el m�todo getText de la clase AbstractButton, el cual devuelve el texto del bot�n, como un String.
Para saber qu� bot�n se puls�, usamos el identificador con el operador punto y llamamos al m�todo getText:
button1.getText();
Por supuesto que necesitamos almacenar el resultado en una variable de alg�n tipo:
String result = button1.getText();
En el panel Log Dives, estamos recogiendo mucha informaci�n. Pero llamar al m�todo getText y asignar el resultado a una variable por cada �tem, y luego escribir cada �tem en un fichero consumir�a mucho tiempo. En su lugar, podemos llamar al m�todo getText sobre cada �tem y almacenar el resultado de todos ellos en una variable usando un objeto Vector. El beneficio adicional de almacenar los datos en un Vector es que �ste puede almacenar distintos tipos de datos, mientras que un array s�lo permite objetos del mismo tipo de dato.
Otra clase necesita acceder a los resultados de las entradas del usuario, por eso necesitamos una definici�n de un m�todo accesor public.
�Definir el M�todo getUIFields
Definir un m�todo accesor public para obtener los resultados de la entrada del usuario es una forma limpia de recoger los resultados. Como el m�todo es public, se le puede llamar desde otra clase que necesite trabajar con los datos introducidos en esta clase.
Empecemos creando la cabecera del m�todo, especificando que este m�todo:
- Tiene acceso public.
- Devuelve un objeto Vector.
- Tiene un nombre que refleja lo que hace.
Dentro del cuerpo del m�todo, definimos el Vector para almacenar los resultados. Un objeto java.util.Vector es similar a un array, pero puede contener una variedad de objetos. Al igual que los arrays, contiene componentes a los que se puede acceder usando un �ndice. Al contrario que los arrays, el tama�o de un Vector crece y disminuye seg�n a�adamos o eliminemos elementos. La �nica restricci�n con un Vector es que s�lo puede contener objetos, no tipos primitivos. Para incluir tipos primitivos en un Vector, debemos usar una clase envoltura.
Para a�adir objetos a un Vector simplemente llamamos al m�todo add:
Vector record = new Vector(); String name = "John Doe"; Integer age = new Integer(20); record.add(name); record.add(age);
Llamamos al m�todo getText de cada variable asociada con los campos de texto, los men�s y los botones de radio, excepto para una variable: private String s;
Recuerda que esta es una variable del tipo String para referenciar los resultados de un men� desplegable. Esta variable se utiliz� en el m�todo actionPerformed, por eso el resultado ya est� asignado a s. En este caso, s�lo necesitamos incluir la variable en el m�todo getUIFields para almacenar s en el vector.
Sigue estos pasos... |
---|
|
Observa que la �ltima l�nea de c�digo return fieldValues; devuelve el objeto Vector.
�Contar Inmersiones
Cada vez que se pulsa el bot�n Save, se llama al m�todo getCount, y se incrementa la variable count usando el operador ++. Imprime el resultado en un JLabel, en este caso diveNumberL, llamando al m�todo setText con el operador punto. Necesitaremos el valor de este String, por eso usamos el m�todo valueOf y le pasamos la referencia count. Este m�todo devuelve count:
public int getCount() { count++; diveNumberL.setText(String.valueOf(count)); return count; }
�Calcular el Aire Consumido
El siguiente m�todo define y calcula la unidad de aire que el usuario ha utilizado en una inmersi�n sustrayendo la cantidad de PSI que quedan en el tanque al final de la inmersi�n de la cantidad que hab�a al principio. Luego, muestra el resultado con el m�todo setText de la clase JLabel.
Para poder realizar las operaciones matem�ticas con los strings que devuelven los m�todos getText, necesitamos utilizar clases envoltura para obtener un int para cada resultado. Estos resultados se asignan respectivamente a beginAir y a endAir. El resultado final se asigna a psiUsed y se muestra en un JLabel.
Despu�s de que el usuario introduzca la informaci�n y pulse Enter, el usuario puede borrar la informaci�n introducida o teclear nuevos datos. Sin embargo, una mejor soluci�n es hacer que los campos se limpien autom�ticamente despu�s de que los datos se hayan escrito en un fichero y se pulse el bot�n Enter. Las instrucciones para limpiar los datos se definen en un m�todo, y se llama a este m�todo despu�s de el objeto se haya escrito en un fichero.
El m�todo getText devuelve un String para un objeto.
�Qu� m�todo se puede utilizar para borrar de los campos de texto y las etiquetas los strings que contienen? |
---|