SlideShare una empresa de Scribd logo
1 de 58
Descargar para leer sin conexión
Interfaces Gráficas
CLI Y GUI
CLI Y GUI
CLI Y GUI
CLI Y GUI
Aplicación en JAVA con Interfaz
GUI
Aplicación en JAVA con Interfaz GUI
Aplicación en JAVA con Interfaz GUI
Creación de la clase denominada
VentanaFrame
Creación de la clase denominada VentanaFrame
En primer lugar, crearemos una clase que sirva como marco de trabajo, o ventana para alojar los demás
componentes como botones o cajas de texto. Estas clases que alojan componentes (o marcos de trabajo)
en su mayoría son instancias de la clase JFrame, o subclases de JFrame. JFrame es una clase de JAVA
que proporciona los atributos y comportamientos básicos de una ventana: botones para maximizar o
minimizar la ventana, un botón X para cerrar la ventana, un título en la barra superior, etc.
Creación de la clase denominada VentanaFrame
Por esta razón, necesitamos heredar o extender los atributos de JFrame, para poder crear una ventana
que aloje los demás componentes (botones, cajas de texto, etc). Para nuestro ejemplo, seguiremos
manteniendo la arquitectura mínima de programación orientada a objetos mediante dos clases: una
subclase de JFrame que nos ayude a alojar componentes, y una clase que posee el método main() que
cree y muestre la ventana que aloja los componentes. El diagrama de clases de la situación que vamos a
desarrollar se ilustra en la figura 1.
Creación de la clase denominada VentanaFrame
Figura 1. Diagrama de Clases de una Aplicación Sencilla con interface GUI
Creación de la clase denominada VentanaFrame
Como puede ver en la figura 1, el diagrama de clases es un poco más complejo que los diagramas
que hemos venido trabajando hasta el momento, pues utiliza otros tipos de relaciones entre clases
como la composición (donde la clase VentanaFrame declara clases privadas internas para manejar
los eventos de los botones y de las cajas de texto, ManejadorBoton y ManejadorCampoTexto
respectivamente, y estas clases privadas a su vez implementan interfaces de JAVA como la
interfaz ActionListener), o la relación de agregación (donde la clase VentanaFrame utiliza las
clases JLabel, JTextField, JPasswordField, y JButton para construir objetos de este tipo en su
interior y darle forma a la interfaz gráfica).
Creación de la clase denominada VentanaFrame
Por tanto, solamente nos concentraremos en la relación que conocemos, y es la de uso entre la clase que
posee el método main() denominada “PruebaVentana” y la clase que alojará los componentes de la
interfaz gráfica denominada “VentanaFrame”. Por esta razón decíamos en líneas anteriores que solamente
tocaremos ciertos aspectos de las interfaces gráficas, pues es una gran cantidad de conceptos y
elementos que no podríamos cubrir en estas líneas. Quizás observando el código de la clase
“VentanaFrame” pueda apreciar las relaciones de composición y agregación que se ilustran en la figura 1.
Código Fuente de la clase
“VentanaFrame”
Código Fuente de la clase “VentanaFrame”
En la figura 2 observamos el código fuente de
la clase “VentanaFrame” que servirá como
contenedor de componentes gráficos.
Figura 2. Código Fuente de la clase VentanaFrame
Código Fuente de la clase “VentanaFrame”
Como puede observar en la figura 2, es una gran cantidad de código, y hemos procurado escribir
comentarios en cada línea de código para explicar lo que hace cada línea. Recordemos que los
comentarios de una sola línea en JAVA se representan con la doble barra diagonal //. Los
comentarios no serán interpretados por el compilador, lo que permite documentar y explicar las líneas
de código cuando sea necesario. Además, hemos pintado ciertas secciones del código, para
identificar partes importantes del mismo.
Analicemos brevemente las secciones de código de la figura 2.
Código Fuente de la clase “VentanaFrame”
La primera parte hace referencia a las bibliotecas que serán importadas por la clase “VentanaFrame”, de
manera que pueda integrar componentes gráficos (botones, cajas de texto, labels, etc) y responder a
eventos. En la figura 3 se observa únicamente la sección de imports de la clase “VentanaFrame”
Figura 3 . Sección de imports de la clase “VentanaFrame”
Código Fuente de la clase “VentanaFrame”
Código Fuente de la clase “VentanaFrame”
Figura 4. Declaración de la clase VentanaFrame y sus atributos privados
Código Fuente de la clase “VentanaFrame”
Como se puede observar en la figura 4, la clase VentanaFrame extiende o hereda de JFrame sus atributos
públicos. Como se dijo en líneas anteriores, JFrame es una clase que posee todos los comportamientos de
una ventana, y por tal razón queremos heredar todos esos comportamientos en la clase VentanaFrame.
Además, observe cómo se construyen objetos de la clase JLabel para etiquetas (objeto denominado etiqueta
de color verde), de la clase JTextField (objeto denominado campoTexto de color aguamarina) para campos de
texto, de la clase JPasswordField (objeto denominado campoContrasenia de color rosa) para campos de
contraseña que ocultan datos, y de la clase JButton (campo denominado botonSimple de color azul) para
botones. Más adelante veremos cómo se inicializan estos objetos y se agregan al marco de trabajo o ventana
JFrame.
Código Fuente de la clase “VentanaFrame”
A continuación encontramos el constructor de la clase VentanaFrame() cuya función será inicializar los
objetos de la clase JLabel, JTextField, JPasswordField, y JButton, y agregarlos a la ventana, y la
instrucción que determina cómo será el diseño o layout de los componentes dentro de la ventana. En
la figura 5 encontramos la sección de declaración del constructor de la clase VentanaFrame
Figura 5. Declaración del constructor y el flujo de diseño de la ventana
Código Fuente de la clase “VentanaFrame”
Como se puede observar en la figura 5, encontramos la instrucción que declara el constructor (un método
que tiene el mismo nombre que la clase, denominado VentanaFrame() ), y una instrucción
cuya finalidad es invocar al constructor de la clase padre -es decir, el constructor de JFrame-, para poder
asignar un título a la ventana. Luego encontramos la instrucción setLayout( new FlowLayout() ); que
le indica a JAVA la manera en la que los componentes se ubicarán dentro de la ventana.
A continuación, viene una instrucción bastante interesante, pues nos permitirá usar imágenes para
incrustarlas en nuestra ventana. Específicamente la imagen se incrustará en el label o etiqueta, que a su
vez será renderizado por la ventana. En la figura 6 se observa esta instrucción
Código Fuente de la clase “VentanaFrame”
Figura 6. Instrucción para incrustar imágenes en la interfaz gráfica
Observe con atención el código de la figura 6. Es importante que la imagen que usted quiera insertar
dentro de su interfaz gráfica se encuentre dentro de la carpeta bin, y posea el mismo nombre y formato
que solicitan las líneas de código. Para este caso particular, necesitamos tener una imagen con extensión
.gif denominada “insecto1” para que podamos mostrarla en pantalla. Si no contamos con una imagen
denominada “insecto1.gif” dentro de la carpeta bin, no podremos visualizar ninguna imagen en nuestra
interfaz gráfica.
Código Fuente de la clase “VentanaFrame”
Por simplicidad hemos descargado una imagen .gif de la siguiente ruta:
http://www.gifde.com/js_pics_aux/descarga.php?descarga=si&c=gif/otros/naturaleza/animales/insectos/mariqu
itas/&f=mariquita-031.gif , y la hemos guardado dentro de la carpeta bin con el nombre de insecto1.gif -no
olvide en número 1-, para poderla utilizar en nuestra interfaz gráfica. Realmente puede descargar la imagen
que usted desee, simplemente hemos proporcionado el enlace de donde descargamos nuestra imagen para
que usted pueda replicar exactamente la misma situación que estamos modelando. La imagen que hemos
usado se ilustra en la figura 7.
Figura 7. Imagen .gif utilizada
Código Fuente de la clase “VentanaFrame”
Recordemos que una imagen .gif es una imagen ligera con una pequeña animación o movimiento. Hemos
escogido una imagen pequeña (aproximadamente de 100x100 pixeles), de manera que se ajuste
perfectamente a la ventana que vamos a construir que es aproximadamente de 275x210 pixeles. Sin
embargo, puede elegir la imagen que desee. Lo importante es que la guarde en la carpeta .bin, y para este
caso particular, debe nombrarla como insecto1.gif.
Luego encontramos el código referente a la inicialización del objeto JLabel denominado “etiqueta”, y su
respectiva configuración para que posea una imagen, y que la imagen del label se ubique a la izquierda.
En la figura 2 pintamos dicho código de color verde, y lo replicamos nuevamente en la figura 8.
Código Fuente de la clase “VentanaFrame”
Figura 8. Código para inicializar el objeto JLabel denominado “etiqueta”
Observe el código de la figura 8. Básicamente se inicializa el objeto etiqueta con la instrucción “etiqueta =
new JLabel( "Etiqueta con texto e icono", insecto, SwingConstants.LEFT );”, que le asigna a la
etiqueta el texto que se encuentra entre comillas, le asigna el objeto de tipo Icon denominado “insecto” que se
definió en la figura 6, y además utilizó una constante de la librería SWING para indicar que la imagen estará a
la izquierda (LEFT). Observe la instrucción “etiqueta.setToolTipText( "Esta es una etiqueta" );”,
que le indica a JAVA que la etiqueta tendrá un tooltip.
Código Fuente de la clase “VentanaFrame”
Un tooltip es una funcionalidad que se activa cuando se coloca el puntero del mouse encima de la etiqueta, y
lo que hará será mostrar el mensaje que se haya configurado para el tooltip, que para este caso es el mensaje
“Esta es una etiqueta”. Finalmente observe la instrucción extremadamente importante en interfaces gráficas
denominada “add”. En la línea “add( etiqueta );”, les estamos diciendo a JAVA que queremos “agregar” o
“añadir” el objeto denominado “etiqueta” a la VentanaJFrame. Decimos que esta instrucción es
extremadamente importante porque nosotros podemos crear todos los componentes gráficos que queramos,
pero si no los añadimos a la ventana, visualmente es como si nunca se hubieran creado porque no los
veríamos.
Código Fuente de la clase “VentanaFrame”
Luego encontramos el código referente a la inicialización del objeto JTextField denominado “campoTexto”, y su
respectiva configuración para que muestre un texto por defecto. En la figura 2 pintamos dicho código de color
aguamarina, y lo replicamos nuevamente en la figura 9
Figura 9. Código para inicializar el objeto JTextField denominado
“campoTexto”
Básicamente en la figura 9 encontramos el código para inicializar el objeto de tipo JTextField con un texto por
defecto, y volvemos a observar la instrucción extremadamente importante denominada “add”. De esa forma
estamos “añadiendo” o “agregando” el objeto de tipo JTextField denominado campoTexto a la
“VentanaJFrame”
Código Fuente de la clase “VentanaFrame”
Luego encontramos el código referente a la inicialización del objeto JPasswordField denominado
“campoContrasenia”, y su respectiva configuración para que muestre un texto por defecto. En la figura 2
pintamos dicho código de color rosa, y lo replicamos nuevamente en la figura 10
Figura 10. Código para inicializar el objeto JPasswordField denominado
“campoContrasenia”
Básicamente en la figura 10 encontramos el código para inicializar el objeto de tipo JPasswordField con un
texto por defecto, y volvemos a observar la instrucción extremadamente importante denominada “add”. De
esa forma estamos “añadiendo” o “agregando” el objeto de tipo JPasswordField denominado
campoContrasenia a la “VentanaJFrame”.
Código Fuente de la clase “VentanaFrame”
Luego encontramos el código referente a la inicialización del objeto JButton denominado “botonSimple”, y su
respectiva configuración para que muestre un texto por defecto en el botón. En la figura 2 pintamos dicho
código de color azul, y lo replicamos nuevamente en la figura 11
Figura 11. Código para inicializar el objeto JButton denominado
“botonSimple”
Básicamente en la figura 11 encontramos el código para inicializar el objeto de tipo JButton con un texto por
defecto, y volvemos a observar la instrucción extremadamente importante denominada “add”. De esa forma
estamos “añadiendo” o “agregando” el objeto de tipo JButton denominado botonSimple a la
“VentanaJFrame”.
Código Fuente de la clase “VentanaFrame”
Luego encontramos la sección referente al registro de los manejadores de eventos. Como se dijo en líneas
anteriores, un manejador de eventos es una porción de código que se ejecutará cuando un evento ocurra
sobre algún componente como un botón o una caja de texto. En la figura 2 pintamos dicho código de color
blanco, y lo replicamos nuevamente en la figura 12.
Figura 12. Registro de manejadores de eventos para los componentes
Código Fuente de la clase “VentanaFrame”
Si observa con atención el código de la figura 12 encontrará que se están creando objetos de un par de
clases denominadas “ManejadorCampoTexto”, y “ManejadorBoton”. Más adelante veremos que este par
de clases son clases privadas que se encuentran dentro del mismo archivo “VentanaFrame.java”, y su
función es definir la porción de código que se ejecutará cuando ocurra un evento sobre el componente
registrado.
La instrucción “ManejadorCampoTexto manejadorTxt = new ManejadorCampoTexto();” construirá un
objeto de la clase ManejadorCampoTexto denominado manejadorTxt. Luego la instrucción
“campoTexto.addActionListener( manejadorTxt );” asocia el objeto “campoTexto” con un
actionListener que recibe como argumento el objeto “manejadorTxt”. En otras palabras, estamos haciendo
que el componente “campoTexto” reaccione a un evento, o esté escuchando eventos mediante la
instrucción “addActionListener”, y cuando éstos ocurran, se ejecutará el código configurado en el objeto
“manejadorTxt”.
Código Fuente de la clase “VentanaFrame”
El mismo razonamiento podemos aplicar para el componente denominado botonSimple. La instrucción
“ManejadorBoton manejadorBtn = new ManejadorBoton();” construirá un objeto de la clase
ManejadorBoton denominado manejadorBtn. Luego la instrucción “botonSimple.addActionListener(
manejadorBtn );” asocia el objeto “botonSimple” con un actionListener que recibe como argumento el
objeto “manejadorBtn”. En otras palabras, estamos haciendo que el componente “botonSimple” reaccione a
un evento, o esté escuchando eventos mediante la instrucción “addActionListener”, y cuando éstos ocurran,
se ejecutará el código configurado en el objeto “manejadorBtn”.
Código Fuente de la clase “VentanaFrame”
Luego encontramos la clase interna que posee
el código que se ejecutará si ocurre un evento
sobre los objetos de campos de texto. En la
figura 2 pintamos dicho código de color amarillo,
y lo replicamos nuevamente en la figura 13.
Figura 13. Clase interna para el manejo de los eventos en las cajas de
texto
Código Fuente de la clase “VentanaFrame”
Observe con atención el código de la figura 13. Básicamente esta clase privada implementa la
interfaz de JAVA ActionListener, y proporciona un cuerpo para el método
actionPerformed(ActionEvent evento) que recibe como argumento un objeto del tipo ActionEvent. En
otras palabras, el método actionPerformed() de la clase privada ManejadorCampoTexto está
pendiente de la ocurrencia de eventos, y cuando estos se generen, el evento es pasado como
argumento de tipo ActionEvent al método actionPerformed() para ser procesado.
Código Fuente de la clase “VentanaFrame”
Por dentro del método actionPerformed() se procesa la fuente del evento con la instrucción “if (
evento.getSource() == campoTexto )” que está validando si la fuente del evento fue el objeto
denominado “campoTexto”. En caso afirmativo se ejecuta la instrucción “cadena = String.format(
"campoTexto: %s", evento.getActionCommand() );” , que básicamente asigna a la variable de tipo
String denominada “cadena” la información que luego se mostrará en pantalla mediante la instrucción
“JOptionPane.showMessageDialog( null, cadena );” . La instrucción
JOptionPane.showMessageDialog es una instrucción de JAVA para mostrar en pantalla mensajes en
forma de ventana.
Código Fuente de la clase “VentanaFrame”
Lo que significa que el manejador de eventos mostrará en una ventana un mensaje de acuerdo con la
ocurrencia de los eventos. En este caso, se nos mostrará en una ventana el texto que nosotros hayamos
escrito en la caja de texto después de presionar “Enter”. Observe que el método actionPerformed() tiene
dos validaciones dentro del if, porque en nuestra ventana tenemos dos campos de texto, uno de tipo
JTextField y otro de tipo JPasswordField, y cuando escribamos algo en estos campos de texto y
presionemos “enter” veremos una ventana con la información que hayamos digitado en los campos de
texto.
Código Fuente de la clase “VentanaFrame”
Luego encontramos la clase interna que posee el código que se ejecutará si ocurre un evento sobre
los objetos de botón. En la figura 2 pintamos dicho código de color purpura, y lo replicamos
nuevamente en la figura 14.
Figura 14. Clase interna para el manejo de los eventos en los botones
Código Fuente de la clase “VentanaFrame”
Observe con atención el código de la figura 14. Básicamente esta clase privada implementa la interfaz de
JAVA ActionListener, y proporciona un cuerpo para el método actionPerformed(ActionEvent evento) que recibe
como argumento un objeto del tipo ActionEvent. En otras palabras, el método actionPerformed() de la clase
privada ManejadorBoton está pendiente de la ocurrencia de eventos, y cuando estos se generen, el evento es
pasado como argumento de tipo ActionEvent al método actionPerformed() para ser procesado. Por dentro del
método actionPerformed() se ejecuta la instrucción “ JOptionPane.showMessageDialog(
VentanaFrame.this, String.format("Usted oprimio: %s", evento.getActionCommand() ) );” , que
básicamente muestra en pantalla el mensaje de que se oprimió el botón, y la fuente del botón con
evento.getActionCommand().
Código Fuente de la clase “VentanaFrame”
La instrucción JOptionPane.showMessageDialog es una instrucción de JAVA para mostrar en pantalla
mensajes en forma de ventana. Lo que significa que el manejador de eventos mostrará en una ventana
un mensaje de acuerdo con la ocurrencia de los eventos. En este caso, se nos mostrará en una ventana
el nombre del botón que se haya presionado cuando se haya hecho click sobre este.
En síntesis, los manejadores de eventos son clases privadas con el código que se debe ejecutar en caso
de ocurrir un evento.
Por último, nos falta analizar el código de la clase “PruebaVentana”, que es la clase que posee el método
main() y básicamente construye un objeto de la clase “VentanaFrame” para visualizar sus componentes.
Código Fuente de la clase
“PruebaVentana”
Código Fuente de la clase “PruebaVentana”
En la figura 15 observamos el código fuente de la clase “PruebaVentana” que instanciará un objeto de la
clase “VentanaFrame” para visualizar los componentes allí definidos.
Figura 15. Código Fuente de la clase PruebaVentana
Código Fuente de la clase “PruebaVentana”
Como puede observar en la figura 15, el código de la clase “PruebaVentana” es más corto que el de la
clase “VentanaFrame”. En las primeras líneas encontramos una instrucción para instanciar un objeto de
la clase “VentanaFrame” denominado marcoVentana. Luego este objeto marcoVentana establece las
operaciones para poder cerrar la ventana con el botón X, y de allí que sea necesario importar JFrame de
las librerías, pues esa operación de cerrar la ventana proviene de JFrame (la instrucción
JFrame.EXIT_ON_CLOSE ). Luego el objeto marcoVentana establece el tamaño de la ventana que se
creará (la instrucción marcoVentana.setSize( 275, 210 ); ) y finalmente establecerá que la ventana sea
visible con la instrucción “marcoVentana.setVisible( true ); ” . Después de haber analizado el código,
vuelva y revise el diagrama de clases de la figura 1. Es posible que pueda comprender un poco más la
organización y relación de todos los componentes involucrados en la solución después de la explicación
anterior.
Compilación y Ejecución de
código JAVA desde CMD
Compilación y Ejecución de código JAVA desde CMD
Recordemos que cada una de las clases que escribimos deben estar en su propio archivo .java, y que
estos archivos deben ser guardados dentro de la carpeta bin del JDK -Véase “Manual: Preparar el Entorno
de Desarrollo”-. Por tanto, el archivo PruebaVentana.java debe estar dentro de la carpeta bin, así como la
clase “VentanaFrame”. De igual manera, en el interior de la carpeta bin también deberá estar la imagen .gif
denominada “insecto1.gif” -no olvidar el número 1- para que todo funcione adecuadamente. En otras
palabras, el código de la figura 15 de la clase “PruebaVentana” lo transportamos a su respectivo archivo
.java, así como el código de la figura 2 de la clase “VentanaFrame”, de manera que ambos archivos, y la
imagen .gif, se encuentren dentro de la carpeta bin del JDK.
Compilación y Ejecución de código JAVA desde CMD
En la figura 16 se observa cómo el archivo PruebaVentana.java se encuentra dentro de la carpeta bin
del JDK.
Figura 16. Archivo PruebaVentana.java dentro de la carpeta bin
Compilación y Ejecución de código JAVA desde CMD
En la figura 17 se observa cómo el archivo VentanaFrame.java se encuentra dentro de la carpeta bin
del JDK.
Figura 17. Archivo VentanaFrame.java dentro de la carpeta bin
Compilación y Ejecución de código JAVA desde CMD
Ya con nuestros archivos listos dentro de la carpeta bin, lo que resta es abrir el CMD desde la carpeta bin
como se explicó en la lectura denominada “Manual: Preparar el Entorno de Desarrollo”, como se ilustra en la
figura 18. (Recuerde que teniendo abierta la carpeta bin desde el explorador de archivos, debemos ubicar la
barra de direcciones del explorador de archivos y debemos reemplazar el contenido de la barra de
direcciones de la carpeta bin, por la palabra “cmd”, y a continuación pulsar la tecla “Enter” para que podamos
abrir la herramienta CMD desde allí).
Figura 18. Herramienta cmd desde la ruta de la carpeta bin
Compilación y Ejecución de código JAVA desde CMD
En la herramienta CMD invocaremos los comandos de compilación de código JAVA, y ejecución de
código JAVA para visualizar el resultado final, como se ilustra en la figura 19.
Figura 19. Compilación y Ejecución de la clase PruebaVentana
Compilación y Ejecución de código JAVA desde CMD
Como se puede observar en la figura 19, aparecerá una ventana (el objeto marcoVentana instanciado de la
clase “VentanaFrame”) y en su interior encontramos los distintos objetos que fuimos agregando (add) a la
ventana. Vemos el label con una imagen .gif. Vemos un par de cajas de texto para digitar información (una de
tipo password y otra caja normal) y un botón. Lo interesante es que estos tres objetos tienen asociados
manejadores de eventos, por lo que algo sucederá si escribimos en las cajas de texto y luego presionamos la
tecla “enter”, o si pulsamos el botón con un click.
En la figura 20 se observa el resultado de digitar información en la caja de texto, y a continuación presionar la
tecla “Enter”. Veremos que se muestra una ventana -gracias a las instrucciones
JOptionPane.showMessageDialog-, con la información “campoTexto: Me llamo Elfar”. Eso quiere decir que el
manejador de eventos asociado al objeto “campoTexto” está reaccionando adecuadamente, y muestra en
pantalla el texto que se haya escrito en la caja gracias a la instrucción JOptionPane.
Compilación y Ejecución de código JAVA desde CMD
Figura 20. Mensaje de salida cuando se escribe algo en la caja de texto y
se presiona “Enter”
Compilación y Ejecución de código JAVA desde CMD
En la figura 21 se observa el resultado de digitar información en la caja de texto de tipo password -la caja
que oculta la información con unos puntos-. , y a continuación presionar la tecla “Enter”. Veremos que se
muestra una ventana -gracias a las instrucciones JOptionPane.showMessageDialog-, con la información
“campoContrasenia: Me gusta JAVA”. Eso quiere decir que el manejador de eventos asociado al objeto
“campoContrasenia” está reaccionando adecuadamente, y muestra en pantalla el texto que se haya escrito
en la caja de tipo password, gracias a la instrucción JOptionPane.
Compilación y Ejecución de código JAVA desde CMD
Figura 21. Mensaje de salida cuando se escribe algo en la caja de
password y se presiona “Enter”
Compilación y Ejecución de código JAVA desde CMD
Observe que las cajas de texto reaccionan al evento “Enter”, pues cuando se digita información en las
cajas de texto, es usual presionar enter para pasar al siguiente campo. Por tanto, estamos
“escuchando” los eventos que puedan ocurrir en las cajas de texto gracias a los manejadores de
eventos y los eventListener.
En la figura 22 se observa el resultado de presionar el botón. Nótese además que la imagen está
girando, pues hemos incrustado una imagen .gif que posee algo de animación.
Compilación y Ejecución de código JAVA desde CMD
Figura 22. Mensaje de salida cuando se pulsa el botón
Compilación y Ejecución de código JAVA desde CMD
Observe la figura 22. Observamos un mensaje que dice: “Usted oprimio: Un boton simple", lo que indica
que el manejador de eventos para el botón está funcionando adecuadamente, y muestra en pantalla el
mensaje correspondiente, gracias a la instrucción JOptionPane.
En conclusión, podemos utilizar interfaces gráficas en nuestras aplicaciones, pero eso implica un mayor
dominio sobre los conceptos fundamentales de la programación orientada a objetos, sobre los diagramas
UML, y sobre el funcionamiento sobre los eventos. Lo importante es entender que es necesario importar de
la biblioteca pública de JAVA los componentes y las funcionalidades que harán posible que tengamos una
interfaz gráfica funcional.
GRACIAS

