martes, 23 de febrero de 2016

017.- Uso de Propiedades de una Clase (Variables Globales) - Java y NetBeans


En este apartado voy a explicar el uso de Propiedades de la Clase (Variables Globales):

Las propiedades de una clase en java es el equivalente a las variables globales en lenguajes de programación estructurados como el C.

Una propiedad de una clase es una variable que puede ser accedida desde cualquier evento programado. Esta variable se inicializa a un valor cuando se ejecuta el programa y los distintos eventos pueden ir cambiando su valor según se necesite.


En el siguiente ejercicio haremos uso de las propiedades de la clase (variables globales) para entender su funcionamiento:

  1. Crea un nuevo proyecto y llámalo ProyectoEstacionamiento.

  1. Dentro de Source Packages crea un Java Package y llamalo paqueteEstacionamiento.

  1. Dentro de paqueteEstacionamiento crea un JFrame Form y nombralo VentanaEstacionamiento.

  1. El aspecto del proyecto será el siguiente:



  1. La clase principal del proyecto es la clase VentanaEstacionamiento.

  1. Se pretende hacer un pequeño programa que controle los coches que van entrando y van saliendo de un estacionamiento. En todo momento el programa debe decir cuántos coches hay dentro del estacionamiento. Para ello debes crear una ventana como la que sigue:



  1. Esta ventana contiene lo siguiente:

-        Un botón con el texto “Entró un coche” llamado btnEntro.
-        Un botón con el texto “Salió un coche” llamado btnSalio.
-        Un botón con el texto “Reiniciar” llamado btnReiniciar.
-        Una etiqueta con el texto “Coches en el Estacionamiento:”, no interesa el nombre que tenga.
-        Una etiqueta con borde y con el texto “0” llamada etiCoches.


  1. Se pretende que el programa funcione de la siguiente forma:

    1. Cuando el usuario pulse el botón “Entró un coche”, el número de coches del estacionamiento aumenta en 1, mostrándose en la etiqueta etiCoches.
    2. Si el usuario pulsa el botón “Salió un coche”, el número de coches del estacionamiento disminuye en 1, mostrándose en la etiqueta etiCoches.
    3. El botón Reiniciar coloca el número de coches del estacionamiento a 0.


  1. Para poder controlar el número de coches en el estacionamiento, es necesario que nuestra clase principal VentanaEstacionamiento tenga una propiedad (variable global) a la que llamaremos numeroCoches. Esta variable será entera (int).

Esta variable contendrá en todo momento la cantidad de coches que hay actualmente en el estacionamiento. Esta variable podrá ser usada desde cualquier evento.

  1. Para crear una variable global haz clic en el botón “Source” (u “Origen” dependiendo del idioma del NetBeans instalado) para acceder al código:



  1. Luego busca, al comienzo del código una línea que comenzará por

public class


Seguida del nombre de tu clase principal “VentanaEstacionamiento”.

Debajo de dicha línea es donde se programarán las propiedades de la clase (las variables globales):



  1. En dicho lugar declararás la variable numeroCoches de tipo int:



  1. Cuando el programa arranque, será necesario que la variable global coches tenga un valor inicial. O dicho de otra forma, será necesario inicializar la variable. Para inicializar la variable iremos al constructor. Añade lo siguiente al código:



Inicializamos a cero ya que se supone que cuando arranca el programa no hay ningún coche dentro del estacionamiento.


  1. Ahora que ya tenemos declarada e inicializada la variable global numeroCoches, esta puede ser usada sin problemas desde cualquier evento que programemos.

Por ejemplo, empezaremos programando la pulsación del botón “Entró un coche”. Acceda a su evento actionPerformed y programe esto:

        numeroCoches = numeroCoches + 1;
        etiCoches.setText(numeroCoches + "");


Como ves, se suma a la variable numeroCoches uno más y luego se coloca su valor actual en la etiqueta.


  1. Ejecuta el proyecto y prueba el botón varias veces.



  1. Ahora programaremos el botón “Salió un coche” de la siguiente forma:

        if (numeroCoches > 0) {
            numeroCoches = numeroCoches - 1;
            etiCoches.setText(numeroCoches + "");
        }


