�Por qu� no hemos creado un ejemplar de la clase Color usando la palabra clave new en el m�todo setBackground como lo hicimos en el m�todo setLayout?
Si un campo o un m�todo es static, no necesitamos un ejemplar de la clase para acceder a �l. En su lugar, s�lo necesitamos nombrar la clase que contiene el campo o el m�todo, seguido por el operador punto y el nombre del campo o m�todo que queremos usar.
�Miembros de la Clase y del Ejemplar
Cuando creamos las variables name y street, creamos variables de ejemplar. Esto significa que para usar estas variables, necesitamos crear un ejemplar de la clase Diver. Si creamos varios ejemplares de la clase Diver, cada ejemplar contendr�a su propia copia de las variables de datos name y street.
Algunas veces no queremos que cada ejemplar tenga su propia copia. Hay veces en las que podr�amos necesitar que los objetos usaran variables de clase, o mejor una variable static por las siguientes razones:

- Para forzar a un objeto a compartir los datos en vez de tener su propia copia
Por ejemplo, un contador podr�a ser compartido por varios ejemplares de la clase. Cada vez que se inicializa un ejemplar de la clase, el contador se incrementa en uno, compartiendo ese dato con cada ejemplar de la clase. Si en su lugar usamos incorrectamente una variable de ejemplar, cada nuevo ejemplar de la clase podr�a resetar la variable contador a cero, contar la inicializaci�n como uno, y siempre tendr�a el contador un uno incorrecto, en lugar de tener las inicializaciones que realmente hay. - Para inicializar datos antes o cuando se crea un objeto.
Por ejemplo, podr�amos querer que un objeto account chequee el balance de una cuenta antes de incializarse. O s�lo podr�amos querer obtener la hora actual antes de asignarla a un objeto. - Para permitir acceso a los datos sin tener que ejemplarizar la clase.
Las clases Color y Math tienen campos y m�todos que podemos usar sin tener que crear un ejemplar de dichas clases.
Hasta ahora el �nico m�todo static que hemos creado ha sido el m�todo main de la clase DiveLog. La raz�n para esto es porque debe ser llamado antes de que exista el objeto, porque es el punto de entrada de la aplicaci�n.
Los m�todos est�ticos tienen unas pocas restricciones:
- S�lo pueden llamar a otros m�todos static
- S�lo deben acceder a datos static
- No pueden referirse a this o super
En la Parte 4 de esta serie, aprenderemos c�mo definir miembros est�ticos. Por ahora, s�lo saber cuando usar miembros est�ticos, y reconocer cuando est�n disponibles leyendo la documentaci�n del API.
Ahora que el panel est� inicializado, el color de fondo seleccionado a blanco, y la clase FlowLayout inicializada como controlador de distribuci�n, s�lo necesitamos a�adir el objeto imaje que inicializamos en el constructor a este panel.
Sigue estos pasos... |
---|
|
�Construir el GridLayout
El siguiente m�todo a definir construye el panel address. Como con el m�todo anterior, creamos un ejemplar de la clase JPanel, luego posteriormente le a�adimos los objetos TextField y Label. Como hay ocho objetos que a�adir a este panel, BorderLayout no es apropiado. En su lugar, usaremos GridLayout.
El controlador de distribuci�n se crea inicializando la clase GridLayout como un par�metro del m�todo setLayout:
setLayout(new GridLayout)
El GridLayout nos permite a�adir objetos dentro de una parrilla rectangular de filas y columnas. Nosotros definimos cu�ntas filas y columnas cuando inicializamos la clase GridLayout. Adem�s podemos a�adir espacios verticales y horizontales:
// Sets the grid to 3 rows and 2 columns setLayout(new GridLayout(3,2)); // Sets the grid to 5 rows, 4 columns, and // vertical and horizontal gaps of 5 setLayout(new GridLayout(5,4,5,5));
Puedes referirte al diagrama para decidir cu�ntas filas y columnas necesitamos, y experimentar con los valores de Vgap y Hgap para decidir cu�nto, si algo, necesitamos separar nuestros objetos
Observa el grid layout para el panel address en el panel Diver Data:

Cuando a�adimos los objetos al panel que usa el controlador grid layout, los objetos se a�aden en el orden en que los codificamos. Los objetos se insertan de izquierda a derecha en la primera fila, luego de izquierda a derecha en la secunda fila, etc. No especificamos una regi�n como hicimos en el controlador BorderLayout. A todos los componentes a�adidos al GridLayout se les da el mismo tama�o. Para los objetos del panel address, esto no es un problema.
La clase GridLayout tiene m�todos accesores set y get si necesitamos manejar din�micanente la distribuci�n. Por simplicaci�n, codificamos el n�mero de filas y columnas para este panel usando el constructor de GridLayout en el m�todo setLayout.
Sigue estos pasos... |
---|
|
Hasta ahora el m�todo buildAddressPanel hace lo siguiente:
- Asigna un ejemplar de la clase JPanel a la variable que configuramos anteriormente con jaddress.
- Selecciona el color de fondo del objeto panel jaddress a blanco, usando el operador punto y el identificador de variable.
- Crea un ejemplar de la clase GridLayout con dos filas y cuatro columnas, y un valor de 20 para Vgap y Hgap para usarlo como controlador de distribuci�n usando el m�todo setLayout.
- A�ade los objetos Label y TextField al panel en el orden en que deben aparecer.
Como el panel Diver Data consta de varios paneles que piden diferentes tipos de informaci�n, proporcionar texto para identificar este �rea particular mejora su uso. Podr�amos simplemente usar un objeto label para etiquetar este �rea del panel, pero un borde agrupa los componentes m�s amigablemente.
Aqu� tenemos un ejemplo de creaci�n de un borde:
JPanel pane = new JPanel(); pane.setBorder( BorderFactory.createLineBorder(Color.black));
Primero se nombra el objeto que va a tener el borde, luego se llama al m�todo setBorder, heredado de JComponent. Le pasamos la clase BorderFactory como par�metro, y llamamos al m�todo que queremos usar, usando el operador punto. Observa que no est�mos creando un ejemplar de la clase BorderFactory. En su lugar, se llama a uno de sus m�todos con el operador punto.
�C�mo podemos obtener los m�todos de BorderFactory sin crear un ejemplar de la clase? Como aprendimos anteriormente, a trav�s de los m�todos static. La clase BorderFactory tiene varios m�todos est�ticos disponibles para usarlos simplemente con el nombre de la clase y el operador punto, luego llamando al m�todo para el borde que queremos crear.
Para crear un borde de l�nea coloreada, como demuesta el c�digo de arriba, el createLineBorder necesita que le pasemos en la clase Color uno de sus campos estaticos para el color elegido.
En el panel Welcome creamos un borde con t�tulo. Hag�moslo de nuevo para el panel address de Diver Data:.
Sigue estos pasos... |
---|
|
Hasta ahora hemos creado el panel, seleccionado el color de fondo, seleccionado el controlador de distribuci�n, a�adido los componentes y dibujado un borde alrededor de ellos. Tenemos lo b�sico del GUI pero sin funcionalidad.
El software sin funcionalidad tiene un uso limitado. Este panel Diver Data est� pensado para hacer algo m�s que mostrar informaci�n. Una vez que el usuario introduce la informaci�n solicitada y pulsa el bot�n Enter o pulsa Return, los datos se muestran en la pantalla. Hasta ahora s�lo hemos configurado los componentes para aceptar datos, ahora debemos configurar los componentes para escuchar eventos, luego manejar esos eventos. El manejo de eventos hace el software GUI funcional.
Para a�adir funcionalidad a los componentes, volvemos a la parte superior de la clase Diver.
Sigue estos pasos... |
---|
El c�digo en negrita se ha a�adido a la declaraci�n de la clase. Podr�a haberse escrito en una s�la l�nea, pero la hemos dividido en dos por razones de la p�gina Web. |
�Qu� significa implements ActionListener? |
---|