Más contenido relacionado

Similar a Semana 4 Interfaces gráficas.pdf

Similar a Semana 4 Interfaces gráficas.pdf (20)

Guia practicaiuprg3
Guia practicaiuprg3Guia practicaiuprg3
Guia practicaiuprg3
 
Tutorial netbeans
Tutorial netbeansTutorial netbeans
Tutorial netbeans
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 
Programa2 eclipse
Programa2 eclipsePrograma2 eclipse
Programa2 eclipse
 
Programa2
Programa2 Programa2
Programa2
 
Programa 2
Programa 2Programa 2
Programa 2
 
Como insertar una imagen en eclipse java
Como insertar una imagen en eclipse javaComo insertar una imagen en eclipse java
Como insertar una imagen en eclipse java
 
Tutorial java fx_8_espanol
Tutorial java fx_8_espanolTutorial java fx_8_espanol
Tutorial java fx_8_espanol
 
Jowin Rojas Venecia IED
Jowin Rojas Venecia IEDJowin Rojas Venecia IED
Jowin Rojas Venecia IED
 
Herencia y polimorfismo unidad 5 semestre 2
Herencia y polimorfismo unidad 5 semestre 2Herencia y polimorfismo unidad 5 semestre 2
Herencia y polimorfismo unidad 5 semestre 2
 
