Crear Sitio para las Clases
¿Qué sucede si no hemos creado todavía las clases que hemos llamado Welcome,
Diver, Dives, etc.?
Obtendremos un error de compilación si el compilador no puede encontrar alguna clase a la que se llama desde el código.
Para evitar este tipo de error, creamos clases que puedan ser ejemplarizadas. Por ahora, no necesitan hacer nada más
que existir en la memoria.
Crear Sitio para las Clases
Las clases individuales inicializadas con cada tab se cubrirán en las próximas secciones del titurial de
Dive Log. La clases Welcome es la siguiente que cubriremos en más detalle.
Mientras tanto, simplemente, para poder compilar la clase DiveLog, creamos clases
vacías que no hacen nada excepto inicializar espacio. Por ahora, estas clases sólo consisten en las sentencias
package e import, la cabecera de la clase, y los
corchetes de apertura y de cierre. Cada clase se graba en su propio fichero.
| Sigue estos pasos... |
- Abre tu editor de texto.
- Teclea, o copia y pega la siguiente clase, en un nuevo fichero:
package divelog;
/**
* This class creates the content on the
* Welcome tabbed pane in the Dive Log
* application.
* @version 1.0
*/
//import for buttons, labels, and images
import javax.swing.*;
//import for layout manager
import java.awt.*;
public class Welcome extends JPanel
{ //Opens class
}//Closes class
- Graba este fichero como
Welcome.java
en el directorio divelog.
- Crea clases como Welcome pero con los titulos
Diver.java, Dives.java, Statistics.java, WebSite.java, y
Resources.java.
|
Según vayamos trabajando a lo largo del tutorial, iremos abriendo estos ficheros y los rellenaremos cuando se cubra
cada clase.
Crear Objetos GUI Adicionales
Después de que el constructor DiveLog llame a
populateTabbedPane, el flujo del programa retorna al constructor. Luego necesitamos
crear un objeto menú. Como con los tabs, crear y rellenar los objetos para crear el menú se hace dentro de un método.
Usando las
convenciones de nombrado tipicas,
este método se llama buildMenu.
Este método es private para evitar que otros paquetes y clases accedan a él, y es
void porque su único propósito es construir un menú y un ítem de menú llamado
Exit, y para salir limpiamente cuando se seleccione este ítem. El nombre sugiere lo que hace este método, y los
paréntesis están vacíos porque no se requieren parámetros.
El paso 3 muestra cómo crear menús de aplicación usando las clases JMenuBar,
JMenu, y JMenuItem. Ejemplarizamos un nuevo
JMenuBar y lo asignamos a mb. Luego,
ejemplarizamos un objeto JMenu con la variable menu,
y le pasamos en el String "File" para nombrar un nuevo menú, Por último, ejemplarizamos
un objeto ítem de menú, incluyendo el parámetro "Exit" y asignándolo a item.
| Sigue estos pasos... |
- Abre el fichero DiveLog.java.
- Teclea, o copia y pega las siguientes líneas de código después del corchete de cierre del constructor:
// Method header
private void buildMenu()
{
// Instantiates JMenuBar, JMenu,
// and JMenuItem.
JMenuBar mb = new JMenuBar();
JMenu menu = new JMenu("File");
JMenuItem item = new JMenuItem("Exit");
Nota: Para hacer que el menú sea funcional se ha asignado un
addActionListener al JMenuItem.
Los conceptos sobre ActionListener son un poco avanzados y los explicaremos en
más detalle en otra parte del tutorial.
|
Después de llamar a buildMenu desde el constructor DiveLog,
el código completa la construcción del objeto DiveLog. Después el código necesita obtener el
panel de contenido y añadirle el objeto tabbedPane. El marco que hemos creado para la
aplicación es un contenedor, y en este caso es el contenedor del más alto nivel. Todos los contenedores Swing tienen otro
contenedor dentro, que es el panel de contenido, donde situamos los contenedores hijos y los componentes.
| Sigue estos pasos... |
- Abre el fichero DiveLog.java.
- Teclea, o copia y pega las siguientes líneas de código:
//Closes the application from the Exit
//menu item.
item.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});// Ends buildMenu method
Sitúa los objetos menú, juntos usando el método predefinido, add, pasándolos
en la variable de referencia.
- Y el siguiente:
//Adds the item to the menu object
menu.add(item);
//Adds the menu object with item
//onto the menu bar
mb.add(menu);
//Sets the menu bar in the frame
dlframe.setJMenuBar(mb);
- Graba el fichero.
|
Aunque esto podría parecer que lo que hemos hecho antes con los objetos creados los ha añadido al objeto
frame,
no es así. En vez de eso, los objetos se han añadido al contenedor de un frame, el panel de contenido.
Añadir Objetos a un Frame
El panel de contenido maneja el interior de un frame Swing, y los componentes se añaden al panel de contenido del frame en
vez de añadirse directamente al frame. Para hacer esto, simplemente enviamos un mensaje al objeto
dlframe con el operador punto, llamando al método
getContentPane y llamando al método add
para añadir el objeto tabbedPane al panel de contenido. No queremos añadir nada más
al panel de contenido, ya que las clases tabs ejemplarizadas serán añadida durante la creacción de los tabs, que
a su vez serán añadidos al objeto tabbedPane.
El método pack hace que la ventana sea redimensionada para ajustarse al tamaño preferido
de sus subcomponentes, y el método setSize selecciona el tamaño de un frame. Incluso con
el tamaño y el color establecidos, no veremos nada si no seleccionamos el componente JFrame
como visible. Podría parecer anodino, hacer esto, pero algunas veces necesitaremos ocultar componentes. Por ejemplo,
cuando un usuario haya introducido información en un área de texto, ocultamos el componente área, que ya no se necesita más,
y mostramos el texto sobre la pantalla, o proprocionamos otro componente diferente.
Este JFrame para Dive Log debería ser visible todo el tiempo.
Esto se hace llamando a setVisible con true de esta forma:
dlframe.setVisible(true);
Para ocultar un componente, cambiamos true por false.
| Sigue estos pasos... |
- Abre el fichero DiveLog.java.
- Teclea, o copia y pega las siguientes líneas de código antes del corchete } de cierre del constructor:
dlframe.getContentPane().add(tabbedPane);
dlframe.pack();
dlframe.setSize(765, 690);
dlframe.setBackground(Color.white);
dlframe.setVisible(true);
El código se debería parecer a este.
|
El constructor DiveLog está terminado y define cómo se mostrarán y comportarán los objetos de
DiveLog cuando sea inicializado:
- El marco tiene un tamaño, un color de fondo y es visible.
- El panel de contenido contiene un objeto tabbedPane.
- El objeto tabbedPane contiene etiquetas con títulos, strings de ayudas, e inicializa las clases
independientes que contienen los detalles de cada página (por ahora están vacías).
Con las instrucciones sobre cómo se escribe el objeto DiveLog dentro del constructor, sólo
queda un método:
public static void main(String[] args)
{
DiveLog dl = new DiveLog();
}
| ¿Para qué propósito sirve un método main? |
|
|