Como ves, se accede igualmente a la propiedad numeroCoches pero esta vez para restarle una unidad. Luego se muestra el valor actual de numeroCoches en la etiqueta correspondiente.

Se usa un if para controlar que no pueda restarse un coche cuando el estacionamiento esté vacío. (Si hay cero coches en el estacionamiento no se puede restar uno).


  1. Ejecuta el proyecto y prueba los dos botones. Observa como la cantidad de coches del estacionamiento aumenta o disminuye.



Lo realmente interesante de esto es que desde dos eventos distintos (desde dos botones) se puede usar la variable numeroCoches. Esto es así gracias a que ha sido creada como variable global, o dicho de otro modo, ha sido creada como propiedad de la clase VentanaEstacionamiento.


  1. Finalmente se programará el botón Reiniciar. Este botón, al ser pulsado, debe colocar la propiedad numeroCoches a cero. Programa dentro de su actionPerformed lo siguiente:

        numeroCoches = 0;
        etiCoches.setText("0");


Simplemente almacenamos el valor cero en la variable global y actualizamos la etiqueta.


  1. Ejecuta el proyecto y comprueba el funcionamiento de este botón.



CONCLUSIONES:

Las propiedades de la clase, también llamadas variables globales, son variables que pueden ser usadas desde cualquier método o evento del programa. Estas variables mantienen su valor hasta que otro método o evento lo modifique.

Las variables globales se declaran justo después de la línea public class.

La inicialización de estas variables se realizan en el método constructor.



016.- Uso de Paneles de Desplazamiento (JScrollPane) - Java y NetBeans


En este apartado voy a explicar el uso de Paneles de Desplazamiento:

Llamaremos paneles de desplazamiento a paneles que contienen elementos tan grandes que no pueden ser mostrados en su totalidad. Estos paneles contienen entonces dos barras de desplazamiento que permiten visualizar el interior del panel de desplazamiento correctamente.

Por ejemplo, un panel de desplazamiento podría contener una imagen tan grande que no se vea completa en una ventana:

Los paneles de desplazamiento son objetos del tipo JScrollPane.


En el siguiente ejercicio haremos uso de un JScrollPane:

  1. Crea un nuevo proyecto.

  1. Dentro de Source Packages crea un Java Package y llamalo paqueteInicial.

  1. Dentro de paqueteInicial crea un JFrame Form y nombralo VentanaInicial.

  1. Añade en la VentanaInicial un JScrollPane.

  1. Un JScrollPane, por sí mismo, no contiene nada. Es necesario añadir dentro de él el objeto que contendrá. Para nuestro ejemplo añadiremos dentro de él una etiqueta (JLabel).

  1. El formulario debe tener ahora este aspecto:



  1. Si observas el Inspector verás claramente la distribución de los objetos:



         Observa como se tiene un Panel de Desplazamiento (JScrollPane) que contiene una Etiqueta (JLabel).


  1. Aprovechemos el Inspector para cambiar el nombre a cada objeto. Al JScrollPane le llamaremos scpImagen y a la Etiqueta etiImagen.



  1. Elimina el texto contenido en la etiqueta etiImagen. Sólo tienes que borrar el contenido de la propiedad text.

  1. Necesitarás una imagen lo bastante grande que no quepa en pantalla en su tamaño normal, descarga una desde Internet.

  1. Luego introduciremos la imagen conseguida anteriormente dentro de la etiqueta, a través de la propiedad icon. La imagen la introduciremos desde fichero eligiendo la ruta donde la guardaste.

  1. Esta imagen es tan grande que no se podrá ver entera dentro del panel de desplazamiento. Ejecuta el programa y observarás el uso de las barras de desplazamiento dentro del panel.



  1. Puedes mejorar el programa si agrandas el panel de desplazamiento de forma que ocupe todo el formulario:



De esta forma, cuando ejecutes el programa, al agrandar la ventana, se agrandará el panel de desplazamiento, viéndose mejor la imagen contenida.

  1. Ejecuta el proyecto y compruébalo.



Desarrollaremos otro proyecto haciendo uso de los JScrollPane:

Los JScrollPane no solo están diseñados para contener imágenes. Pueden contener cualquier otro elemento.

  1. Crea un nuevo proyecto.

  1. Dentro de Source Packages crea un Java Package y llamalo paqueteInicial.

  1. Dentro de paqueteInicial crea un JFrame Form y nombralo VentanaInicial

  1. Añade a la VentanaInicial una etiqueta con el texto “Ejemplo 2 de JScrollPane” y un JScrollPane de forma que esté asociado a los límites de la ventana. Observa la imagen:



  1. Ahora añade dentro del JScrollPane un panel normal (JPanel). En la ventana no notarás ninguna diferencia, pero en el Inspector debería aparecer esto:



  1. Como ves, el JScrollPane contiene a un objeto JPanel.

  1. Aprovechemos para cambiar el nombre a ambos objetos. Al JScrollPane lo llamaremos scpDatos y al JPanel lo llamaremos panelDatos.



  1. Los JPanel son objetos contenedores. Es decir, pueden contener otros objetos como por ejemplo botones, etiquetas, cuadros de texto, etc.

Además, los JPanel pueden ser diseñados independientemente de la ventana. Haz doble clic sobre el panelDatos en el Inspector y observa lo que ocurre.


  1. En la pantalla aparecerá únicamente el JPanel, para que puede ser diseñado aparte de la ventana completa:



  1. Para distinguirlo de lo que es en sí la ventanaInicial, haremos las siguientes cosas en el panel (después de hacer doble clic en él):

-        Cambia el color de fondo y asígnale un color azul claro (usa su propiedad background).
-        Añade en él una etiqueta con el texto “Panel de Información Mensual:”.
-        Añade varias etiquetas y cuadros de textos correspondientes a los meses del año.
-        Agranda el panel.

El panel debería quedar así. Toma como referencia esta imagen:



Es muy interesante que observes el Inspector. En él podrás observar la distribución de los objetos en la ventana. Podrás ver como el JFrame contiene un JScrollPane (scpDatos) que a su vez contiene un JPanel (panelDatos) que a su vez contiene una serie de etiquetas y cuadros de textos a los que aún no les hemos asignado un nombre:



  1. Haz doble clic sobre el JFrame (en el Inspector) para poder ver globalmente la ventana. En la pantalla debería aparecer esto:



Como ves, el JPanel contenido en el JScrollPane es más grande que él, por lo que no se podrá visualizar completamente. Será necesario usar las barras de desplazamiento del JScrollPane.

  1. Ejecuta el proyecto para entender esto último.



CONCLUSIÓN:

Los objetos JScrollPane son paneles de desplazamiento. Estos paneles pueden contener objetos mayores que el propio panel de desplazamiento. Cuando esto sucede, el panel muestra barras de desplazamiento para poder visualizar todo el contenido del panel.

Los JScrollPane son ideales para mostrar imágenes, paneles y otros elementos cuyo tamaño pueda ser mayor que la propia ventana.



015.- Uso de Cuadros de Diálogo Abrir y Guardar (JFileChooser) - Java y NetBeans

  
Explico en esta oportunidad el uso de Cuadros de diálogo Abrir y Guardar:

Las opciones Abrir y Guardar son opciones muy comunes en las aplicaciones. Estas opciones permiten buscar en el árbol de carpetas del sistema un fichero en concreto y abrirlo, o bien guardar una información dentro de un fichero en alguna carpeta.

Java proporciona una clase llamada JFileChooser (elegir fichero) que permite mostrar la ventana típica de Abrir o Guardar:

Ventana Abrir:



La ventana de Guardar es la misma, solo que muestra en su barra de título la palabra Guardar:



El objeto JFileChooser nos facilita solamente la labor de elegir el archivo, pero no realiza la apertura o la acción de guardar la información en él. Esto tendrá que ser programado.


En el siguiente ejercicio haremos uso de JFileChooser:

  1. Crea un nuevo proyecto.

  1. Dentro de Source Packages crea un Java Package y llamalo paqueteInicial.

  1. Dentro de paqueteInicial crea un JFrame Form y nombralo VentanaInicial.

  1. En la VentanaInicial agrega los siguientes elementos:

    1. Una barra de menús. Llámala barraMenus.
    2. Dentro de ella agregue un menú “Archivo” llamada mnuArchivo.
    3. Dentro del menú “Archivo”, introduce los siguientes elementos:
-        Una opción “Abrir”, nómbralo mnuItemAbrir.
-        Un separador (no es necesario cambiarle el nombre).
-        Una opción “Salir”, llámalo mnuItemSalir.


  1. Al ejecutar el proyecto el menú se verá así:



  1. Si observas el Inspector, tendrá un aspecto parecido al siguiente:



  1. Para que al pulsar la opción “Abrir” de nuestro programa aparezca el diálogo de apertura de ficheros, es necesario añadir a nuestro programa un objeto del tipo JFileChooser.

Los objetos JFileChooser se añadirán el la zona de “Otros Componentes” del inspector.


  1. Haz clic derecho sobre la zona de “otros componentes” y activa la opción Agregar Desde Paleta – Swing Windows – File Chooser:



  1. Aparecerá entonces un objeto JFileChooser dentro de Otros Componentes. Aprovecha para cambiarle el nombre a este objeto. Su nombre será elegirArchivo.

El inspector quedará así:



  1. Una vez hecho esto, ya podemos programar la opción Abrir del menú. Codifiquemos en el evento actionPerformed de la opción “Abrir” lo siguiente:

int botonElegido;

botonElegido = elegirArchivo.showOpenDialog(this);

if (botonElegido == JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(null, elegirArchivo.getSelectedFile().toString());
} else if (botonElegido == JFileChooser.CANCEL_OPTION) {
JOptionPane.showMessageDialog(null, "Ha elegido la opción Cancelar.");
}


  1. Ejecuta el proyecto y prueba la opción “Abrir” del menú. Prueba a elegir algún fichero y abrirlo. Prueba a cancelar la ventana de apertura. Etc..

  1. Explicación del código anterior:

int botonElegido;

botonElegido = elegirArchivo.showOpenDialog(this);

-        Estas dos líneas crean una variable entera botonElegido y a continuación hacen que se muestre la ventana “Abrir Fichero”. Observa que para conseguirlo hay que usar el método showOpenDialog del objeto elegirArchivo. Este método lleva como parámetro la ventana actual (this).

-        El método showOpenDialog no solamente muestra la ventana “Abrir Fichero” sino que también devuelve un valor entero según el botón pulsado por el usuario en esta ventana. Esto es: botón “Abrir” o botón “Calcelar”.

-        Se pueden usar dos if para controlar lo que sucede si el usuario pulsa el botón “Abrir” o el botón “Calcelar” de la ventana “Abrir Fichero”:

if (botonElegido == JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(null, elegirArchivo.getSelectedFile().toString());
} else if (botonElegido == JFileChooser.CANCEL_OPTION) {
JOptionPane.showMessageDialog(null, "Ha elegido la opción Cancelar.");
}


-        En el primer if se compara la variable botonElegido con la constante JFileChooser.APPROVE_OPTION, para saber si el usuario pulsó “Abrir”.

-        En el segundo if se compara la variable botonElegido con la constante JFileChooser.CANCEL_OPTION, para saber si el usuario pulsó “Calcelar”.

-        En el caso de que el usuario pulsara “Abrir”, el programa usa el método getSelectedFile del objeto elegirArchivo para recoger la ruta del archivo elegido. Esta ruta debe ser convertida a cadena con el método toString.

-        El programa aprovecha esto para mostrar dicha ruta en pantalla gracias al típico JOptionPane.

-        En el caso de que el usuario pulsara el botón “Cancelar” el programa muestra un mensaje indicándolo.


  1. Hay que dejar claro que el cuadro de diálogo “Abrir” realmente no abre ningún archivo, sino que devuelve la ruta del archivo elegido usando el código:

elegirArchivo.getSelectedFile().toString()

Quedando a criterio del programador el trabajar con el archivo elegido de la forma que necesite.



CONCLUSIÓN:

Los objetos JFileChooser permiten mostrar el cuadro de diálogo “Abrir Archivo” o “Guardar Archivo”.

Estos objetos no abren ni guardan archivos, solo permiten al usuario elegir el archivo a abrir o guardar.

El JFileChooser devuelve la ruta del archivo elegido, y luego el programador trabajará con dicho archivo según la necesidad de su proyecto.