Manual de android parte 1
Manual de android parte 1Manual de android parte 1
Manual de android parte 1
 
Introduccion de-aplicaciones-visuales
Introduccion de-aplicaciones-visualesIntroduccion de-aplicaciones-visuales
Introduccion de-aplicaciones-visuales
 
C6 net beansentradasysalidas
C6 net beansentradasysalidasC6 net beansentradasysalidas
C6 net beansentradasysalidas
 
Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01Miswing 110511215936-phpapp01
Miswing 110511215936-phpapp01
 
Tutorial visual basic 6
Tutorial visual basic 6Tutorial visual basic 6
Tutorial visual basic 6
 
Programación i
Programación iProgramación i
Programación i
 
Maira
MairaMaira
Maira
 
Clase swing
Clase swingClase swing
Clase swing
 
Sesión5 applets
Sesión5 appletsSesión5 applets
Sesión5 applets
 
Guia practica condicionales en java con NetBeans 01
Guia practica condicionales en java con NetBeans 01Guia practica condicionales en java con NetBeans 01
Guia practica condicionales en java con NetBeans 01
 

Último

CFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric ProjectCFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric ProjectCarlos Delgado
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIAMayraOchoa35
 
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)ssuser6958b11
 
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...humberto espejo
 
Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.ALEJANDROLEONGALICIA
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCANDECE
 
