New 2 Java: Construir una Aplicación: 3.- Recibir Entradas de Usuario

¿Podemos añadir 22 objetos al panel Diver Data, usando el controlador BorderLayout?

Si, podemos añadir 22 objetos (o más) al panel Diver Data usando el controlador BroderLayout añadiendo paneles con sus propios controladores de distribución a las regiones de BorderLayout. Entonces cada panel tiene objetos adicionales, haciendo posible crear numerosos objetos en este panel. Esta lección describe este detalle.

. Configurar el Panel Diver Data

El panel Diver Pane contiene etiquetas para señalar la información que el usuario debería introducir en los campos de texto y en los check boxes. Además, se incluye una imagen por propósitos estéticos. Estos objetos están organizados para que los datos personales del buceador aparezcan en la parte superior del panel, la información de entrenamiento en la parte derecha, la imagen en el centro y en la izquierda, y la información de emergencia en la parte inferior. Además de listar las variables y la información de objetos, el diagrama también revela un patrón de distribución.

La imagén de arriba muestra cuatro áreas básicas que pueden convertirse fácilmente en regiones de un BorderLayout. Como tenemos que añadir más de cinco objetos, necesitamos crear paneles para contener esos objetos, y luego añdimos esos paneles a las cuatro regiones. La distribución de cada panel varía, dependiendo de los requerimientos de los objetos añadidos.

Al igual que el panel Welcome, el panel Diver Data empieza con un plan, la clase Diver. Usamos la clase contenedor Diver.java que creamos en la Parte 1. Esta clase debería usar ya la palabra clave extends para hacer este panel un JPanel a través de la herencia.

Construir la clase Diver requiere los siguientes pasos:

  1. Declarar las variables necesarias para cada objeto label, text field, check box, e image.
    1. Seleccionar la distribución y el color de fondo.
    2. Inicializar cada objeto declarado anteriormente,
    3. Llamar a los métodos que crean cada panel.
    4. Añadir cada panel construido a las regiones BorderLayout del panel Diver.
  2. Definir los métodos que construyen cada panel.
  3. Crear una clase que maneje los check boxes.

Como ya hemos listado las variables en un diagrama, podemos usar este listado para declarar las variables en la clase Diver.

Sigue estos pasos...
  1. Abre el fichero Diver.java en tu editor de texto.
  2. Añade la siguiente lista de variables justo después del corchete abierto de la declaración de la clase:
         
    // Text fields for user input
         private JTextField name; 
         private JTextField street; 
         private JTextField city; 
         private JTextField statezip;  
     
         // Labels to go with each text field
         private JLabel lname;
         private JLabel lstreet;
         private JLabel lcity;
         private JLabel lstatezip;    
    
         // Check boxes for types of diver training
         private JCheckBox ow;
         private JCheckBox a;
         private JCheckBox res;
         private JCheckBox un;
         private JCheckBox w;
     
         // Text fields for Emergency box
         private JTextField nname;
         private JTextField phone;
         private JTextField rel;
         
         // Text fields for Emergency Contact
         private JLabel lnname;
         private JLabel lphone;
         private JLabel lrel;
         
         // Buttons and image
         private JButton enter; 
         private JButton edit; 
         private JLabel seahorse; 
     
         // Panels to be built and added
         // to the border layout of this
         // panel.
     
         private JPanel images;
         private JPanel jaddress;
         private JPanel emerg;
         private JPanel training;
         // Class to handle functionality of check boxes  
         ItemListener handler = new CheckBoxHandler();
         // ItemListener and CheckBoxHandler classes are 
         // explained later.
    
  3. Graba el fichero.

Observa que todas las variables son declaradas private. Esto protege los datos de ser manipulados desde fuera de las clases. Declarar los datos private y algunos métodos public es una parte del concepto llamado encapsulación.

. Encapsulación y Control de Acceso

En la parte 1 aprendimos un poco sobre Atributos de Acceso: private, public, y protected. El control de acceso juega un gran papel en la encapsulación.

La encapsulación se refire a cómo ocultar y proteger los datos y métodos dentro de un objeto de interfarencias exteriores y de un mal uso. Esta definición de clase es la fundación de encapsulación.

Las clases definen las instrucciones para el tipo de protección de acceso de cada ítem de dato y método que tienen, y qué métodos tienen acceso a qué datos. Además, las clases que trabajan juntas tienen ventaja para ocultar el funcionamiento de los métodos y los objetos. En otras palabras, la encapsulación nos ayuda a construir aplicaciones con objetos predefinidos y objetos que creamos nosotros mismos.

