Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SEMANA 4
Diseño de GUI
(Interfaz Gráfica de Usuario)
Todos los derechos de autor son de la exclusiva propiedad de IACC o de los otorgantes de sus licencias. No está
permitido copiar, reproducir, reeditar, descargar, publicar, emitir, difundir, poner a disposición del público ni 1
ESTE
utilizarDOCUMENTO
los contenidos paraCONTIENE LAdeSEMANA
fines comerciales 4
ninguna clase.
2
ESTE DOCUMENTO CONTIENE LA SEMANA 4
ÍNDICE
3
ESTE DOCUMENTO CONTIENE LA SEMANA 4
DISEÑO DE GUI (INTERFAZ GRÁFICA DE USUARIO)
OBJETIVOS ESPECÍFICOS
Distinguir la utilización de Swing y AWT para el diseño gráfico de aplicaciones en Java.
INTRODUCCIÓN
Desde que fue el apogeo de los lenguajes visuales que las interfaces gráficas de usuario han sido
un factor muy relevante en los patrones de programación. Y es así que es muy frecuente que
cuando a un programador se le están enumerando los requerimientos del cliente, ya imagina en su
mente la forma en que presentará las pantallas de su futura aplicación.
Java comenzó con los componentes provistos por AWT (Abstract Windows Toolkit), pero con el
tiempo evolucionó a Swing, que dispone de muchos y mejores componentes visuales que los
predecesores, permitiendo crear interesantes interfaces.
En esta semana se profundizará sobre los componentes que forman parte de una interfaz de
usuario, y la forma en que Java gestiona los eventos que se gatillan desde los distintos
componentes, como botones, checkbox, etc. A su vez, también se detallarán algunos gestores de
diseño, que permiten ordenar los componentes dentro de la pantalla para un trabajo más intuitivo
por parte del usuario.
4
ESTE DOCUMENTO CONTIENE LA SEMANA 4
1. SWING Y JFC
Antes de comenzar a hablar de Swing es necesario hacer mención a JFC, que es la sigla de Java
Foundation Classes, o bien, Clases Bases Java, que corresponde a un framework gráfico que
permite la generación de interfaces gráficas de usuario portables, y que se conforma de tres
herramientas (Oracle, 2010):
Swing
Java 2D
AWT corresponde a un conjunto de librerías cuyo foco apunta a la creación de interfaces gráficas.
En sus inicios, AWT creaba los objetos delegando su creación y comportamiento a herramientas
nativas de las plataformas donde corre la Máquina Virtual de Java. Esto trajo problemas por
diferencias en las plataformas y en los sistemas operativos, pues en varias ocasiones el
comportamiento de los componentes dependía de la plataforma en que se ejecutara. La solución
fue desarrollar los objetos de la GUI basándolos solamente en elementos básicos y que fueran
comunes a todas las plataformas, evitando de esta forma problemas de desempeño y
compatibilidad. Así entonces nace Swing.
AWT hace uso de la interfaz de usuario y componentes nativos de la plataforma, es por ello que se
les denomina “heavyweights components”, de ahí que se dieran muchos problemas de
compatibilidad. Por ejemplo, si se presentaba un textbox, se usaba el del sistema operativo. O
bien, si Windows permitía un label con imagen y Linux no, entonces esa propiedad no se
consideraba en la librería de AWT. Por eso es que se requería personalizar las aplicaciones cuando
cambiaban de plataforma. Y en situaciones ni siquiera se podía acceder a todo el kit de
herramientas disponibles. Además que estaba pensando para el uso en los navegadores antiguos,
entonces, no dispone de componentes más complejos como tablas, vistas de árbol, barras de
progreso, etc.
Así, Swing se ha transformado en una poderosa herramienta para desarrollar interfaces para
Applets y aplicaciones varias, ya que presenta una cantidad de controles, y calidad de los mismos,
que otras herramientas del mercado no logran igualar, además que presenta una mejor
portabilidad y comportamiento. Ya no utiliza los componentes correspondientes al sistema
operativo, si no que utiliza los propios, es por ello que se les denomina “lighjtweights
components”. Además, Swing está hecho en Java, haciéndolo prácticamente 100% portable, aun
cuando usa partes de AWT como base.
5
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Hoy en día, además del correcto funcionamiento de un sistema, la interfaz gráfica juega un rol
demasiado importante, pues es lo que el usuario ve, y con lo que interactúa a diario.
Actualmente, el usuario hace uso de una aplicación, ya sea utilizando el mouse, o bien ingresando
datos desde el teclado, y generalmente termina esto último presionando la tecla <enter>. Lo
anterior, para la aplicación, constituye eventos.
Internamente, en la aplicación, los eventos dan curso a métodos que finalmente son los que
entregan las respuestas al usuario final.
En Java el manejo de eventos se delega. Es decir, el evento que ocurre en un objeto no se realiza
en el mismo objeto (fuente), sino que se delega a otro objeto (oyente), y se efectúa de la siguiente
manera:
El objeto fuente registra e identifica cuáles son los objetos oyentes que podrían recibir
algún evento en particular.
Cuando ocurre el evento, el objeto fuente se lo informa a todos los oyentes que tiene
registrado.
Finalmente, para efectuar la comunicación, el objeto fuente invoca un método del objeto
oyente, cuyo argumento es el evento generado.
Diferentes fuentes de eventos producen diferentes tipos de eventos, como por ejemplo:
6
ESTE DOCUMENTO CONTIENE LA SEMANA 4
2. El EventObject es el objeto que maneja el evento producido.
Cada tipo de evento se puede representar mediante una clase diferente. La clase base es
java.util.EventObject, cuyo único atributo es el objeto en el que se ha generado el evento, y
además solo expone un método, llamado getSource(), que develve el objeto correspondiente a la
GUI con el que el usuario ha interactuado, sea un carácter (tecla) del teclado o un botón del
mouse.
7
ESTE DOCUMENTO CONTIENE LA SEMANA 4
KeyEvent Pulsar o soltar una tecla. Se denominan
por: KEY_PRESS, KEY_RELEASE,
KEY_ACTION y KEY_ACTION_RELEASE
Se denominan por:
WINDOW_DESTROY,
WINDOW_EXPOSE, WINDOW_ICONIFY,
WINDOW_DEICONIFY,
WINDOW_MOVED
8
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La jerarquía de eventos se muestra a continuación:
Fuente: http://www.javaprepare.com/notes/events.html
Con respecto a los objetos oyentes (listener de aquí en adelante), la gestión de registro y
eliminación se realiza de la siguiente manera (Odelys, s.f.):
9
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Fuente: http://www.jroller.com/DhilshukReddy/entry/java_swing_components_hierarchy
10
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Fuente: http://flylib.com/books/en/2.715.1.15/1/
Con lo anterior, en una aplicación todos los objetos gráficos forman una jerarquía, y la jerarquía
mayor está presente en un JFrame, o un JDialog, o un JApplet.
RootPane, que viene junto con el JFrame. También lo traen los JInternalFrame y los otros
contenedores de ventanas superiores, como JDialog y JApplet.
El RootPane tiene 4 partes: vidrio, panel de capas, panel de contenido y una barra de
menú opcional.
11
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Fuente: http://www.codeproject.com/Articles/33536/An-Introduction-to-Java-GUI-Programming
A continuación se muestra un ejemplo muy simple del uso de JFrame y la forma en que se agregan
componentes a la jerarquía y en el que también se hace uso de eventos. Cabe mencionar que toda
aplicación swing debe comprender, al menos, un contenedor de alto nivel (JFrame, JWindow,
JApplet, JDialog).
12
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida es:
En este ejemplo se hace uso de un contenedor de alto nivel como es JFrame, y sobre él se agrega
un objeto JLabel con una determinada etiqueta.
Para cerrar la ventana, se usó el método addWindowListerner(…..), pero también se podría haber
usado el siguiente código, que hace exactamente lo mismo:
miFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Como se mecionó anteriormente, las interfaces Listener permiten manejar la captura de los
eventos. En Java, cada tipo de evento cuenta con su clase (o interface) Listerner.
De acuerdo a la mencionado en Oracle (2014a), algunas interfaces Listener son las siguientes:
13
ESTE DOCUMENTO CONTIENE LA SEMANA 4
mouse.
Se ha soltado el botón del mouse. mouseReleased(MouseEvent)
MouseMotionListener Se ha desplazado el mouse con el mouseDragged(MouseEvent)
botón presionado.
El puntero del mouse ha cambiado de mouseMoved(MouseEvent)
posición.
TextListener El contenido del texto del componente textValueChanged(TextEvent)
ha cambiado.
WindowListener La ventana ha sido activada. windowActivated(WindowEvent)
La ventana se ha cerrado. windowClosed(WindowEvent)
Se ha solicitado cerrar la ventana. windowClosing(WindowEvent)
La ventana ha sido desactivada. windowDeactivated(WindowEvent)
Se restaura la ventana a su tamaño windowDeiconified(WindowEvent)
original o se maximiza.
La ventana se ha minimizado. windowIconified(WindowEvent)
La ventana se ha abierto. windowOpened(WindowEvent)
Y se obtiene una ventana con un botón, que crece de acuerdo a cómo crece la ventana.
14
ESTE DOCUMENTO CONTIENE LA SEMANA 4
2. GESTORES DE SWING
Sin duda, lo que hace atractiva a una aplicación es la capa de presentación, más conocida como
Look and Feel, ya que es la forma en que el usuario interactúa con la aplicación. Entonces, una
buena gestión de los componentes (objetos) dentro de la pantalla permitirá que para el usuario
sea agradable utilizar la aplicación.
El concepto de Look and Feel es mucho más amplio que lo mencionado anteriormente, sin
embargo, el contenido que se presenta a continuación muestra las distintas “distribuciones” en
pantalla que Java ofrece para la gestión del diseño, lo que dicho en pocas palabras corresponde al
proceso que determina el tamaño y ubicación de los componentes dentro de un contenedor,
considerando el tamaño disponible, la resolución del monitor y/o las características del sistema de
ventanas de la plataforma donde se ejecuta.
15
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Se hace visible por primera vez.
Se añade o se borra un componente.
Cambia el tamaño de un componente porque el usuario lo modifica físicamente
(redimensionando el tamaño de la ventana) o por un cambio de contenidos (por ejemplo,
el cambio de una etiqueta).
Sin embargo, los contenedores Swing poseen gestores de diseño por defecto, por ejemplo, un
panel de contenidos de JFrame utiliza BorderLayout, y un JPanel utiliza FLowLayout.
Cabe destacar que cada línea está centrada dentro del componente que la contiene, y además
considera un tamaño preferido para cada componente, y lo utiliza para anular alguna dimensión
establecida por el método setsize().
A continuación se muestra un ejemplo en que se agregan 10 labels a la pantalla. Los labels impares
se configuran con letra Arial negrita y con borde rojo, mientras que los pares con letra Courier
cursiva y con borde azul. Lo anterior se logra con el uso de los métodos setFont y setBorder.
16
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida es:
17
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Si se redimensionan los bordes de la pantalla, entonces se reordenan los componentes. Por
ejemplo:
El gestor de diseño BorderLayout delinea los componentes de acuerdo a cinco zonas establecidas,
denominadas PAGE_START, PAGE_END, LINE_START, LINE_END y CENTER, las que generalmente
se asocian a los puntos cardinales: NORTH, SOUTH, WEST, EAST y CENTER, respectivamente.
18
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Cuando se agrega un componente con el método add, se debe añadir un parámetro de tipo String
que indica la zona en que se agregará, por ejemplo:
Un BorderLayout puede ampliar horizontalmente sus componentes Norte y Sur (si es que existen),
verticalmente sus componentes Este y Oeste, y de ambos modos el componente Centro.
A continuación se muestra un ejemplo donde se agregan componentes a cada una de las 5 zonas,
y además los paneles izquierdo y derecho se configuran con el diseño FlowLayout para ordenar sus
componentes.
19
ESTE DOCUMENTO CONTIENE LA SEMANA 4
20
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida es:
Cabe mencionar que no es necesario hacer uso de todas las zonas de las que dispone este estilo de
diseño. Dependiendo de la necesidad, podrían ser necesarias solamente las zonas NORTH, CENTER
y SOUTH. Para esto, el administrador de diseño utilizará la misma filosofía, es decir, que el
componente del centro ocupe el máximo de espacio disponible, y los situados en la parte superior
e inferior solo el espacio necesario para mostrar su contenido.
Por ejemplo, si del ejercicio anterior se quitasen los paneles izquierdo y derecho, comentando las
líneas
frame.add(miPanelIzquierda,BorderLayout.WEST);
frame.add(miPanelDerecha,BorderLayout.EAST);
y
creaPanelIzquierda();
21
ESTE DOCUMENTO CONTIENE LA SEMANA 4
creaPanelDerecha();
se tendría lo siguiente:
Se puede apreciar que solo cambió de tamaño (altura) la zona central, sin embargo, el encabezado
(zona norte) y las opciones (zona sur) mantienen su altura.
22
ESTE DOCUMENTO CONTIENE LA SEMANA 4
2.3. GESTOR DE DISEÑO GRIDLAYOUT
El gestor de diseño GridLayout diseña los componentes en una cuadrícula rectangular. La idea es
que el contenedor se divida en rectángulos iguales, y se posicione un componente en cada
rectángulo.
Por ejemplo, en el siguiente código, se indica que se diseña un JFrame cuadriculado con 3
columnas. La cantidad de filas va a depender de los componentes que se la agreguen.
Se tiene otro constructor que indica el espacio que existirá entre los componentes del contenedor.
El siguiente ejemplo indica que se diseña un JFrame cuadriculado con 3 columnas, donde la
separación horizontal de los componentes es de 15 pixels, y la vertical de 5 pixels.
Cabe mencionar que los componentes agregados basan su orden según la propiedad
componentOrientation del contenedor que usa este estilo. Los valores de la propiedad son
RIGHT_TO_LEFT o LEFT_TO_RIGHT.
A continuación se muestra un ejemplo que simula una pantalla de celular, donde el teclado
numérico fue hecho con un GridLayout.
23
ESTE DOCUMENTO CONTIENE LA SEMANA 4
24
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida es:
Nótese que se hizo uso de —inicialmente— un BorderLayout para identificar 2 zonas: NORTH y
CENTER. En la primera se posiciona el visor numérico con estilo FlowLayout, y en la segunda el
telado numérico, con estilo GridLayout. Sin embargo, según lo explicado anteriormente, al
redimensionar solo se redimensiona la parte central.
25
ESTE DOCUMENTO CONTIENE LA SEMANA 4
3. COMPONENTES DE SWING
En la jerarquía de JComponent se mostraron varias clases que heredan los atributos y métodos de
esta, y en los ejemplos presentados se ha hecho mención a algunos como JButton, JLabel, entre
otros.
A continuación se detallarán algunas de las clases más utilizadas en la creación de GUI, tales como
JTextArea, JCkeckBox, JRadioButton y JComboBox.
JTextArea es un componente que expone un área de texto, con múltiples líneas y múltiples
columnas.
3.1.1. CONSTRUCTORES
De acuerdo a lo expuesto por Oracle (2014e), los constructores más relevantes de la clase
JTextArea son:
CONSTRUCTOR DESCRIPCIÓN
JTextArea(Document doc) Crea una nueva JTextArea con el modelo del documento especificado, y
los demás argumentos toman valores por defecto: null, 0, 0.
JTextArea(Document doc, Crea una nueva JtextArea con la cantidad especificada de filas y
26
ESTE DOCUMENTO CONTIENE LA SEMANA 4
String texto, int filas, int columnas, y el modelo especificado.
columnas)
JTextArea(int filas, int Crea una nueva TextArea vacía, con la cantidad de filas y columnas
columnas) especificadas.
JTextArea(String texto, int Crea una nueva TextArea, con la cantidad de filas y columnas
filas, int columnas) especificadas, y además despliega el texto especificado.
A continuación se muestra un programa que permite visualizar los 4 constructores que no hacen
uso de un Document en sus argumentos.
27
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida es:
28
ESTE DOCUMENTO CONTIENE LA SEMANA 4
3.1.2. MÉTODOS
De acuerdo a lo indicado por Oracle (2014e), los métodos de la clase JTextArea son los siguientes:
29
ESTE DOCUMENTO CONTIENE LA SEMANA 4
int getTabSize() Devuelve el número de espacios que se salta la tabulación.
1. No tiene barras de scroll, por lo tanto, si se escribe más de lo que se puede visualizar,
sencillamente no se podrá ver en la pantalla. Para solucionar este problema, respecto de lo
cual algo ya se esbozó en el ejemplo de BorderLayout, se utiliza un objeto JScrollPane, que
admite dentro de sí un componente.
30
ESTE DOCUMENTO CONTIENE LA SEMANA 4
JTextArea miJTextArea = new JTextArea(20, 25);
miJTextArea.setLineWrap(true);
miJTextArea.setWrapStyleWord(true);
3. Pueden ser de solo lectura, o bien editados por el usuario. Esto se define con el método
setEditable(), que es heredado de la clase JTextComponent. Entonces, para que la JTextArea
pueda ser editable por el usuario se indica:
miJTextArea.setEditable(true);
4. Se puede cambiar la font, el color de fondo y el color del texto, mediante los métodos
setFont(), setForeground() y setBackgrond() respectivamente, los dos últimos heredados de la
clase JComponente.
La forma es la siguiente:
A continuación se muestra un ejemplo que hace uso de varios métodos de la clase JTextArea. La
idea es que existan 2 JTextAreas, y cada una se inicialice de manera distinta.
31
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida es:
32
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Se puede apreciar que en la JTextArea de la izquierda las palabras se cortan en la medida que se
llega al tope, mientras que en la de la derecha los saltos de línea no cortan las palabras, sino que
se valen de los espacios.
3.2.1. CONSTRUCTORES
Según lo expuesto en Oracle (2014b), los constructores más importantes de la clase JCheckBox
son:
CONSTRUCTOR DESCRIPCIÓN
33
ESTE DOCUMENTO CONTIENE LA SEMANA 4
JCheckBox(String texto, Crea un checkBox, con el texto especificado, y seleccionado o no de
boolean seleccionado) acuerdo al valor especificado.
A continuación se muestra un programa que permite visualizar los 3 constructores que no hacen
uso de ícono:
34
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida es:
35
ESTE DOCUMENTO CONTIENE LA SEMANA 4
3.2.2. MÉTODOS
De acuerdo a la página de Oracle (2014b), los métodos de la clase JCheckBox son los siguientes:
Los demás métodos son heredados desde las clases padres, tales como setFont, setForeground,
setBackground (de la clase JComponent), setMnemonic, setSelected, setText (de la clase
AbstractButton), setSize, show y resize (de la clase Component).
36
ESTE DOCUMENTO CONTIENE LA SEMANA 4
37
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida inicialmente es la siguiente:
38
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Y si se seleccionan algunos valores, se calcula la suma:
39
ESTE DOCUMENTO CONTIENE LA SEMANA 4
3.3.1. CONSTRUCTORES
Según lo informado en la página de Oracle (2014d), los constructores más importantes de la clase
JRadioButton son los siguientes:
CONSTRUCTOR DESCRIPCIÓN
JRadioButton(Icon icono, Crea un radioButton con el ícono especificado, sin texto, y seleccionado
boolean seleccionado) de acuerdo al valor especificado.
A continuación se muestra un programa que permite visualizar los 3 constructores que no hacen
uso de ícono:
40
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida es:
41
ESTE DOCUMENTO CONTIENE LA SEMANA 4
3.3.2. MÉTODOS
De acuerdo a lo indicado por Oracle (2014d), los métodos de la clase JRadioButton son:
Los demás métodos son heredados desde las clases padres, tales como setFont, setForeground,
setBackground (de la clase JComponent), isSelected, setMnemonic, setSelected, setText (de la
clase AbstractButton), setSize, show y resize (de la clase Component).
42
ESTE DOCUMENTO CONTIENE LA SEMANA 4
43
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida inicialmente es la siguiente:
44
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Dependiendo de la operación, se obtiene:
JComboBox es un componente que combina un botón, un campo de texto editable y una lista
desplegable, donde el usuario puede escoger un valor desde la lista, o bien, también tiene la
opción de ingresar un valor en el campo de texto (si es que está editable).
3.4.1. CONSTRUCTORES
45
ESTE DOCUMENTO CONTIENE LA SEMANA 4
CONSTRUCTOR DESCRIPCIÓN
JComboBox Crea un JComboBox que toma los ítems desde una ComboBoxModel
(ComboBoxModel<E> existente.
aModel)
JComboBox(E[] ítems) Crea una JComboBox con los ítems que se indican en el arreglo.
46
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida es:
47
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Y al dar clic en las flechas, se obtiene:
48
ESTE DOCUMENTO CONTIENE LA SEMANA 4
3.4.2. MÉTODOS
De acuerdo a Oracle (2014c), los métodos más importantes de la clase JComboBox son:
49
ESTE DOCUMENTO CONTIENE LA SEMANA 4
void removeItemAt(int indice) Elimina el ítem de la lista, de la
posición indicada por el índice.
50
ESTE DOCUMENTO CONTIENE LA SEMANA 4
51
ESTE DOCUMENTO CONTIENE LA SEMANA 4
La salida obtenida es:
52
ESTE DOCUMENTO CONTIENE LA SEMANA 4
53
ESTE DOCUMENTO CONTIENE LA SEMANA 4
COMENTARIO FINAL
En este capítulo se ha dado a conocer la forma en que se gestionan los eventos en Swing. Es una
filosofía muy distinta a la conocida en los lenguajes de cuarta generación, sin embargo, es óptima
y funciona de acuerdo a lo esperado.
Por lo anterior, se identificaron todos los eventos asociados a cada uno de los componentes que
se pueden plasmar en una GUI que, dicho sea de paso, es sin duda la parte más importante de una
aplicación, pues es lo que el usuario ve a diario, y es el factor más preponderante cuando se trata
de evaluar la funcionalidad y amigabilidad de una aplicación.
Para lograr una buena impresión, Java dispone de muchos componentes y gestores de diseño en la
librería javax.swing.* y que permiten logran un look and feel adecuado y agradable a la vista.
Además, que no dependen de la plataforma sobre la cual se está ejecutando la aplicación.
Y según lo estudiado, claramente Swing lleva la delantera en cuando a interfaz de usuario. La idea
es seguir aprendiendo de los demás componentes para lograr aplicaciones de alta calidad, 100%
funcionales y adaptables a cualquier plataforma.
54
ESTE DOCUMENTO CONTIENE LA SEMANA 4
REFERENCIAS
Barnes, D. J. & Kölling, M. (2007). Programación orientada a objetos con Java. 3.ª edición. México:
Dean, J. & Dean, R. (2009). Introducción a la programación en Java. México: Editorial McGraw Hill.
https://odelys2003.files.wordpress.com/2013/01/programacioneventos.pdf
http://docs.oracle.com/javase/7/docs/api/java/awt/event/package-summary.html
http://docs.oracle.com/javase/7/docs/api/javax/swing/JCheckBox.html
http://docs.oracle.com/javase/7/docs/api/javax/swing/JComboBox.html
http://docs.oracle.com/javase/7/docs/api/javax/swing/JRadioButton.html
http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html
55
ESTE DOCUMENTO CONTIENE LA SEMANA 4
Oracle (2014f). Uses of Package java.awt.event. Recuperado de:
http://docs.oracle.com/javase/7/docs/api/java/awt/event/package-use.html
https://docs.oracle.com/javase/tutorial/uiswing/events/intro.html
http://mit.ocw.universia.net/1.00/s02/class-sessions/lecture-15/lecture-15.pdf
IACC (2014). Diseño de Gui (Interfaz Gráfica de Usuario). Programación Orientada a Objetos II.
Semana 4.
56
ESTE DOCUMENTO CONTIENE LA SEMANA 4
57
ESTE DOCUMENTO CONTIENE LA SEMANA 4