Tarea de UTP matematices y soluciones ingenieria
Tarea de UTP matematices y soluciones ingenieriaTarea de UTP matematices y soluciones ingenieria
Tarea de UTP matematices y soluciones ingenieriaSebastianQP1
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxLuisvila35
 
Topografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasTopografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasSegundo Silva Maguiña
 
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfLEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfAdelaHerrera9
 
Espontaneidad de las reacciones y procesos espontáneos
Espontaneidad de las reacciones y procesos espontáneosEspontaneidad de las reacciones y procesos espontáneos
Espontaneidad de las reacciones y procesos espontáneosOscarGonzalez231938
 
Clase 1 Análisis Estructura. Para Arquitectura pptx
Clase 1 Análisis Estructura. Para Arquitectura pptxClase 1 Análisis Estructura. Para Arquitectura pptx
Clase 1 Análisis Estructura. Para Arquitectura pptxPaolaVillalba13
 
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidasSOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidasLeonardoMendozaDvila
 
Peligros de Excavaciones y Zanjas presentacion
Peligros de Excavaciones y Zanjas presentacionPeligros de Excavaciones y Zanjas presentacion
Peligros de Excavaciones y Zanjas presentacionOsdelTacusiPancorbo
 
Trabajo en altura de acuerdo a la normativa peruana
Trabajo en altura de acuerdo a la normativa peruanaTrabajo en altura de acuerdo a la normativa peruana
Trabajo en altura de acuerdo a la normativa peruana5extraviado
 
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023ANDECE
 
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinación
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinaciónEstacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinación
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinaciónAlexisHernandez885688
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para PlataformasSegundo Silva Maguiña
 