No necesitamos entender el mecanismo de las clases predefinidas que usamos de la misma forma que no necesitamos conocer el funcionamiento de la radio que tenemos instalada en nuestro coche. Una clase del API Java es un componente predefinido como una radio es un componente predefinido.

En el diseño y escritura del código para Dive Log, ya hemos tratado con la encapsulación de dos formas:

  1. Implementación Oculta:
    • Inicializar objetos de clases predefinidas
      consideremos el objeto JFrame. Inicializando o usando la palabra clave extends para crear un objeto JFrame, creamos un marco con botones para minimizar y maximizar, y un área que contiene otros objetos. Probablemente no tendremos conocimiento sobre como se construyen estos objetos. Los detalles de la construcción están ocultos para nosotros. Todo lo que hicimos fue crear un marco usando las palabras clave new o extends con JFrame, llamando al constructor necesariamente para construir un marco de la forma que queremos.
    • Llamando a los métodos predefinidos.
      Cuando llamamos a setBackground y le pasamos la clase Color, no necesitamos saber cómo rellena este método el fondo de un campo. El método setBackground no está definido en una clase que nosotros creamos. En su lugar, setBackground viene de otra clase predefinida. Las instrucciones de este método están ocultas para nosotros. Sólo podemos llamar al método sobre el objeto al que queremos añadirle un color de fondo, y el método hará el trabajo por nosotros.
  2. Control de Acceso
    • Los métodos predefinidos que hemos llamado hasta ahora han sido declarados public, dándonos acceso a ellos.
    • A los métodos que definimos en las clases de Dive Log también se les dió el acceso public.
    • A las variables de datos que declaramos se les dió el acceso private para protegerlas.

Las prácticas de programación seguras aconsejan el control de acceso private para las variables de datos. Para acceder a esos datos, definimos métodos public para obtener (get) y seleccionar (set) los datos. Para evitar que los datos sean manipulados, los declaramos private y no proporcionamos métodos de acceso a esos datos.

El método setBackground es un ejemplo de un método accesor que nos permite set el color de fondo de un objeto.

En la creacción de la clase Diver, llamamos a los métodos predefinidos accesores, aprovechándonos de la encapsulación. Más adelante en este turorial, definiremos otros tipos de metodos de acceso, algunos de los cuales se declaran private para proteger los datos.

. Definir el Constructor

Con las variables declaradas, podemos movernos dentro de la definición del constructor de la clase Diver. Aquí está como el constructor construye el panel Diver Data:

  • Selecciona el controlador BorderLayout
  • Selecciona un fondo blanco.
  • Inicializa los objetos del panel.
  • Llama a los métodos para construir cuatro paneles.
  • Añade los paneles al panel.

Recuerda que el constructor de la clase debe tener el mismo nombre que la clase, y no devuelve ningún valor. Proporciona instrucciones sobre como se construye el objeto en su inicialización, incluyendo otros objetos que necesitan ser inicializados. Además, este constructor necesita el modificador de acceso public para que la clase DiveLog pueda inicializar esta clase cuando se llama al constructor de Diver.

Sigue estos pasos...
  1. Abre el fichero Diver.java en tu editor de texto.
  2. Empieza la definición del constructor de la clase y llama a los métodos para seleccionar el controlador de distribución y el color de fondo a blanco. Sitúa el siguiente código inmediatamente después de las declaracioens de variables:
    public Diver()
     { // Opens Constructor
       // Sets layout for Diver panel
       setLayout(new BorderLayout());
       // Sets background color
       setBackground(Color.white); 
       
       
     } // Closes Constructor
    
  3. Graba el fichero.

El siguiente paso es inicializar cada variable que hemos declarado anteriormente en la parte superior de la clase.

Cómo inicializar estos objetos depende del qué tipo de constructor que llamemos. Recuerda que la palabra clave new indica al compilador que estámos llamando al constructor de la clase que nombramos. La documentación de cada clase define constructores por cada uno de esos objetos.

Construimos un objeto JTextField con el texto Enter Your Name y lo asignamos a la variable name. ¿Qué línea de código es la correcta?
 A  name = JTextField("Enter Your Name");
 B  name = new JTextField(Enter Your Name);
 C  Ninguna

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.