Electricidad y electronica industrial unidad 1
Electricidad y electronica industrial unidad 1Electricidad y electronica industrial unidad 1
Electricidad y electronica industrial unidad 1victorrodrigues972054
 

Último (20)

CFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric ProjectCFRD simplified sequence for Mazar Hydroelectric Project
CFRD simplified sequence for Mazar Hydroelectric Project
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
 
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)
VIRUS FITOPATÓGENOS (GENERALIDADES EN PLANTAS)
 
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...
594305198-OPCIONES-TARIFARIAS-Y-CONDICIONES-DE-APLICACION-DE-TARIFAS-A-USUARI...
 
Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRC
 
Tarea de UTP matematices y soluciones ingenieria
Tarea de UTP matematices y soluciones ingenieriaTarea de UTP matematices y soluciones ingenieria
Tarea de UTP matematices y soluciones ingenieria
 
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptxAMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
AMBIENTES SEDIMENTARIOS GEOLOGIA TIPOS .pptx
 
Topografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la IngenieríasTopografía 1 Nivelación y Carretera en la Ingenierías
Topografía 1 Nivelación y Carretera en la Ingenierías
 
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfLEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
 
Espontaneidad de las reacciones y procesos espontáneos
Espontaneidad de las reacciones y procesos espontáneosEspontaneidad de las reacciones y procesos espontáneos
Espontaneidad de las reacciones y procesos espontáneos
 
Clase 1 Análisis Estructura. Para Arquitectura pptx
Clase 1 Análisis Estructura. Para Arquitectura pptxClase 1 Análisis Estructura. Para Arquitectura pptx
Clase 1 Análisis Estructura. Para Arquitectura pptx
 
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidasSOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
SOLIDOS DE REVOLUCION, aplicaciones de integrales definidas
 
Peligros de Excavaciones y Zanjas presentacion
Peligros de Excavaciones y Zanjas presentacionPeligros de Excavaciones y Zanjas presentacion
Peligros de Excavaciones y Zanjas presentacion
 
Trabajo en altura de acuerdo a la normativa peruana
Trabajo en altura de acuerdo a la normativa peruanaTrabajo en altura de acuerdo a la normativa peruana
Trabajo en altura de acuerdo a la normativa peruana
 
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
 
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinación
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinaciónEstacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinación
Estacionamientos, Existen 3 tipos, y tienen diferentes ángulos de inclinación
 
Parámetros de Perforación y Voladura. para Plataformas
Parámetros de  Perforación y Voladura. para PlataformasParámetros de  Perforación y Voladura. para Plataformas
Parámetros de Perforación y Voladura. para Plataformas
 
Electricidad y electronica industrial unidad 1
Electricidad y electronica industrial unidad 1Electricidad y electronica industrial unidad 1
Electricidad y electronica industrial unidad 1
 

Semana 4 Interfaces gráficas.pdf

  • 6. Aplicación en JAVA con Interfaz GUI
  • 7. Aplicación en JAVA con Interfaz GUI
  • 8. Aplicación en JAVA con Interfaz GUI
  • 9. Creación de la clase denominada VentanaFrame
  • 10. Creación de la clase denominada VentanaFrame En primer lugar, crearemos una clase que sirva como marco de trabajo, o ventana para alojar los demás componentes como botones o cajas de texto. Estas clases que alojan componentes (o marcos de trabajo) en su mayoría son instancias de la clase JFrame, o subclases de JFrame. JFrame es una clase de JAVA que proporciona los atributos y comportamientos básicos de una ventana: botones para maximizar o minimizar la ventana, un botón X para cerrar la ventana, un título en la barra superior, etc.
  • 11. Creación de la clase denominada VentanaFrame Por esta razón, necesitamos heredar o extender los atributos de JFrame, para poder crear una ventana que aloje los demás componentes (botones, cajas de texto, etc). Para nuestro ejemplo, seguiremos manteniendo la arquitectura mínima de programación orientada a objetos mediante dos clases: una subclase de JFrame que nos ayude a alojar componentes, y una clase que posee el método main() que cree y muestre la ventana que aloja los componentes. El diagrama de clases de la situación que vamos a desarrollar se ilustra en la figura 1.
  • 12. Creación de la clase denominada VentanaFrame Figura 1. Diagrama de Clases de una Aplicación Sencilla con interface GUI
  • 13. Creación de la clase denominada VentanaFrame Como puede ver en la figura 1, el diagrama de clases es un poco más complejo que los diagramas que hemos venido trabajando hasta el momento, pues utiliza otros tipos de relaciones entre clases como la composición (donde la clase VentanaFrame declara clases privadas internas para manejar los eventos de los botones y de las cajas de texto, ManejadorBoton y ManejadorCampoTexto respectivamente, y estas clases privadas a su vez implementan interfaces de JAVA como la interfaz ActionListener), o la relación de agregación (donde la clase VentanaFrame utiliza las clases JLabel, JTextField, JPasswordField, y JButton para construir objetos de este tipo en su interior y darle forma a la interfaz gráfica).
  • 14. Creación de la clase denominada VentanaFrame Por tanto, solamente nos concentraremos en la relación que conocemos, y es la de uso entre la clase que posee el método main() denominada “PruebaVentana” y la clase que alojará los componentes de la interfaz gráfica denominada “VentanaFrame”. Por esta razón decíamos en líneas anteriores que solamente tocaremos ciertos aspectos de las interfaces gráficas, pues es una gran cantidad de conceptos y elementos que no podríamos cubrir en estas líneas. Quizás observando el código de la clase “VentanaFrame” pueda apreciar las relaciones de composición y agregación que se ilustran en la figura 1.
  • 15. Código Fuente de la clase “VentanaFrame”
  • 16. Código Fuente de la clase “VentanaFrame” En la figura 2 observamos el código fuente de la clase “VentanaFrame” que servirá como contenedor de componentes gráficos. Figura 2. Código Fuente de la clase VentanaFrame
  • 17. Código Fuente de la clase “VentanaFrame” Como puede observar en la figura 2, es una gran cantidad de código, y hemos procurado escribir comentarios en cada línea de código para explicar lo que hace cada línea. Recordemos que los comentarios de una sola línea en JAVA se representan con la doble barra diagonal //. Los comentarios no serán interpretados por el compilador, lo que permite documentar y explicar las líneas de código cuando sea necesario. Además, hemos pintado ciertas secciones del código, para identificar partes importantes del mismo. Analicemos brevemente las secciones de código de la figura 2.
  • 18. Código Fuente de la clase “VentanaFrame” La primera parte hace referencia a las bibliotecas que serán importadas por la clase “VentanaFrame”, de manera que pueda integrar componentes gráficos (botones, cajas de texto, labels, etc) y responder a eventos. En la figura 3 se observa únicamente la sección de imports de la clase “VentanaFrame” Figura 3 . Sección de imports de la clase “VentanaFrame”
  • 19. Código Fuente de la clase “VentanaFrame”
  • 20. Código Fuente de la clase “VentanaFrame” Figura 4. Declaración de la clase VentanaFrame y sus atributos privados
  • 21. Código Fuente de la clase “VentanaFrame” Como se puede observar en la figura 4, la clase VentanaFrame extiende o hereda de JFrame sus atributos públicos. Como se dijo en líneas anteriores, JFrame es una clase que posee todos los comportamientos de una ventana, y por tal razón queremos heredar todos esos comportamientos en la clase VentanaFrame. Además, observe cómo se construyen objetos de la clase JLabel para etiquetas (objeto denominado etiqueta de color verde), de la clase JTextField (objeto denominado campoTexto de color aguamarina) para campos de texto, de la clase JPasswordField (objeto denominado campoContrasenia de color rosa) para campos de contraseña que ocultan datos, y de la clase JButton (campo denominado botonSimple de color azul) para botones. Más adelante veremos cómo se inicializan estos objetos y se agregan al marco de trabajo o ventana JFrame.
  • 22. Código Fuente de la clase “VentanaFrame” A continuación encontramos el constructor de la clase VentanaFrame() cuya función será inicializar los objetos de la clase JLabel, JTextField, JPasswordField, y JButton, y agregarlos a la ventana, y la instrucción que determina cómo será el diseño o layout de los componentes dentro de la ventana. En la figura 5 encontramos la sección de declaración del constructor de la clase VentanaFrame Figura 5. Declaración del constructor y el flujo de diseño de la ventana
  • 23. Código Fuente de la clase “VentanaFrame” Como se puede observar en la figura 5, encontramos la instrucción que declara el constructor (un método que tiene el mismo nombre que la clase, denominado VentanaFrame() ), y una instrucción cuya finalidad es invocar al constructor de la clase padre -es decir, el constructor de JFrame-, para poder asignar un título a la ventana. Luego encontramos la instrucción setLayout( new FlowLayout() ); que le indica a JAVA la manera en la que los componentes se ubicarán dentro de la ventana. A continuación, viene una instrucción bastante interesante, pues nos permitirá usar imágenes para incrustarlas en nuestra ventana. Específicamente la imagen se incrustará en el label o etiqueta, que a su vez será renderizado por la ventana. En la figura 6 se observa esta instrucción
  • 24. Código Fuente de la clase “VentanaFrame” Figura 6. Instrucción para incrustar imágenes en la interfaz gráfica Observe con atención el código de la figura 6. Es importante que la imagen que usted quiera insertar dentro de su interfaz gráfica se encuentre dentro de la carpeta bin, y posea el mismo nombre y formato que solicitan las líneas de código. Para este caso particular, necesitamos tener una imagen con extensión .gif denominada “insecto1” para que podamos mostrarla en pantalla. Si no contamos con una imagen denominada “insecto1.gif” dentro de la carpeta bin, no podremos visualizar ninguna imagen en nuestra interfaz gráfica.
  • 25. Código Fuente de la clase “VentanaFrame” Por simplicidad hemos descargado una imagen .gif de la siguiente ruta: http://www.gifde.com/js_pics_aux/descarga.php?descarga=si&c=gif/otros/naturaleza/animales/insectos/mariqu itas/&f=mariquita-031.gif , y la hemos guardado dentro de la carpeta bin con el nombre de insecto1.gif -no olvide en número 1-, para poderla utilizar en nuestra interfaz gráfica. Realmente puede descargar la imagen que usted desee, simplemente hemos proporcionado el enlace de donde descargamos nuestra imagen para que usted pueda replicar exactamente la misma situación que estamos modelando. La imagen que hemos usado se ilustra en la figura 7. Figura 7. Imagen .gif utilizada
  • 26. Código Fuente de la clase “VentanaFrame” Recordemos que una imagen .gif es una imagen ligera con una pequeña animación o movimiento. Hemos escogido una imagen pequeña (aproximadamente de 100x100 pixeles), de manera que se ajuste perfectamente a la ventana que vamos a construir que es aproximadamente de 275x210 pixeles. Sin embargo, puede elegir la imagen que desee. Lo importante es que la guarde en la carpeta .bin, y para este caso particular, debe nombrarla como insecto1.gif. Luego encontramos el código referente a la inicialización del objeto JLabel denominado “etiqueta”, y su respectiva configuración para que posea una imagen, y que la imagen del label se ubique a la izquierda. En la figura 2 pintamos dicho código de color verde, y lo replicamos nuevamente en la figura 8.
  • 27. Código Fuente de la clase “VentanaFrame” Figura 8. Código para inicializar el objeto JLabel denominado “etiqueta” Observe el código de la figura 8. Básicamente se inicializa el objeto etiqueta con la instrucción “etiqueta = new JLabel( "Etiqueta con texto e icono", insecto, SwingConstants.LEFT );”, que le asigna a la etiqueta el texto que se encuentra entre comillas, le asigna el objeto de tipo Icon denominado “insecto” que se definió en la figura 6, y además utilizó una constante de la librería SWING para indicar que la imagen estará a la izquierda (LEFT). Observe la instrucción “etiqueta.setToolTipText( "Esta es una etiqueta" );”, que le indica a JAVA que la etiqueta tendrá un tooltip.
  • 28. Código Fuente de la clase “VentanaFrame” Un tooltip es una funcionalidad que se activa cuando se coloca el puntero del mouse encima de la etiqueta, y lo que hará será mostrar el mensaje que se haya configurado para el tooltip, que para este caso es el mensaje “Esta es una etiqueta”. Finalmente observe la instrucción extremadamente importante en interfaces gráficas denominada “add”. En la línea “add( etiqueta );”, les estamos diciendo a JAVA que queremos “agregar” o “añadir” el objeto denominado “etiqueta” a la VentanaJFrame. Decimos que esta instrucción es extremadamente importante porque nosotros podemos crear todos los componentes gráficos que queramos, pero si no los añadimos a la ventana, visualmente es como si nunca se hubieran creado porque no los veríamos.
  • 29. Código Fuente de la clase “VentanaFrame” Luego encontramos el código referente a la inicialización del objeto JTextField denominado “campoTexto”, y su respectiva configuración para que muestre un texto por defecto. En la figura 2 pintamos dicho código de color aguamarina, y lo replicamos nuevamente en la figura 9 Figura 9. Código para inicializar el objeto JTextField denominado “campoTexto” Básicamente en la figura 9 encontramos el código para inicializar el objeto de tipo JTextField con un texto por defecto, y volvemos a observar la instrucción extremadamente importante denominada “add”. De esa forma estamos “añadiendo” o “agregando” el objeto de tipo JTextField denominado campoTexto a la “VentanaJFrame”
  • 30. Código Fuente de la clase “VentanaFrame” Luego encontramos el código referente a la inicialización del objeto JPasswordField denominado “campoContrasenia”, y su respectiva configuración para que muestre un texto por defecto. En la figura 2 pintamos dicho código de color rosa, y lo replicamos nuevamente en la figura 10 Figura 10. Código para inicializar el objeto JPasswordField denominado “campoContrasenia” Básicamente en la figura 10 encontramos el código para inicializar el objeto de tipo JPasswordField con un texto por defecto, y volvemos a observar la instrucción extremadamente importante denominada “add”. De esa forma estamos “añadiendo” o “agregando” el objeto de tipo JPasswordField denominado campoContrasenia a la “VentanaJFrame”.
  • 31. Código Fuente de la clase “VentanaFrame” Luego encontramos el código referente a la inicialización del objeto JButton denominado “botonSimple”, y su respectiva configuración para que muestre un texto por defecto en el botón. En la figura 2 pintamos dicho código de color azul, y lo replicamos nuevamente en la figura 11 Figura 11. Código para inicializar el objeto JButton denominado “botonSimple” Básicamente en la figura 11 encontramos el código para inicializar el objeto de tipo JButton con un texto por defecto, y volvemos a observar la instrucción extremadamente importante denominada “add”. De esa forma estamos “añadiendo” o “agregando” el objeto de tipo JButton denominado botonSimple a la “VentanaJFrame”.
  • 32. Código Fuente de la clase “VentanaFrame” Luego encontramos la sección referente al registro de los manejadores de eventos. Como se dijo en líneas anteriores, un manejador de eventos es una porción de código que se ejecutará cuando un evento ocurra sobre algún componente como un botón o una caja de texto. En la figura 2 pintamos dicho código de color blanco, y lo replicamos nuevamente en la figura 12. Figura 12. Registro de manejadores de eventos para los componentes
  • 33. Código Fuente de la clase “VentanaFrame” Si observa con atención el código de la figura 12 encontrará que se están creando objetos de un par de clases denominadas “ManejadorCampoTexto”, y “ManejadorBoton”. Más adelante veremos que este par de clases son clases privadas que se encuentran dentro del mismo archivo “VentanaFrame.java”, y su función es definir la porción de código que se ejecutará cuando ocurra un evento sobre el componente registrado. La instrucción “ManejadorCampoTexto manejadorTxt = new ManejadorCampoTexto();” construirá un objeto de la clase ManejadorCampoTexto denominado manejadorTxt. Luego la instrucción “campoTexto.addActionListener( manejadorTxt );” asocia el objeto “campoTexto” con un actionListener que recibe como argumento el objeto “manejadorTxt”. En otras palabras, estamos haciendo que el componente “campoTexto” reaccione a un evento, o esté escuchando eventos mediante la instrucción “addActionListener”, y cuando éstos ocurran, se ejecutará el código configurado en el objeto “manejadorTxt”.
  • 34. Código Fuente de la clase “VentanaFrame” El mismo razonamiento podemos aplicar para el componente denominado botonSimple. La instrucción “ManejadorBoton manejadorBtn = new ManejadorBoton();” construirá un objeto de la clase ManejadorBoton denominado manejadorBtn. Luego la instrucción “botonSimple.addActionListener( manejadorBtn );” asocia el objeto “botonSimple” con un actionListener que recibe como argumento el objeto “manejadorBtn”. En otras palabras, estamos haciendo que el componente “botonSimple” reaccione a un evento, o esté escuchando eventos mediante la instrucción “addActionListener”, y cuando éstos ocurran, se ejecutará el código configurado en el objeto “manejadorBtn”.
  • 35. Código Fuente de la clase “VentanaFrame” Luego encontramos la clase interna que posee el código que se ejecutará si ocurre un evento sobre los objetos de campos de texto. En la figura 2 pintamos dicho código de color amarillo, y lo replicamos nuevamente en la figura 13. Figura 13. Clase interna para el manejo de los eventos en las cajas de texto
  • 36. Código Fuente de la clase “VentanaFrame” Observe con atención el código de la figura 13. Básicamente esta clase privada implementa la interfaz de JAVA ActionListener, y proporciona un cuerpo para el método actionPerformed(ActionEvent evento) que recibe como argumento un objeto del tipo ActionEvent. En otras palabras, el método actionPerformed() de la clase privada ManejadorCampoTexto está pendiente de la ocurrencia de eventos, y cuando estos se generen, el evento es pasado como argumento de tipo ActionEvent al método actionPerformed() para ser procesado.
  • 37. Código Fuente de la clase “VentanaFrame” Por dentro del método actionPerformed() se procesa la fuente del evento con la instrucción “if ( evento.getSource() == campoTexto )” que está validando si la fuente del evento fue el objeto denominado “campoTexto”. En caso afirmativo se ejecuta la instrucción “cadena = String.format( "campoTexto: %s", evento.getActionCommand() );” , que básicamente asigna a la variable de tipo String denominada “cadena” la información que luego se mostrará en pantalla mediante la instrucción “JOptionPane.showMessageDialog( null, cadena );” . La instrucción JOptionPane.showMessageDialog es una instrucción de JAVA para mostrar en pantalla mensajes en forma de ventana.
  • 38. Código Fuente de la clase “VentanaFrame” Lo que significa que el manejador de eventos mostrará en una ventana un mensaje de acuerdo con la ocurrencia de los eventos. En este caso, se nos mostrará en una ventana el texto que nosotros hayamos escrito en la caja de texto después de presionar “Enter”. Observe que el método actionPerformed() tiene dos validaciones dentro del if, porque en nuestra ventana tenemos dos campos de texto, uno de tipo JTextField y otro de tipo JPasswordField, y cuando escribamos algo en estos campos de texto y presionemos “enter” veremos una ventana con la información que hayamos digitado en los campos de texto.
  • 39. Código Fuente de la clase “VentanaFrame” Luego encontramos la clase interna que posee el código que se ejecutará si ocurre un evento sobre los objetos de botón. En la figura 2 pintamos dicho código de color purpura, y lo replicamos nuevamente en la figura 14. Figura 14. Clase interna para el manejo de los eventos en los botones
  • 40. Código Fuente de la clase “VentanaFrame” Observe con atención el código de la figura 14. Básicamente esta clase privada implementa la interfaz de JAVA ActionListener, y proporciona un cuerpo para el método actionPerformed(ActionEvent evento) que recibe como argumento un objeto del tipo ActionEvent. En otras palabras, el método actionPerformed() de la clase privada ManejadorBoton está pendiente de la ocurrencia de eventos, y cuando estos se generen, el evento es pasado como argumento de tipo ActionEvent al método actionPerformed() para ser procesado. Por dentro del método actionPerformed() se ejecuta la instrucción “ JOptionPane.showMessageDialog( VentanaFrame.this, String.format("Usted oprimio: %s", evento.getActionCommand() ) );” , que básicamente muestra en pantalla el mensaje de que se oprimió el botón, y la fuente del botón con evento.getActionCommand().
  • 41. Código Fuente de la clase “VentanaFrame” La instrucción JOptionPane.showMessageDialog es una instrucción de JAVA para mostrar en pantalla mensajes en forma de ventana. Lo que significa que el manejador de eventos mostrará en una ventana un mensaje de acuerdo con la ocurrencia de los eventos. En este caso, se nos mostrará en una ventana el nombre del botón que se haya presionado cuando se haya hecho click sobre este. En síntesis, los manejadores de eventos son clases privadas con el código que se debe ejecutar en caso de ocurrir un evento. Por último, nos falta analizar el código de la clase “PruebaVentana”, que es la clase que posee el método main() y básicamente construye un objeto de la clase “VentanaFrame” para visualizar sus componentes.
  • 42. Código Fuente de la clase “PruebaVentana”
  • 43. Código Fuente de la clase “PruebaVentana” En la figura 15 observamos el código fuente de la clase “PruebaVentana” que instanciará un objeto de la clase “VentanaFrame” para visualizar los componentes allí definidos. Figura 15. Código Fuente de la clase PruebaVentana
  • 44. Código Fuente de la clase “PruebaVentana” Como puede observar en la figura 15, el código de la clase “PruebaVentana” es más corto que el de la clase “VentanaFrame”. En las primeras líneas encontramos una instrucción para instanciar un objeto de la clase “VentanaFrame” denominado marcoVentana. Luego este objeto marcoVentana establece las operaciones para poder cerrar la ventana con el botón X, y de allí que sea necesario importar JFrame de las librerías, pues esa operación de cerrar la ventana proviene de JFrame (la instrucción JFrame.EXIT_ON_CLOSE ). Luego el objeto marcoVentana establece el tamaño de la ventana que se creará (la instrucción marcoVentana.setSize( 275, 210 ); ) y finalmente establecerá que la ventana sea visible con la instrucción “marcoVentana.setVisible( true ); ” . Después de haber analizado el código, vuelva y revise el diagrama de clases de la figura 1. Es posible que pueda comprender un poco más la organización y relación de todos los componentes involucrados en la solución después de la explicación anterior.
  • 45. Compilación y Ejecución de código JAVA desde CMD
  • 46. Compilación y Ejecución de código JAVA desde CMD Recordemos que cada una de las clases que escribimos deben estar en su propio archivo .java, y que estos archivos deben ser guardados dentro de la carpeta bin del JDK -Véase “Manual: Preparar el Entorno de Desarrollo”-. Por tanto, el archivo PruebaVentana.java debe estar dentro de la carpeta bin, así como la clase “VentanaFrame”. De igual manera, en el interior de la carpeta bin también deberá estar la imagen .gif denominada “insecto1.gif” -no olvidar el número 1- para que todo funcione adecuadamente. En otras palabras, el código de la figura 15 de la clase “PruebaVentana” lo transportamos a su respectivo archivo .java, así como el código de la figura 2 de la clase “VentanaFrame”, de manera que ambos archivos, y la imagen .gif, se encuentren dentro de la carpeta bin del JDK.
  • 47. Compilación y Ejecución de código JAVA desde CMD En la figura 16 se observa cómo el archivo PruebaVentana.java se encuentra dentro de la carpeta bin del JDK. Figura 16. Archivo PruebaVentana.java dentro de la carpeta bin
  • 48. Compilación y Ejecución de código JAVA desde CMD En la figura 17 se observa cómo el archivo VentanaFrame.java se encuentra dentro de la carpeta bin del JDK. Figura 17. Archivo VentanaFrame.java dentro de la carpeta bin
  • 49. Compilación y Ejecución de código JAVA desde CMD Ya con nuestros archivos listos dentro de la carpeta bin, lo que resta es abrir el CMD desde la carpeta bin como se explicó en la lectura denominada “Manual: Preparar el Entorno de Desarrollo”, como se ilustra en la figura 18. (Recuerde que teniendo abierta la carpeta bin desde el explorador de archivos, debemos ubicar la barra de direcciones del explorador de archivos y debemos reemplazar el contenido de la barra de direcciones de la carpeta bin, por la palabra “cmd”, y a continuación pulsar la tecla “Enter” para que podamos abrir la herramienta CMD desde allí). Figura 18. Herramienta cmd desde la ruta de la carpeta bin
  • 50. Compilación y Ejecución de código JAVA desde CMD En la herramienta CMD invocaremos los comandos de compilación de código JAVA, y ejecución de código JAVA para visualizar el resultado final, como se ilustra en la figura 19. Figura 19. Compilación y Ejecución de la clase PruebaVentana
  • 51. Compilación y Ejecución de código JAVA desde CMD Como se puede observar en la figura 19, aparecerá una ventana (el objeto marcoVentana instanciado de la clase “VentanaFrame”) y en su interior encontramos los distintos objetos que fuimos agregando (add) a la ventana. Vemos el label con una imagen .gif. Vemos un par de cajas de texto para digitar información (una de tipo password y otra caja normal) y un botón. Lo interesante es que estos tres objetos tienen asociados manejadores de eventos, por lo que algo sucederá si escribimos en las cajas de texto y luego presionamos la tecla “enter”, o si pulsamos el botón con un click. En la figura 20 se observa el resultado de digitar información en la caja de texto, y a continuación presionar la tecla “Enter”. Veremos que se muestra una ventana -gracias a las instrucciones JOptionPane.showMessageDialog-, con la información “campoTexto: Me llamo Elfar”. Eso quiere decir que el manejador de eventos asociado al objeto “campoTexto” está reaccionando adecuadamente, y muestra en pantalla el texto que se haya escrito en la caja gracias a la instrucción JOptionPane.
  • 52. Compilación y Ejecución de código JAVA desde CMD Figura 20. Mensaje de salida cuando se escribe algo en la caja de texto y se presiona “Enter”
  • 53. Compilación y Ejecución de código JAVA desde CMD En la figura 21 se observa el resultado de digitar información en la caja de texto de tipo password -la caja que oculta la información con unos puntos-. , y a continuación presionar la tecla “Enter”. Veremos que se muestra una ventana -gracias a las instrucciones JOptionPane.showMessageDialog-, con la información “campoContrasenia: Me gusta JAVA”. Eso quiere decir que el manejador de eventos asociado al objeto “campoContrasenia” está reaccionando adecuadamente, y muestra en pantalla el texto que se haya escrito en la caja de tipo password, gracias a la instrucción JOptionPane.
  • 54. Compilación y Ejecución de código JAVA desde CMD Figura 21. Mensaje de salida cuando se escribe algo en la caja de password y se presiona “Enter”
  • 55. Compilación y Ejecución de código JAVA desde CMD Observe que las cajas de texto reaccionan al evento “Enter”, pues cuando se digita información en las cajas de texto, es usual presionar enter para pasar al siguiente campo. Por tanto, estamos “escuchando” los eventos que puedan ocurrir en las cajas de texto gracias a los manejadores de eventos y los eventListener. En la figura 22 se observa el resultado de presionar el botón. Nótese además que la imagen está girando, pues hemos incrustado una imagen .gif que posee algo de animación.
  • 56. Compilación y Ejecución de código JAVA desde CMD Figura 22. Mensaje de salida cuando se pulsa el botón
  • 57. Compilación y Ejecución de código JAVA desde CMD Observe la figura 22. Observamos un mensaje que dice: “Usted oprimio: Un boton simple", lo que indica que el manejador de eventos para el botón está funcionando adecuadamente, y muestra en pantalla el mensaje correspondiente, gracias a la instrucción JOptionPane. En conclusión, podemos utilizar interfaces gráficas en nuestras aplicaciones, pero eso implica un mayor dominio sobre los conceptos fundamentales de la programación orientada a objetos, sobre los diagramas UML, y sobre el funcionamiento sobre los eventos. Lo importante es entender que es necesario importar de la biblioteca pública de JAVA los componentes y las funcionalidades que harán posible que tengamos una interfaz gráfica funcional.