Sunteți pe pagina 1din 80

UNIVERSIDAD CATLICA DE CUENCA

UNIDAD ACADMICA DE INGENIERA DE


SISTEMAS, ELCTRICA Y ELECTRNICA

COMPONENTE SWING DE JAVA: ADMINISTRADORES DE DISEO

Trabajo de Investigacin previo a la obtencin del


Ttulo de Ingeniero de Sistemas.

Aspirante:

TNLG. ANL. FREDDY E. QUEZADA B.

Director:

ING. AL MNDEZ.
Certifico que esta investigacin ha sido desarrollada en su totalidad por el

Tnlg. Freddy Edwin Quezada Bermeo bajo mi coordinacin.

F).

ING. ALI MNDEZ.


La informacin de la presente investigacin es de absoluta responsabilidad y

propiedad del autor.

F).

TNLG. ANL. FREDDY EDWIN QUEZADA BERMEO


DEDICATORIA:

Este trabajo investigativo tengo el honor de dedicar a mi

esposa Adriana a mi hijo que son la razn de mi esfuerzo y

por acompaarme incondicionalmente en los momentos de

mi vida ; a mis queridos Padres que supieron educarme con

valores y acercar cada vez ms las metas propuestas en la

vida profesional como en la vida cotidiana.


AGRADECIMIENTO:

A las personas que supieron ayudarme para que esta

investigacin fuera realizada, Mis queridos hermanos; y un

agradecimiento especial al ING. ALI MNDEZ por guiarme en

el proceso de elaboracin de esta monografa.


NDICE

UNIVERSIDAD CATLICA DE CUENCA .......................................................... 1


CAPTULO I ........................................................................................................ 2
1.1 Historia .......................................................................................................... 2
1.2 Ventajas y Caractersticas ............................................................................ 3
1.2.1 componentes ligeros .................................................................................. 3
1.2.2 Independencia de la plataforma ................................................................. 4
1.2.3 Paquete Swing ........................................................................................... 4
1.2 Eventos Swing .............................................................................................. 7
1.3 Modelos de componentes Swing .................................................................. 8
Swing llamando a mtodos. .............................................................................. 10
1.4 Descripcin de algunos componentes Swing.............................................. 10
CAPTULO II ..................................................................................................... 13
2.1. Layouts ...................................................................................................... 13
2.2. Look &Feel ................................................................................................. 13
2.3. Nuevas caractersticas ............................................................................... 15
2.3.1 Action Con objetos Action ........................................................................ 15
2.4. Modelos de datos y estados separados ..................................................... 15
2.5. Soporte para tecnologas asistivas ............................................................ 16
2.6. Applets ....................................................................................................... 16
Estructura De Un Applet ................................................................................... 17
2.6.1. Applets en Swing .................................................................................... 18
CAPITULO III .................................................................................................... 19
3.1. Herencia de Componentes y Contenedores .............................................. 19
3.2. Control de Distribucin ............................................................................... 21
3.2.1. Seleccionar el Controlador de Distribucin ............................................. 23
3.2.2. Proporcionar Consejos sobre un Componente ...................................... 24
3.2.3 Poner Espacio entre Componentes ......................................................... 25
3.2.3.1. El controlador de distribucin. .............................................................. 25
3.2.3.3. Bordes vacos ...................................................................................... 25
3.2.4. Cmo Ocurre el Control de Distribucin ................................................. 26
3.3. Construccin de GUI en Swing .................................................................. 27
3.3.1 Ventanas .................................................................................................. 27
3.3.2. Mens ..................................................................................................... 28
3.3.3. Paneles ................................................................................................... 28
3.3.4. Diseos ................................................................................................... 28
3.3.5. Iconos ..................................................................................................... 29
1
3.3.6. Bordes..................................................................................................... 29
3.3.7. Informacin sobre herramientas ............................................................. 29
3.3.8. Barras de herramientas........................................................................... 29
3.3.9. Etiquetas y botones ................................................................................ 30
3.3.10. Componentes de texto .......................................................................... 30
3.3.11. Listas y cuadros combinados ................................................................ 30
3.3.12. Deslizadores y barras de progreso ....................................................... 31
3.3.13. Barras de desplazamiento .................................................................... 31
3.3.14. Tablas ................................................................................................... 31
3.3.15. rboles .................................................................................................. 32
3.4. Manejo de eventos en Swing ..................................................................... 32
3.5. Swing: Cuadros de texto. Botones y casillas de activacin ....................... 33
3.5. 1. Etiquetas y cuadros de texto .................................................................. 34
3.5. 2. Botones .................................................................................................. 34
3.5.3. Casillas de activacin y botones de opcin............................................. 35
3.5.4. Usar etiquetas ......................................................................................... 35
3.6. Swing: viewports. desplazamiento. deslizadores y listas ........................... 36
3.6.1. Viewports ................................................................................................ 37
3.6.2. Paneles de desplazamiento .................................................................... 37
3.6.3. Deslizadores ........................................................................................... 37
3.6.4. Barras de desplazamiento ...................................................................... 38
3.6.5. Listas....................................................................................................... 38
3.7. Swing: barras. Herramientas. Cuadros. Separadores y selectores ............ 39
3.7.1. Cuadros combinados .............................................................................. 39
3.7.2. Barras de progreso ................................................................................. 39
3.7.3. Selectores ............................................................................................... 40
3.7.4. Herramientas de ayuda ........................................................................... 41
3.7.5. Separadores ........................................................................................... 41
3.8. Swing: ventanas. Paneles. Marcos internos y cuadros de dialogo ............ 42
3.8.1. Ventanas ................................................................................................. 42
3.8.2. Cuadros de dilogo ................................................................................. 42
3.9. Creacin de paquetes. Interfaces. archivos JAR y Java Beans ................. 43
3.9.1. Crear un paquete .................................................................................... 43
3.9.2. Crear paquetes que contienen paquetes ................................................ 45
3.9.3 Crear una interfaz .................................................................................... 45
3.9.4. Implementacin parcial de una interfaz .................................................. 46
3.9.5. Crear un archivo JAR ............................................................................. 48
3.9.6. Obtener los contenidos del archivo JAR ................................................ 50

2
3.9.7. Extraer archivos desde un archivo JAR ................................................ 51
3.10. SwingUtilities ............................................................................................ 51
3.10.1. Mtodos de clculo .............................................................................. 52
3.10.2. Mtodos de conversin ......................................................................... 52
3.10.3. Mtodos de accesibilidad ...................................................................... 54
3.10.4 Mtodos de recuperacin....................................................................... 54
3.10.5.Mtodos relacionados con la multitarea y los eventos ........................... 55
3.10.6. Mtodos para los botones del ratn ...................................................... 56
3.10.7 Mtodos de disposicin/dibujo/UIString ................................................. 56
4. Conclusiones .............................................................................................. 58
5. Recomendaciones ....................................................................................... 59
6. Bibliografa .................................................................................................... 61
Anexos. ............................................................................................................. 62
INTRODUCCIN. ............................................................................................. 62
DATOS INFORMATIVOS. ................................................................................ 63
LUGARES DE CONSULTA. ............................................................................. 63
JUSTIFICACIN Y PROPUESTA. ................................................................... 63
4.1. ANLISIS DE LA SITUACIN ACTUAL ................................................ 64
4.2. PROPUESTA. ........................................................................................ 64
OBJETIVOS. ..................................................................................................... 65
5.1. Objetivo General. ................................................................................... 65
5.2 Objetivos Especficos: ............................................................................. 65
ALCANCE Y LIMITACIONES. .......................................................................... 65
6.1 Alcances. ................................................................................................. 65
6.2. Limitaciones. .......................................................................................... 65
MARCO REFERENCIAL Y CONCEPTUAL. ..................................................... 66
7.1. Marco Referencial. ................................................................................. 66
7.2. Marco Conceptual. ................................................................................. 66
TEMARIO.......................................................................................................... 67
ESTRATEGIAS METODOLGICAS. ............................................................... 69
RECURSOS...................................................................................................... 70
Recursos Humanos. ...................................................................................... 70
Recursos Tecnolgicos. ................................................................................ 70
Recursos Materiales. ..................................................................................... 70
Recursos Econmicos. .................................................................................. 71
BIBLIOGRAFA. ................................................................................................ 71
CRONOGRAMA ............................................................................................... 72

3
INTRODUCCIN

Esta Investigacin pretende ser una introduccin a Swing, con la que se

intenta mostrar una visin general sobre herramientas de interfaces grficas

de usuario, y ms concretamente, sobre el desarrollo de stas con Java y

sus APIs, lo que se pretende mostrar las ventajas que ofrece ste tipo de

programacin.

En primer lugar, se realiza una introduccin a Swing, el AWT y las interfaces

de usuario, tratando de sta forma de centrar al lector en el tema a tratar.

Una vez realizada dicha introduccin, se describir brevemente el paquete

Swing, para dar una idea de la jerarqua de componentes que se puede

utilizar con Swing y de sus utilidades.

Tambin se mencionar el manejo de eventos en Swing, as como los

Applets, aunque de una forma muy superficial, ya que debido a la gran

amplitud de variaciones que pueden darse, sera muy extenso hacer una

descripcin detallada.

1
CAPTULO I

1.1 Historia

AWT era una herramienta poderosa que impuls la popularidad de Java.

Ahora Swing, que tiene aproximadamente cuatro veces el nmero de

componentes de la interfaz de usuario de AWT, es parte de la distribucin

estndar de Java y est tan de moda que ha llegado a desplazar a AWT. Sin

embargo, AWT tuvo un avance significativo durante su existencia, aunque

es, para los estndares de hoy, una implementacin limitada, no diseada

para proporcionar una UI seria y bsica para las necesidades de millones de

programadores.El conjunto de componentes AWT no fue diseado para

soportar la popularidadcon la que fue recibido y dentro de las necesidades

de programacin dehoy, est limitado en el rango, tiene muchos bugs y

consume gran cantidad derecursos del sistema.Como se mencion

anteriormente en este libro, el AWT original se tarden escribir slo seis

semanas, fue modelado con controles HTML y asignadauna ventana del

sistema operativo por componente. Dado que los programadoresllegaban a

utilizar gran cantidad de controles, los colaboradores empezarona producir

sus propios conjuntos de controles, lo que hizo que en SunMicrosystems se

pusieran nerviosos. Cuando Netscape introdujo su librerade clases

ZnternetFoundationClasses para usar con Java, stas fueron muypopulares,

Sun decidi actuar y la unin de los esfuerzos de Sun y Netscapedio lugar al

conjunto de componentes Swing como parte de las ClasesFoundation de

Java (JFC).

2
Muchos programadores creen que JFC y Swing son lo mismo, pero no esas;

JFC contiene Swing y otro gran nmero de elementos. Esto es lo que hayen

JFC:

Swing: El gran paquete UI.

Cortar y pegar: Soporte de portapapeles. Accesibilidad: Ayuda a los usuarios

con aquello que no es posible hacer.

Colores del escritorio: Primero se introdujo en Java 1.1.Java 2D:

Soporte mejorado del color, imagen y texto.

Impresin: Originalmente disponible en Java 1.1.

Swing introdujo tres avances significativos:

Utiliza pocos recursos delsistema, aade gran cantidad de componentes

ms sofisticados y permiteconstruir la apariencia de los programas.

1.2 Ventajas y Caractersticas

1.2.1 componentes ligeros

A los componentes Swing se les denomina ligeros mientras que a los


componentes AWT se lesdenominados pesados. La diferencia entre
componentes ligeros y pesados es su orden: la nocin deprofundidad. Cada
componente pesado ocupa su propia capa de orden Z. Todos los
componentes ligerosse encuentran dentro de componentes pesados y
mantienen su propio esquema de capas definido porSwing. Cuando
colocamos un componente pesado dentro de un contenedor que tambin lo
es, sesuperpondr por definicin a todos los componentes ligeros del
contenedor.Lo que esto significa es que debemos intentar evitar el uso de
componentes ligeros y pesados en unmismo contenedor siempre que sea
posible. Esto no significa que no podamos mezclar nunca con
xitocomponentes AWT y Swing, slo que tenemos que tener cuidado y
saber qu situaciones son seguras ycules no. Puesto que probablemente
3
no seremos capaces de prescindir completamente del uso decomponentes
pesados en un breve espacio de tiempo, debemos encontrar formas de que
las dostecnologas trabajen juntas de manera aceptable.
La regla ms importante a seguir es que no deberamos colocar
componentes pesados dentro decontenedores ligeros, que comnmente
soportan hijos que se superponen. Algunos ejemplos de este tipode
contenedores son JInternalFrame, JScrollPane, JLayeredPane, y
JDesktopPane. Ensegundo lugar, si usamos un men emergente en un
contenedor que posee un componente pesado,tenemos que forzar a dicho
men a ser pesado. Para controlar esto en una instancia especfica
deJPopupMenu podemos usar su mtodo setLightWeightPopupEnabled().
Alternativamente podemos llamar al mtodo esttico
setDefaultLightWeightPopupEnabled()de JPopupMenu y pasarle un valor
false para forzar a todos los mens emergentes de una sesin deJava a ser
pesados. Tenga en cuenta que slo afectar a los mens emergentes
creados a partir de que seha hecho la llamada. Es por eso una buena idea
llamar a este mtodo durante la inicializacin.

1.2.2 Independencia de la plataforma

La caracterstica ms notable de los componentes Swing es que estn


escritos al 100% en Java y nodependen de componentes nativos, como
sucede con casi todos los componentes AWT. Esto significaque un botn
Swing y un rea de texto se vern y funcionarn idnticamente en las
plataformasMacintosh, Solaris, Linux y Windows. Este diseo elimina la
necesidad de comprobar y depurar lasaplicaciones en cada plataforma
destino.

1.2.3 Paquete Swing

javax.swingContiene la mayor parte de los componentes bsicos de Swing,


modelos de componente pordefecto, e interfaces.
javax.swing.borderClases e interfaces que se usan para definir estilos de
bordes especficos. Observe que los bordespueden ser compartidos por

4
cualquier nmero de componentes Swing, ya que no soncomponentes por si
mismos.
javax.swing.colorchooserClases e interfaces que dan soporte al
componente JColorChooser, usado para seleccin decolores.
javax.swing.eventEl paquete contiene todos los oyentes y eventos
especficos de Swing. Los componentes Swingtambin soportan eventos y
oyentes definidos en java.awt.event y java.beans.
javax.swing.filechooser

Clases e interfaces que dan soporte al componente JFileChooser, usado

para seleccin deficheros.

javax.swing.plaf

Contiene el API del comportamiento y aspecto conectable usado para definir

componentes deinterfaz de usuario personalizados. La mayora de las clases

de este paquete son abstractas. Lasimplementaciones de look-and-feel,

como metal, motif y basic, crean subclases e implementanlas clases de este

paquete. stas estn orientadas a desarrolladores que, por una razn u otra,

nopueden usar uno de los look-and-feel existentes.

javax.swing.plaf.basic

Consiste en la implementacin del Basic look-and-feel, encima del cual se

construyen loslookand-feels que provee Swing. Normalmente deberemos

usar las clases de este paquete siqueremos crear nuestro look-and-feel

personal.

javax.swing.plaf.metal

Metal es el look-and-feel por defecto de los componentes Swing. Es el nico

look-and-feel queviene con Swing y que no est diseado para ser

consistente con una plataforma especfica.

5
javax.swing.plaf.multi

Este es el Multiplexing look-and-feel.No se trata de una implementacin

normal de look-andfeelya que no define ni el aspecto ni el comportamiento

de ningn componente. Ms bienofrece la capacidad de combinar varios

look-and-feels para usarlos simultneamente. Unejemplo tpico podra ser un

look-and-feel de audio combinado con metal o motif. ActualmenteJava 2 no

viene con ninguna implementacin de multiplexing look-and-feel.

javax.swing.table

Clases e interfaces para dar soporte al control de JTable. Este componente

se usa para manejardatos en forma de hoja de clculo. Soporta un alto

grado de personalizacin sin requerir mejorasde look-and-

feel.javax.swing.textClases e interfaces usadas por los componentes de

texto, incluyendo soporte para documentoscon o sin estilo, las vistas de

estos documentos, resaltado, acciones de editor y personalizacindel

teclado.

javax.swing.text.html

Esta extensin del paquete text contiene soporte para componentes de texto

HTML. (El soportede HTML est siendo ampliado y reescrito completamente

mientras escribimos este libro. Espor ello que la cobertura que le damos es

muy limitada.)

javax.swing.text.html.parser

Soporte para analizar gramaticalmente HTML.

javax.swing.text.rtf

Contiene soporte para documents RTF.

6
javax.swing.tree

Clases e interfaces que dan soporte al componente JTree. Este componente

se usa para mostrary manejar datos que guardan alguna jerarqua. Soporta

un alto grado de personalizacin sin

requerir mejoras de look-and-feel.

javax.swing.undo

El paquete undo contiene soporte para implementar y manejar la

funcionalidaddeshacer/rehacer.

1.2 Eventos Swing

El modelo de eventos que utiliza Swing es el mismo que AWT, el de Java

1.1, aadiendoalgunos nuevos eventos para los nuevos componentes.

Utilizando igualmente las interfacesListener, las clases Adapter o las clases

annimas para registrar los objetos que se encargaran de

gestionar los eventos.Algunos de los nuevos eventos son:

a.) Eventos de bajo nivel

MenuKeyEvent

MenuDragMouseEvent

b.) Eventos de alto nivel

AncestorEvent: Antecesor aadido desplazado o eliminado.

CaretEvent: El signo de intercalacin del texto ha cambiado.

ChangeEvent: Un componente ha sufrido un cambio de estado.

DocumentEvent: Un documento ha sufrido un cambio de estado.

HyperlinkEvent: Algo relacionado con un vnculo hipermedia ha cambiado.

7
InternalFrameEvent: Un AWTEvent que aade soporte para

objetosJInternalFrame.

ListDataEvent: El contenido de una lista ha cambiado o se ha aadido o

eliminadoun intervalo.

ListSelectionEvent: La seleccin de una lista ha cambiado.

MenuEvent: Un elemento de men ha sido seleccionado o mostrado o bien

noseleccionado o cancelado.

PopupMenuEvent: Algo ha cambiado en JPopupMenu.

TableColumnModelEvent: El modelo para una columna de tabla ha

cambiando.

TableModelEvent: El modelo de una tabla ha cambiado.

TreeExpansionEvent: El nodo de un rbol se ha extendido o se ha

colapsado.

TreeModelEvent: El modelo de un rbol ha cambiado.

TreeSelectionEvent: La seleccin de un rbol ha cambiado de estado.

UndoableEditEvent: Ha ocurrido una operacin que no se puede realizar.

1.3 Modelos de componentes Swing

En principio implementa de nuevo todos los componentes grficos existente

en el AWT, pero en este caso con implementaciones ligeras, o lighweight,

con todas las ventajas que esto implica.

Adems aade nuevas y tiles funcionalidades a estos componentes, tales

como la posibilidad de presentar imgenes o animaciones en botones,

etiquetas, listas o casi cualquier elemento grfico.

8
Este paquete nuevo est enteramente basado en AWT y ms

especficamente en el soporte para interfaz de usuario ligero. Debido a ello y

a ser puro Java, es posible hacer aplicaciones basadas en Swing desde la

plataforma 1.1.5 y que funcione sin ningn problema con la JVM de dicha

plataforma, as como con la incluida junto con los navegadores ms

actuales, lo que asegura que un applet realizado usando estos nuevos

componentes funcionar sin problemas en dichos navegadores.

Entre los componentes que se incorporan en Swing est la

reimplementacin de todos los componentes grficos existentes en AWT y

que, para no confundir con los antiguos, ahora empiezan todos por J. As en

vez de Button, tenemos JButton.

La mayor diferencia entre los componentes AWT y los componentes Swing

es que stos ltimos estn implementados sin nada de cdigo nativo. Esto

significa que los componentes Swing pueden tener ms funcionalidad que

los componentes AWT, porque no estn restringidos al denominador comn,

es decir las caractersticas presentes en cada plataforma. El no tener cdigo

nativo tambin permite que los componentes Swing sean vendidos como

aadidos al JDK 1.1, en lugar de slo formar parte del JDK 1.2. Incluso el

ms sencillo de los componentes Swing tiene capacidades que van ms all

de lo

que ofrecen los componentes AWT.

Por ejemplo:

Los botones y las etiquetas Swing pueden mostrar imgenes en

lugar de o adems deltexto.

9
Se pueden aadir o modificar fcilmente los bordes dibujados

alrededor de casicualquier componente Swing. Por ejemplo, es fcil

poner una caja alrededor de uncontenedor o una etiqueta.

Se puede modificar fcilmente el comportamiento o la apariencia de

un componente

Swing llamando a mtodos.

Los componentes Swing no tienen porque ser rectangulares. Por ejemplo,

los botonespueden ser redondos.

Bordes complejos: Los componentes pueden presentar nuevos tipos de

bordes. Ademsel usuario puede crear tipos de bordes personalizados.

Otro mejora importante es que ahora todos los componentes pueden

presentar una pequealeyenda de texto con una breve explicacin, que es

conocida como tooltip.

1.4 Descripcin de algunos componentes Swing

Se da una descripcin breve de cada componente por la diversidad de

mtodos que contienen.

Jframe: se trata de la implementacin de la clase Frame aadiendo nuevas

funcionalidades y una nueva filosofa, ya que ahora un Frame contiene

varios tipos de paneles.

Jpanel: es el nuevo contenedor bsico de componentes grficos.

JscrollPane: esta nueva implementacin de un panel con barra de

desplazamiento no se limita slo a proporcionar barras de desplazamiento

en caso de que los componentes que contengan no entren en l rea de

10
visualizacin, sino que tambin se encarga de proporcionar barras de

desplazamiento a todo el resto de componentes grficos existente.

Japplet: Se trata de la reimplementacin de la clase applet para que sta

pueda aprovechar todas las nuevas caractersticas existentes.

Jbutton: botn que adems de texto puede contener imgenes en cualquier

posicin en relacin con el texto.

JtoggleButton: se trata de una clase que no tiene equivalentes en AWT.

Representa un botn que se mantiene presionado aunque dejemos de

presionar connuestro ratn sobre l, pero visualmente no se difiere de un

Jbutton cuando no est activado.

Jlabel: etiqueta de texto que puede contener imgenes en cualquier

posicin en relacin con el texto.

JtextField: Componente que sirve para conseguir la entrada de texto por

parte del usuario.

JtextPane: se trata tambin de un panel para visualizar texto, con la

salvedad de quetiene la capacidad de mutar en relacin al tipo de texto que

se desee mostrar para poder visualizarlo correctamente.

Jlist: presenta una lista de elementos de entre los que se puede elegir uno o

varios simultneamente.

JdesktopPane: se trata de un panel base para el desarrollo de aplicaciones

MDI.

JinternalFrame: este panel no es una ventana en s, sino que simula una

ventanainterior a un JdesktopPane. Como ventana interior puede ser

movida, cerrada, organizada.

Jtable: este componente presenta una rejilla en la que se puede colocar

cualquiercomponente Swing.

11
JcheckBox: es similar al componente checkbox que encontramos en

cualquierlenguaje y que permite mostrar al usuario si la opcin est

seleccionada o no.

JpasswordField: se encuentra justo por debajo de Jtextfield en la jerarqua

decomponentes, y permite la edicin de texto sin realizar un eco de los

caracterestecleados en pantalla, que son sustituidos por un carcter .

JtextArea: hereda de JtextComponent, con la diferencia es que un rea de

texto permite la edicin de mltiples lneas. Hay que tener en cuenta que si

queremos tener la capacidad de desplazarnos a lo largo de un texto que no

cabe en el componente tendremos que colocar el JtextArea en un

JscrollPane.

JprogressBar: las barras de progreso permiten ver de forma grfica la

evolucin deuna tarea. Normalmente el avance se mide en porcentaje y la

barra se acompaa de la visualizacin en texto del valor de dicho porcentaje.

Java incorpora otra posibilidad para esta tarea: un monitor de progreso, que

permite ver el avance de un proceso de forma ms sencilla que las barras.

Adems al ser mostradas en un cuadro de dialogo, el usuario puede

cerrarlas en cualquier momento e incluso llegar a cancelar el proceso.

JcomboBox: es similar al Choice de AWT. Dispone de una lista desplegable

deposibles valores, pero si no encontramos entre ellos el valor que

buscamos, podemosteclearlo(si hemos habilitado la opcin con

setEditable(true)). Este control deSwing presenta una facilidad aadida:

cuando pulsamos la inicial de la opcin que buscamos, nos lleva

directamente al primer trmino de la lista que empiece por dicha letra.

12
CAPTULO II

2.1. Layouts

Swing incorpora nuevos gestores de impresin, ampliando los cinco que

AWT incorporaba.

Entre ellos conviene destacar los siguientes:

BoxLayout: Es similar al FlowLayout de AWT, con la diferencia de

que con l se pueden especificar los ejes (x o y). Viene

incorporada en el componente Box, pero est disponible como

una opcin en otros componentes.

OverlayLayout: Todos los componentes se aaden encima de

cada componenteprevio.

SpringLayout: El espacio se asigna en funcin de una serie de

restriccionesasociadas con cada componente.

ScrollPaneLayout.

ViewportLayout.

2.2. Look &Feel

Otra caracterstica que introduce Swing es que se puede especificar el

Aspecto y Comportamiento (Look &Feel o L&F) que utilice el GUI de nuestro

programa. Por el contrario, los componentes AWT siempre tienen el aspecto

y comportamiento de la plataforma nativa. Desde el cdigo de la aplicacin o

applet Swing se puede exportar un Look &Feel diferente al nativo de la

plataforma con el mtodo UIManager.setLookAndFeel.

En las siguientes figuras podremos observar tres de los L&F de Swing en la

misma aplicacin.

13
14
2.3. Nuevas caractersticas

2.3.1 Action Con objetos Action, el API Swing proporciona un soporte

especial para compartir datos y estados entre dos o ms componentes que

pueden generar eventos Action. Por ejemplo, si tenemos un botn y un tem

de men que realizan la misma funcin, podramos considerar la

Utilizacin de un objeto Action para coordinar el texto, el icono y el estado de

activado de los dos componentes.

2.4. Modelos de datos y estados separados

La mayora de los componentes Swing no-contenedores tienen modelos. Por

ejemplo, un botn (JButton) tiene un modelo (ButtonModel) que almacena el

estado del botn - cul es su mnemnico de teclado, si est activado,

seleccionado o pulsado, etc. Algunos componentes tienen mltiples

modelos. Por ejemplo, una lista (JList) usa un ListModel que almacenalos

contenidos de la lista y un ListSelectionModel que sigue la pista de la

seleccinactual de la lista.

Normalmente no se necesita conocer los modelos que usa un componente.

Por ejemplo,casi todos los programas que usan botones tratan directamente

con el objeto JButton, y no lo hacen en absoluto con el objeto ButtonModel.

Entonces Por qu existen modelos separados? Porque ofrecen la

posibilidad de trabajar con componentes ms eficientemente y para

compartir fcilmente datos y estados entre componentes. Un caso comn es

cuando un componente, como una lista o una tabla, contiene muchos datos.

Puede ser mucho ms rpido manejar los datos trabajando directamente con

un modelo de datos que tener que esperar a cada peticin de datos al

15
modelo. Se puede usar el modelo por defecto del componente o implementar

uno propio.

Las clases Model son una importante innovacin que facilita la programacin

siguiendo la arquitectura MVC (modelo-vista-controlador) ya que separa para

cada componente una clase de modelo de datos y otra de interfaz, aunque

con la funcionalidad de la interfaz se podra controlar todo totalmente sin

ayuda del modelo de datos de ese componente.

2.5. Soporte para tecnologas asistivas

Las tecnologas asistivas para minusvlidos como los lectores de pantallas

pueden usar el API de accesibilidad para obtener informacin sobre los

componentes Swing. Incluso sin hacer nada, un programa Swing

probablemente funcionar correctamente con tecnologas asistivas, ya que

el API de accesibilidad est construido internamente en los componentes

Swing. Sin embargo, con un pequeo esfuerzo extra, se puede hacer que

nuestro programa funcione todava mejor con tecnologas asistivas, lo que

podra expandir el mercado de nuestro programa.

2.6. Applets

Los applets son pequeos programas Java que se incluyen en pginas Web

y cuyo cdigo se descarga desde el sevidor para ser ejecutado localmente

por un navegador. Por tanto, para trabajar con applets es necesario conocer

algunas de las caractersticas de las pginas Web y del lenguaje en que

stas estn escritas, y el captulo comienza exponiendo conocimientos

bsicos sobre HTML. Tambin se explicar la estructura fundamental de un

applet. Teniendo en cuenta que las applets trabajan con IGU y estn guiadas

16
por eventos, el captulo se apoya en los conocimientos aportados por otros

anteriores para la creacin de los primeros applets.

Estructura De Un Applet

La clase Applet extiende la clase Panel del AWT y Panel extiende Container

que, a su vez, extiende Component, proporcionndose as a las

upplets todas las herramientas necesarias en la programacin IGU (Znterfuz

Grfica de Usuario) y, al igual que todos los programas que trabajan con

IGU, las upplets estn guiadas por eventos.

Las upplets disponen de cinco mtodos que pueden sobre escribir, aunque

no es obligatorio que lo hagan, pues tienen implementaciones por defecto

que se invocarn automticamente durante la ejecucin de la misma. Cuatro

de estos mtodos son proporcionados por la clase App 1 et :

publicvoidinit ( ) Inicializa el applet y es invocado por elAppletviexlev o el

navegador cuando se carga el applet.publicvoidstart ( ) Se ejecuta a

continuacin de init y tambin cada vez que el usuario del navegador

regresa a lapgina HTML donde reside el upplet y debe contenerlas tareas

que deban llevarse a cabo en estas ocasiones.publicvoid stop() Se ejecuta

cuando el usuario abandona la pginaHTML en la que reside el

applet.publicvoiddestroy ( ) Libera todos los recursos que el applet est

utilizandoy se ejecuta antes de que el applet se descargue cuando el usuario

sale de la sesin de navegacin.

17
2.6.1. Applets en Swing

La clase JApplet es el equivalente de Swing de la clase Applet. JApllet se

parece aJFrame en que admite un panel de contenido separado. A este

contenedor se accede a travsdel mtodo getContentPane(). La barra de

mens debe ser un objeto de la claseJMenuBar.

18
CAPITULO III

3.1. Herencia de Componentes y Contenedores

Esta seccin presenta algunos de los componentes ms utilizados de Swing

y explica como los componentes de un GUI entran juntos en un contenedor.

Para ilustrarlo, usaremos el programa SwingApplication presentado en Una

Ruta Rpida por el Cdigo de una Aplicacin Swing. Y aqu est su aspecto

de nuevo.

SwingApplication crea cuatro componentes Swing muy utilizados.

un frame, o ventana principal (JFrame)

un panel, algunas veces llamado pane (JPanel)

un botn (JButton)

una etiqueta (JLabel)

El frame es un contenedor de alto nivel. Existe principalmente para

proporcionar espacio para que se dibujen otros componentes Swing.Los

otros contenedores de alto nivel ms utilizados son los dilogos (JDialog) y

los applets (JApplet).

El panel es un contenedor intermedio. Su nico propsito es simplificar el

posicionamiento del botn y la etiqueta.

Otros contenedores intermedios, como los paneles desplazables,

(JScrollPane) y los paneles con pestaas (JTabbedPane), tpicamente

juegan un papelms visible e interactivo en el GUI de un programa.

19
El botn y la etiqueta son componentes atmicos -- componentes que

existen no para contener otros componentes Swing, sino como entidades

auto-suficientes que representan bits de informacin para el usuario.

Frecuentemente, los componentes atmicos tambin obtienen entrada del

usuario. El API Swing proporciona muchos componentes atmicos,

incluyendo combo boxes (JComboBox),campos de texto (JTextField), y

tablas (JTable).

Aqu podemos ver un diagrama con el rbol de contenidos de la ventana

mostrada por Swing Application.

Este diagrama muestra todos los contenedores creados o usados por el

programa, junto con los componentes que contienen. Observa que si

aadimos una ventana - por ejemplo, un dilogo - la nueva ventana tendra

su propio rbol de contenidos, independiente del mostrado en esta figura

Como muestra la figura, incluso el programa Swing ms sencillo tiene

mltiples niveles en su rbol de contenidos. La raz del rbol de contenidos

es siempre un contenedor de alto nivel. Este contenedor proporciona

espacio para que sus componentes Swing descendentes se dibujen a s

mismo.

20
todo contenedor de alto nivel contiene indirectamente un contenedor

intermedio conocido como panel de contenido. Para la mayora de los

programas no necesitas saber qu pasa entre el contenedor de alto nivel y

su panel de contenido. (Si realmente quieres verlo, puedes ver Cmo usar

Paneles Raz.)Cmo regla general, el panel de contenido contiene,

directamente o indirectamente, todos los componentes visibles en el GUI de

la ventana. La gran excepcin a esta regla es que si el contenedor de alto

nivel tiene una barra de men, entonces sta se sita en un lugar especial

fuera del panel de contenido.

Para aadir componentes a un contenedor, se usa una de las distintas

formas del mtodo add. Este mtodo tiene al menos una rgumento -- el

componente a aadir. Algunas veces se requiere un argumento adicional

para proporcionan informacin de distribucin.

Por ejemplo, la ltima lnea del siguiente cdigo de ejemplo especifica que el

panel debera estar en el centro de su contenedor (el panel de contenido).

3.2. Control de Distribucin

Las siguientes figuras muestran los GUIs de cinco programas, cada uno de

ellos muestra cinco botones. Los botones son idnticos, y el cdigo de los

programas es casi idntico. Entonces por qu parecen tan diferentes?

Porque usan diferentes controladores de distribucin para controlar el

tamao y posicin de los botones.

21
Control de Distribucin es el proceso de determinar el tamao y posicin de

los componentes. Por defecto, cada contenedor tiene un controlador de

distribucin -- un objeto que realiza el control de la distribucin de los

componentes dentro del contenedor. Los componentes pueden

proporcionarle al controlador de disposicin sus preferencias en cuanto a

tamao y alineamiento, pero la ltima palabra la tiene el controlador de

disposicin.

La plataforma Java suministra cinco controladores de disposicin

comunmente utilizados: BorderLayout, BoxLayout,

FlowLayout,GridBagLayout, y GridLayout. Estos controladores de

distribucin estn diseados para mostrar mltiples componentes a la vez, y

se han visto en la figura anterior. Una sexta clase proporcionada,

CardLayout, es un controlador de disposicin de propsito general usadoen

combinacin con otros controladores de distribucin. Puedes encontrar

detalles sobre cada uno de estos seis controladores, incluyendo claves para

elegir el apropiado, en Usar Controladores de Distribucin. Siempre que se

use el mtodo add para poner un componente en un contenedor, debemos

tener en cuenta el controlador de distribucin del contenedor. Algunos


22
controladores como BorderLayout requiere que especifiquemos la posicin

relativa del componente en el contenedor, usando un argumento extra para

el mtodo add. Ocasionalmente, un controlador de distribucin

comoGridBagLayout requiere elaborados procesos de configuracin. Sin

embargo, muchos controladores de distribucin simplemente sitan los

componentes en el orden en que fueron aadidos a su contenedor.

Todos esto probablemente suena ms complicado de lo que es. Si quieres

puedes copiar el cdigo de nuestros ejemplos de Usar Componentes Swing

o buscar el controlador de distribucin individual en Usar Controladores de

Distribucin. Generalmente, slo tendrs que seleccionar el controlador de

distribucin de dos tipos de contenedores: paneles de contenido (que usan

BorderLayout por defecto) y JPanel (que usan FlowLayout por defecto).

Esta seccin describe algunas de las tareas ms comunes de la distribucin.

3.2.1. Seleccionar el Controlador de Distribucin

Podemos cambiar fcilmente el controlador de distribucin que usa un

contenedor. Slo se debe llamar al mtodo setLayout del contenedor. Por

ejemplo, aqu est el cdigo que hace que un panel use BorderLayout.

JPanel pane = new JPanel();

pane.setLayout(new BorderLayout());

Aunque recomendamos que uses controladores de distribucin, se puede

realizar la distribucin sin ellos. Seleccionando una propiedad de distribucin

del contenedor a nulo, podemos hacer que el contenedor no use ningn

controlador de distribucin. Con este esquema, llamado posicionamiento

absoluto, podemos especificar el tamao y posicin de cada componente

dentro del contenedor. Una desventaja del posicionamiento absoluto es que

23
no se ajusta bien cuando se redimensiona el contenedor de alto nivel.

Tampoco se ajusta bien a las diferencias entres usuarios y sistemas, como

los diferentes tamaos de fuente.

3.2.2. Proporcionar Consejos sobre un Componente

Algunas veces necesitamos personalizar el tamao que un componente

proporciona al controlador de distribucin del contenedor, para que el

componente se vea bien. Se puede hacer esto proporcionando los tamaos

mnimo, preferido y mximo del componente.

Tambin podemos llamar a los mtodos de seleccin de tamao del

componente -- setMinimumSize, setPreferredSize, y setMaximumSize - o

podemos crear una subclase del componente que sobreescriba los mtodos

apropiados -- getMinimumSize, getPreferredSize, y getMaximumSize.

Actualmente, el nico controlador de distribucin en la plataforma Java que

presta atencin a la peticin de tamao mximo del componente es

BoxLayout.

Adems de proporcionar preferencias de tamao, podemos especificar

preferencias de alineamiento. Por ejemplo, podemos especificar que los

bordes superiores de dos componentes deberan estar alineados. Se

seleccionan los consejos de alineamiento llamando a los mtodos

setAlignmentX y setAlignmentY del componente, o sobreescribiendo los

mtodos, getAlignmentX y getAlignmentY del componente. Realmente

BoxLayout es el nico controlador de distribucin que presta atencin a los

consejos de alineamiento.

24
3.2.3 Poner Espacio entre Componentes

Tres factores influyen en la cantidad de espacio entre los componentes

visibles de un contenedor.

3.2.3.1. El controlador de distribucin.

Algunos controladores de distribucin ponen automticamente espacio entre

los componentes; otros no. Algunos permiten incluso especificar la cantidad

de espacio entre los componentes. Puedes ver Distribuir Componentes

dentro de un contenedor sobre el soporte de espaciado de cada controlador

de distribucin.

3.2.3.2. Componentes invisibles.

Se pueden crear componentes de peso ligero que no realicen dibujo, pero

que ocupen espacio en el GUI. Frecuentemente se usan los componentes

invisibles en contenedores controlados por BoxLayout. Puedes ver Cmo

usar BoxLayout paraver ejemplos de uso de componentes invisibles.

3.2.3.3. Bordes vacos

No importa cul sea el controlador de distribucin, podemos afectar la

aparente cantidad de espacio entre componentes aadindoles bordes. Los

mejores candidatos para los bordes vacos son los que tpicamente no tienen

bordes, como los paneles y las etiquetas. Algunos otros componentes, como

paneles desplazables, no funcionan bien con bordes en algunas

implementaciones del Aspecto y Comportamiento, debido a la forma en que

implementan su cdigo de dibujo. Para ms informacin sobre los bordes

puedes ver Cmo usar Bordes.

25
3.2.4. Cmo Ocurre el Control de Distribucin

Aqu hay un ejemplo de secuencia de control de distribucin para un frame

(JFrame).

1.- Despus de que el GUI est construido, se llama al mtodo pack

sobre el JFrame. Esto especifica que el frame debera serde su

tamao preferido.

2.- Para encontrar el tamao preferido del frame, el controlador de

distribucin aade el tamao de los lados del frame al tamao

preferido del componente directamente contenido por el frame. Esto

es la suma del tamao preferido del panel decontenido, ms el

tamao de la barra de men del frame, si existe.

3.- El controlador de disposicin del panel de contenido es responsable

de imaginarse el tamao preferido del panel de contenido. Por

defecto, este controlador de disposicin es un objeto BorderLayout.

Sin embargo, asumamos que lo hemos reemplazado con un objeto

GridLayout que se ha configurado para crear dos columnas. Lo

interesante de gridlayout es que fuerza a que todos los componentes

sean del mismo tamao, e intenta hacerlos tan anchos como la

anchura preferida del componente ms ancho, y tan altos como la

altura preferida del componente ms alto. Primero, el controlador

gridlayout pregunta el panel de contenido por su inserts - el tamao

del borde del panel de contenido, si existe. Luego, el controlador de

gridlayout le pregunta a cada componente del panel de contenido

sus tamaos preferidos, anotando la mayor anchura preferida y la

mayor altura preferida. Luego calcula el tamao preferido del panel

de contenido.

26
4.- Cuando a cada botn se le pide su tamao preferido, el botn

primero comprueba si el usuario ha especificado un tamao

preferido. Si es as, reporta este tamao. Si no es as, le pregunta a

su Aspecto y Comportamiento el tamao preferido.

3.3. Construccin de GUI en Swing

La construccin de una GUI en Swing es muy similar a la construccin de

GUI en el AWT, exceptuando que la primera tendr muchas ms clases de

componentes con las que trabajar. A continuacin se describen las clases

que se usan para la construccin de GUI y se sealan las mejoras que

Swing proporciona, comparando stas clases con las de AWT.

3.3.1 Ventanas

Swing, al igual que AWT, proporciona una jerarqua de clases Window. Las

clases de laventana de Swing constituyen extensiones de la jerarqua de

clases Window del AWT. Laclase JWindow ampla la clase Window. La clase

JFrame ampla la clase JFrame delAWT y la clase JDialog ampla la clase

Dialog del AWT.Las clases JWindow, JFrame y JDialog difieren de sus

homlogos del AWT enque utilizan un panel de contenido separado para

agregar y disear componentes GUI. Este panel es un objeto Container al

que se accede a travs del mtodogetContentPane(). El panel de contenido

es una parte de un objeto JRootPane quecontiene otros paneles que se

usan para sobreponerse a componentes e interceptar eventos del ratn y del

teclado.

27
3.3.2. Mens

Los mens de Swing, al igual que las ventanas de Swing, son anlogos a

sus homlogos delAWT. Las clases JMenuBar, JMenu, JMenuItem,

JCheckBoxMenuItem yJRadioButtonMenuItem se utilizan de la misma forma

que las clases MenuBar,Menu, MenuItem y CheckboxMenuItem del AWT,

slo que con una diferenciafundamental. Las clases de mens de Swing son

todas ellas subclases de la claseJComponent y, por tanto, de la clase

Component. Esto implica que los mens de Swing, al contrario que sus

homlogos del AWT, constituyen componentes de primera clase y se

pueden usar con cualquiera de las clases Container. La clase JPopupMenu

es equivalente a la clase PopupMenu del AWT. Otra atractiva caracterstica

de los mens de Swing es la posibilidad de utilizar imgenes de iconos en

los mens. Se puede aadir una imagen a un elemento de men por medio

de su constructor.

3.3.3. Paneles

La clase JPanel es el equivalente de Swing a la clase Panel del AWT. Esta

clase, al igual que sucede en otras clases de JComponent, ofrece la

posibilidad de agregar un borde.

3.3.4. Diseos

Los contenedores de Swing admiten todos los diseos posibles del AWT,

entre los que seincluye el diseo null, adems de admitir otros diseos

nuevos.

28
3.3.5. Iconos

Una de las caractersticas ms tiles que Swing ofrece es la posibilidad de

agregar iconos a los componentes, como etiquetas, botones, elementos de

men, etc. La interfaz Icon define los mtodos que las clases de iconos

deben implementar. La clase ImageIcon proporciona una implementacin

predeterminada de esta interfaz. Los objetos ImageIcon

se pueden construir a partir de archivos de imagen, URL que apuntan a

archivos de imagenu objetos Image del AWT.

3.3.6. Bordes

El paquete java.awt.swing.border proporciona la interfaz Border, la cual

define los mtodos que necesitan ser implementados por todas las clases de

bordes. La claseAbstractBorder implementa la interfaz Border y es la

superclase de las clases debordes de Swing.

3.3.7. Informacin sobre herramientas

La clase JToolTip ofrece la posibilidad de agregar cuadros de texto

emergentes queaparecen cuando se posa el ratn sobre un componente.

Estos componentes, que admiteninformacin sobre herramientas, permiten

que stas vengan especificadas en sus respectivosconstructores. El mtodo

setToolTipText() de la clase JComponent se puede usartambin para

especificar la informacin sobre herramientas de un componente.

3.3.8. Barras de herramientas

La clase JToolBar ofrece la posibilidad de utilizar barras de herramientas

movibles y acoplables con Swing. Los objetos de esta clase son

29
contenedores de otros componentesSwing o del AWT. Los objetos JToolBar

tpicos contienen objetos JButton que se construyen por medio de iconos de

imagen.

3.3.9. Etiquetas y botones

Las clases JLabel y JButton proporcionan los equivalentes de Swing a las

clasesLabel y Button del AWT. La implementacin de Swing ofrece la

ventaja de poder usariconos a la vez que texto. Los constructores JLabel() y

JButton() permiten que se especifique un icono. Adems, ambas clases

admiten el mtodo setIcon() para establecer un icono una vez que se ha

construido el objeto.

3.3.10. Componentes de texto

Las clases JTextComponent, JTextField y JTextArea son los equivalentes

deSwing de las clases TextCompoenent, TextField y TextArea del AWT.

Adems,Swing proporciona la clase TextPane para trabajar con documentos

de texto, que se pueden marcar con estilos de texto diferentes.

3.3.11. Listas y cuadros combinados

Las clases JComboBox y JList ofrecen la posibilidad de presentarle al

usuario una listade selecciones grficas de texto. La clase JComboBox

implementa una lista desplegable,parecida a una lista de opciones Motif. La

clase JList es una lista de selecciones individuales o mltiples en las que se

pueden ver muchos elementos.

30
3.3.12. Deslizadores y barras de progreso

Las clases JSlider y JProgressBar carecen de equivalentes en el AWT.

Ambasclases admiten orientaciones horizontales y verticales. La clase

JProgressBar se utiliza tpicamente para mostrar el progreso de una tarea,

como la carga de una imagen. La claseJSlider se usa para ajustar o

controlar el valor de una variable dentro del intervalo admisible.

3.3.13. Barras de desplazamiento

El JScrollPane simplifica en gran medida el uso de las barras de

desplazamiento. El mtodo getViewport() devuelve un objeto JViewport en el

que se pueden ir aadiendo componentes. En la mayora de los casos, slo

necesita agregar componentes al objeto JViewport para que uno se pueda

desplazar automticamente por ellos.

3.3.14. Tablas

La clase JTable es otro componente de Swing que carece de equivalente en

AWT.JTable ofrece una posibilidad muy flexible para crear y mostrar tablas.

Permite construir tablas a partir de arrays o vectores de objetos, o bien a

partir de objetos que implementan lainterfaz TableModel.La interfaz

JTableModel define mtodos para los objetos que especifican el

contenido de una tabla. La clase AbstractTableModel ofrece una

implementacinpredeterminada de la interfaz JTableModel. Esta clase se

ampla tpicamente para proporcionar una implementacin personalizada de

modelo de tabla. La clase JTable ofrece la posibilidad de editar tablas. El

mtodosetCellEditor() permite que un objeto de la interfaz TableCellEditor se

ha identificado como el editor de celdas de una tabla.

31
3.3.15. rboles

Una de las clases nuevas ms interesantes que ofrece Swing es la clase

JTree. Esta clase implementa una estructura en forma de rbol que se

puede usar para mostrar datos jerrquicos. La interfaz TreeNode define

mtodos que tienen que implementar los nodos de un objeto JTree. La clase

DefaulMutableTreeNode proporciona una implementacin predeterminada

de la interfaz TreeNode. Los rboles se crean construyendo objetos de la

interfaz TreeNode para luego aadirlos todos juntos (a travs del mtodo

add()). Cuando todos los objetos TreeNode se hayan juntado, el

objetoTreeNode resultante se pasa al constructor JTree.La presentacin

predeterminada de un objeto JTree utiliza un icono de carpeta con el fin de

identificar los nodos de rbol que tienen nodos inferiores y un icono de

archivo para identificar las ramificaciones del rbol. El mtodo

setCellRenderer() de la claseJTree se usa para identificar una prestacin de

rbol alternativa.

3.4. Manejo de eventos en Swing

Cada vez que el usuario teclea un carcter o pulsa un botn del ratn, ocurre

un evento. Cualquier componente puede ser notificado del evento. Todo lo

que tiene que hacer es implementar el interface apropiado y ser registrado

como un oyente de evento del evento fuente apropiado. Los componentes

Swing pueden generar muchas clases de evento. El paquete

java.awt.swing.event define una serie de interfaces auditoras de eventos y

clases de eventos que se usan con los componentes Swing. Adems,

muchos de los componentes Swing tambin utilizan eventos del AWT.

En la figura se muestra ejemplos de eventos:

32
Cada evento est representado por un objeto que ofrece informacin sobre

el evento e identifica la fuente. Las fuentes de los eventos normalmente son

componentes, pero otros tipos de objetos tambin pueden ser fuente de

eventos. Como muestra la siguiente figura, cada fuente de evento puede

tener varios oyentes registrados. Inversamente, un slo oyente puede

registrarse con varias fuentes de eventos.

Figura relacin evento - oyente

3.5. Swing: Cuadros de texto. Botones y casillas de activacin

Este literal se analiza las etiquetas, botones, cuadros de texto, botones

toggle, casillas de activacin y botones de opcin en Swing. Todos ellos son

controles esenciales que ocupan gran parte de los fundamentos de Swing. A

excepcin de los botones toggle, todos estos controles le deberan resultar

familiares de la programacin AWT. Gran parte de la funcionalidad de estos

33
controles Swing tiene su correspondencia en la de AWT, y aqu resaltaremos

lo que es diferente. (Hay que tener en cuenta que todos los controles Swing

aparecen de diferentes formas segn las diversas apariencias; es importante

recordar esto cuando se empiece a programar con ellos).

3.5. 1. Etiquetas y cuadros de texto

Las etiquetas son controles bsicos Swing que slo visualizan una lnea de

texto. Sera razonable pensar que las etiquetas soportan varias lneas de

texto en Swing, pero slo soportan una. Por otro lado, soportan algo que no

tienen las etiquetas AWT: imgenes. Veremos cmo utilizar la

claselmagelcon para aadir imgenes a las etiquetas. La gestin del texto en

los componentes Swing es uno de los apartados que veremos ms tarde en

este libro. Ahora, iniciaremos este tema con los cuadros de texto, viendo

cmo funcionan en este captulo y ms adelante.

3.5. 2. Botones

En Swing, cualquier botn se construye con la clase AbstractButton, y en

este captulo veremos esta clase. Como se poda esperar, los botones Swing

tienen ms capacidad que sus correspondientes en AWT, incluyendo la

capacidad de visualizar imgenes, usar mnemnicos (combinacin de

teclas), disear un botn como botn por defecto de una ventana y fijar los

mrgenes y alineacin del texto de un botn. Adems, a un botn se le

pueden asignar mltiples imgenes para gestionar el caso en que el ratn se

mueva sobre el botn, y ms cosas. Lo veremos a continuacin. Botones

toggle Swing introduce los botones toggle, que son botones que, cuando se

hace clic sobre ellos, permanecen pulsados hasta que volvemos a hacer clic.

34
Los botones toggle son como las casillas de activacin y botones de opcin

que parecen botones estndar; de hecho, la clase JToggleButton, es la clase

base para las clases de estos controles en Swing, y adems se pueden

instanciar objetos de esta clase directamente. Al igual que ocurre con las

casillas de activacin y botones de opcin, se pueden agrupar botones

toggle y usar imgenes en ellos.

3.5.3. Casillas de activacin y botones de opcin

AWT tiene casillas de activacin y botones de opcin, pero los gestiona de

diferente forma que Swing. En Swing, los botones de opcin tienen su propia

clase (los botones de opcin, son casillas de activacin en AWT), y con ellos

se pueden usar imgenes. De hecho, veremos que cuando se utilizan las

imgenes con las casillas de activacin y los botones de opcin, hay algunos

asuntos que considerar.

3.5.4. Usar etiquetas

La clase de las etiquetas peso pesado en Swing es JLabel. Este es el

diagrama de herencia de esta clase:

java. 1ang.Object
Ijava.awt.Component
1 j a v a .a w t . C o n t a i n e r
Ijavax.swing.JComponent
I j a v a x .s w i n g . J L a b e l

Los constructores de la clase JLabel se encuentran en la tabla 1.1 y sus

mtodos en la tabla 1.2.


35
Constructor Descripcin
Construye un objeto JLabel
Jlable
sin imagen.
Construye un objeto JLabelcon la
JLabel(1con imagen)
imagen indicada.
Construye un objeto JLabelcon la
JLabel(lconimagen, int alineacin
imagen y la alineacinhorizontal
horizontal)
especificadas.
Construye un objeto JLabelcon el
JLabel(String texto)
texto indicado.
Construye un objeto JLabel con el
JLabel(String texto, /con icono, int
texto imagen y alineacin horizontal
alineacin-horizontal)
indicados.
JLabel(Stringtext0, Construye un objeto JLabel con el
intalineacinhorizontal) texto y alineacin horizontal
indicado.

Tabla 1.2

3.6. Swing: viewports. Desplazamiento. Deslizadores y listas

En esta seccin se indica algunos temas importantes de la Swing:

Viewport, paneles de desplazamiento, deslizadores, barras de

desplazamiento y cuadros de lista. Los controles de este captulo tienen

todos una cosa en comn: el desplazamiento. El de lista, en concreto, es un

control muy importante en la Swing, pero no procesa el desplazamiento por

s mismo, por lo que necesitamos comprender cmo funciona con

desplazamiento antes de trabajar con vistas y muchos otros controles de la

Swing.

36
3.6.1. Viewports

La clase JViewport es el corazn del desplazamiento en la Swing. Un

viewport es una ventana dentro de una vista, que visualizar una seccin de

nuestros datos. Podremos desplazar manualmente los Viewports. Utilizando

Viewports, podemos desplazarnos por los datos visualizados, de forma

similar a aquella en que realizamos nosotros mismos el desplazamiento.

Examinaremos el uso de la clase JViewport para desplazar imgenes.

3.6.2. Paneles de desplazamiento

Una forma comn de implementar el desplazamiento en la Swing es utilizar

paneles de desplazamiento, puesto que permiten desplazar componentes.

Varios controles de la Swing, como el control JList, implementan la

interfazScrollable para trabajar con paneles de desplazamiento. De hecho,

stos seutilizan habitualmente con controles JList para crear listas

desplazables.

3.6.3. Deslizadores

Otro control desplazable es el control deslizador de la Swing, soportado por

la clase JSlider. Los deslizadores son similares a los controles que vemos en

los dispositivos de audio que permiten deslizar un mando a lo largo de una

pista. De hecho, los deslizadores son como barras de desplazamiento,

excepto porque explcitamente utilizamos deslizadores para permitir al

usuario seleccionar un valor dentro de un rango continuo.

Puede hacer lo mismo, por supuesto, con barras de desplazamiento, pero

37
los deslizadores se introducen aqu debido a que los usuarios actualmente

esperan que las barras de desplazamiento se utilicen para desplazar otros

controles, como las reas de texto.

3.6.4. Barras de desplazamiento

Cada usuario de una UI conoce las barras de desplazamiento, por supuesto,

y la Swing las soporta al igual que haca el AWT. Utilizaremos la

claseJScrollBar en esta seccin desplazando texto en un applet. Cuando el

cuadro de desplazamiento (tambin llamado burbuja o marcador) se mueva,

el valor de la barra de desplazamiento cambiar. Puede hacer clic sobre los

botones de flecha en los extremos de la barra de desplazamiento para

cambiar el valor de la barra de desplazamiento en el incremento de bloque, y

tambin puede hacer clic sobre la pista de la barra de desplazamiento para

cambiar su valor en su incremento unitario.

3.6.5. Listas

Las listas, soportadas por la clase JList en la Swing, son unos controles muy

populares, debido a que permiten presentar una lista de elementos sencilla

de manejar, ocultando una larga lista de elementos al hacer que el cuadro de

lista sea desplazable. Mostraremos cmo desplazar largas listas y veremos

diversos temas de la Swing. Por ejemplo, puede realizar selecciones

mltiples de diversas formas en los cuadros de lista de la Swing. Tambin

puede visualizar imgenes, manejar eventos de clics de ratn dobles y

triples e incluso an ms.

38
3.7. Swing: barras. Herramientas. Cuadros. Separadores y selectores

3.7.1. Cuadros combinados

Los cuadros combinados son uno de los controles ms importantes en la

programacin de la UI, pero el AWT no tiene un cuadro combinado. La

Swing rectifica esto. Los cuadros combinados con combinaciones de

campos de texto y listas desplazables. Son muy tiles, ya que permiten al

usuario tanto seleccionar un elemento de la lista como introducir su propio

valor en el campo de texto. Los cuadros combinados tambin son controles

muy compactos, debido a que muestran nicamente un elemento y un botn

que el usuario puede utilizar para desplegar la lista de otros elementos. Los

cuadros combinados pueden funcionar como listas desplegables,

proporcionando al usuario un mecanismo incluso an ms compacto para

visualizar los elementos de una lista que el que proporciona un cuadro de

lista, y han pasado a ser muy populares por esa razn. De hecho, la Swing

tiene como valor predeterminado del cuadro combinado que muestre

nicamente una lista desplegable, ya que el valor predeterminado para los

cuadros combinados sera hacerlos no editables, lo que los convierte en

listas desplegables.

3.7.2. Barras de progreso

Las barras de progresos son controles relativamente nuevos, que se han

hecho populares como mecanismo para proporcionar al usuario la indicacin

del progreso de una operacin larga. Las barras de progreso, originalmente

introducidas como mecanismo para mostrar el progreso de un programa de

instalacin, se utilizan ahora para todo tipo de operaciones de consumo de

39
tiempo, como descargas de archivos desde la red Internet. Las barras de

progreso muestran una barra coloreada dentro de ellas que crece (o se

reduce), de forma similar a como lo hace el mercurio en un termmetro, para

mostrar visualmente cmo progresa una operacin. Puede orientar las

barras de progreso tanto horizontal como verticalmente, seleccionar los

colores y etiquetas que use en ellas y manejar sus eventos. Y an ms, las

barras de progreso siguen siendo controles sencillos, ya que tienen

nicamente una funcin: mostrar el progreso de una tarea.

3.7.3. Selectores

Como en la AWT, la Swing soporta cuadros de dilogo. Al contrario que la

AWT, la Swing tambin soporta adicionalmente varios cuadros de dilogo

que no tenemos que crear o personalizar nosotros mismos: selectores de

archivos y selectores de color. Los selectores de archivos permiten al

usuario seleccionar un archivo para abrir o guardar algo, muy similar a

cualquier cuadro de dilogo de archivos estndar. Los selectores de color

permiten al usuario seleccionar un color entre muchos. Ambos selectores

representan cuadros de dilogo estndar y Sun nicamente nos ahorra

tiempo al crearlos. Trabajaremos con ambos selectores en este captulo.

Podemos utilizar inmediatamente en los programas el selector de color, pero

para utilizar los archivos que devuelve el selector de archivos, tendremos

40
3.7.4. Herramientas de ayuda

Las herramientas de ayuda son esas ventanas pequeas que aparecen y

muestran un texto de explicacin (como por ejemplo Descargar ahora o Abrir

nueva carpeta) cuando se detiene el ratn sobre un control. Las

herramientas de ayuda pueden ser muy tiles debido a que los usuarios de

la UI tienen una gran resistencia a leer los manuales. Lo nico que tiene que

hacer el usuario es dejar el ratn sobre su programa para ver qu es lo que

hacen los distintos controles. Por otro lado, tenga en cuenta que muchas

herramientas de ayuda (conectadas con muchos elementos de texto en un

control de texto, por ejemplo) pueden ser contraproducentes y dar una

apariencia de dificultad a un programa.

3.7.5. Separadores

Los separadores son barras horizontales o verticales que le permiten

organizar sus controles en grupos. Aunque se utilizan mayoritariamente en

los mens para dividir elementos de men en agrupaciones lgicas, podr

utilizar separadores en componentes JApplet y JFrame como cualquier otro

control.

41
3.8. Swing: ventanas. Paneles. Marcos internos y cuadros de dialogo

3.8.1. Ventanas

Las clases JWindow y JFrame son el equivalente de las clases Window

yFrame en AWT y sirven para el mismo propsito. Puede utilizar la

claseJWindow para crear una ventana simple; de hecho, no es ms que un

rectngulo blanco. Aunque puede aadir bordes y controles a los objetos

JWindow, normalmente utilizar la clase JFrame para crear ventanas que

presente al usuario.Las clases JDesktopPane y JInternalFrame son nuevas

en Swing, aunquejuntas representan algo que ha llegado a ser muy comn

en las IU: una interfaz de documentos mltiple. Los objetos de la clase

JDesktopPane presentan un espacio en el que puede visualizar mltiples

marcos internos de la clase JInternalFrame. Por ejemplo, una aplicacin de

procesamiento de textos podra permitir al usuario abrir varias vistas del

mismo documento, o de mltiples documentos, utilizando un escritorio con

varias ventanas de marcos internos. Los marcos internos son de poco peso,

y dibujan ventanas que aparecen dentro de otras ventanas. De hecho, los

paneles de escritorio tambin son componentes de poco peso, derivados de

JLayeredPane. Puede aadir ventanas de marcos internos a las capas

seleccionadas de un panel de escritorio.

3.8.2. Cuadros de dilogo

La Swing proporciona bastante soporte para cuadros de dilogo con la clase

JOptionPane. Mediante el uso de mtodos de esta clase, puede visualizar

toda clase de cuadros de dilogo (cuadros de dilogo de mensaje, cuadros

de dilogo de confirmacin, cuadros de dilogo de entrada y muchos

42
ms).Como ver aqu, es sencillo crear cuadros de dilogo utilizando

JOptionPane. Adems de JOption Pane, la Swing tambin posee la clase

JDialog, que puede utilizar como base para sus propias clases de cuadro de

dilogo personalizadas.

3.9. Creacin de paquetes. Interfaces. Archivos JAR y Java Beans

3.9.1. Crear un paquete

La creacin de los paquete es debido que la instauracin de las clases se las

coloca de forma desordenada. Cmo se puede resolver este desorden? La

solucin est en la divisin de las clases en paquetes? Eso permitir

distribuirlos archivos de clase en una estructura de directorios de forma

similar acuando distribuye los archivos porque tiene demasiados. Cuando

se tiene varios archivos de clase, es buena idea distribuirlos en el disco

utilizando una jerarqua de directorios. De hecho, los paquetes Javaf ueron

diseados originalmente para reflejar esa organizacin de archivos. Puede

distribuir archivos de clase en una jerarqua de directorios y permitirque Java

sepa lo que sucede con los paquetes. Por ejemplo, si se tiene un paquete

llamado package, que contiene una claseapp.class, el archivo de clase ira

en un directorio llamado package, como sigue:

package
-app
Mltiples archivos de clase en el mismo paquete irn en el mismo directorio:

packagel

-app

-app3

43
Como el directorio package se encuentra en una localizacin que Java

Buscar, Java buscar los archivos de clase que utilice como parte del

paquete en ese directorio. Tiene que indicarle a qu paquete pertenece un

archivo de clase, utilizando la sentencia packagel en su cdigo. Aqu tiene

un ejemplo donde creamos app.class e indicamos que forma parte de

packagel utilizando la sentencia

package:
packagepackagel;
publicclasc app
public static void main (String args)

System.out.println ("Hola desde Java!");

Una vez compilada app.class y almacenada en el directorio packagel,

podemos entonces importar la clase app en el cdigo con sentencias como

lasiguiente, como haramos con cualquier otro paquete Java:

importpackagel.*;

importpackagel.app;

La herramienta de tiempo de ejecucin de Java tambin conoce los

paquetes; por tanto, debido a que la clase app.class es una aplicacin en s,

podemos ejecutar esta clase con una lnea de comando que especifique el

paquete de la clase app y utilizando un punto (.) para el separador de

directorios:

c:\> java packagel.app

De hecho, el separador de paquetes punto es til cuando creamos paquetes

dentro de paquetes; examine el siguiente tema para ms detalles.

44
3.9.2. Crear paquetes que contienen paquetes

Cuando tenemos gran cantidad de archivos de clase, podemos organizarlos

en una estructura de paquetes bastante compleja, y lo hacemos creando la

estructura de directorios correspondiente en el disco, incluyendo las

estructuras de subdirectorios dadas.

Por ejemplo, si quiere que la clase app est en el paquete package2, que

asu vez est dentro del paquete package 1, sta ser la estructura de

directorios:Para crear esta estructura de paquetes en el cdigo, basta utilizar

el separador de paquetes punto.

ejemplo:

package packagel.package2;
public class app
I
public static void rnain (String[l args)
{
Systern.out.println ("iHola desde Java! " ) ;

Ahora puede importar la clase app en su cdigo con sentencias como stas:

import packagel.package2.*;

irnport packagel.package2.app;

Debido a que en este caso app ya es una aplicacin clase, tambin puede

ejecutarla como sigue, especificando la estructura de directorios de paquete:

c:\> java packagel.package2.app

;Hola desde Java!

3.9.3 Crear una interfaz

Cuando creamos una interfaz, especificamos los mtodos de la interfaz y

cuando la implementamos, proporcionamos el cdigo de estosmtodos.Aqu

tiene un ejemplo en el que creamos una interfaz llamada Printem quetiene

45
un mtodo: printText. Implementamos esta interfaz en la clase llamada class.

Para crear una interfaz, utilizamos simplemente la sentencia interfacey

listamos los prototipos (declaraciones sin cuerpo) de los mtodos que

queremos en la interfaz, como sigue:

interfacePrintem
I
voidprintText ( ) ;
}
Ahora podemos implementar esta interfaz en class 1:
interfacePrintem
{
voidprintText ( ) ;
1
public class interfaces
(
public static void main(Stringr1 args)
I
classlobjectl = new classl0;
objectl.printText0;
1
}
classclassl implements Printem
I
public void printText0
(
ystam.out.println(HoladesdeJavaln);

3.9.4. Implementacin parcial de una interfaz

Puede crear clases que implementen parcialmente una interfaz, pero estas

clases deben declararse abstractas debido a que son nicamente

implementaciones parciales y, por tanto, no pueden instanciarse en objetos.

Aqu tiene un ejemplo en el que creamos una interfaz con dos mtodos,

printText 1 y printText2:
interfacePrintem
voidprintTextl(1;
void printText2 ( ) ;

A continuacin, se crea una nueva clase, class1, que implementa la interfaz

pero nicamente define un mtodo, printText2 (observe que debido a que


46
estaclase no es una implementacin completa de la interfaz, debemos

declararlaabstracta):

interfacePrintem
(
voidprintTextl ( ) ;
void printText2 ( ) ;

abstract class classl implements Printem


{
public void printTextl0
I
system.out.println("~Hola desde Java!");

Finalmente, podemos crear una nueva clase, class2, que extienda class1 e

implemente printText2, lo que significa que podemos instanciar objetos de la

clase class2 como se muestra aqu:

interfacePrintem
void printText1 ( ) ;
void printText2 ( ) ;
public class interfaces2
{
public static void main(String[l args)
(
class2 object2 = new class2 O ;
object2.~rintText2();
abstract class classl implements Printem
(
public void printTextl0
System.out.println(" Holadesde Java!");
class class2 extends classl
f
public void printText20
System.out.println(~ola desde los interfaces Java!");

47
3.9.5. Crear un archivo JAR

El uso de los archivos JAR es por el aumento archivos de clase estn

aumentando de tamao y hay muchos los archivos JAR comprimen sus

contenidos utilizando el formato ZIP, por lo que si su applet necesita una

gran cantidad de archivos grandes, es conveniente crear un archivo JAR.

Los navegadores de la red Internet nicamente necesitan una conexin en

vez de nuevas conexiones para cada nuevo archivo, lo que puede mejorar

los tiempos de descarga. Tambin puede firmar digitalmente los archivos de

un archivo JAR para probar su origen.

Crear archivos JAR con la herramienta jar. Esta herramienta viene con Java

ya qu tiene su forma de uso:

jar [optionsl [manifest] destination input-file[additional input filesl

Aqu, options son las opciones que puede utilizar con la herramienta JAR y

son parecidas a las opciones que se utilizan con la herramienta UNIX tar. El

argumento opcional manifest consiste en el nombre de un archivo manifest,

que soporta la firma digital y muestra los contenidos del archivo Java.

Cuando cree un JavaBean, utilice un archivo manifest para indicar qu

clases sonBeans

Aqu se observa las opciones posibles que puede utilizar cuando use la

herramienta

jar:

c. Crea un archivo nuevo o vaco en la salida estndar.

t. Muestra la tabla de contenidos en la salida estndar.

x file. Extrae todos los archivos o slo los nombres de archivos. caso,

nicamente se extraen los archivos especificados.

48
f. El segundo argumento especifica un archivo JAR para trabajar.

v. Genera una salida "duplicada" en stderr.

m. Incluye informacin manifiesta de un archivo manifest especificado.

O. Indica "slo almacenar", sin utilizar compresin ZIP

M. Especifica que un archivo manifest no debera crearse por las

entradas.

u. Actualiza un archivo JAR existente aadiendo o cambiando los

archivos del manifest.

-C. Cambia los directorios durante la ejecucin del comando jar. Por

Ejemplo, jar aadira todos los archivos dentro del directorio clases, pero

no el propio directorio clases, al archivo jarfile.jar.

Truco: Puede utilizar un argumento comenzando por el carcter para

especificar un archivo que contiene argumentos adicionales Estos

argumentos se insertan en la lneas en la posicin del argumento

@filen:"@"

S, con

Aqu se tiene el uso tpico de la herramienta jar:

c: \> jar cf j a r f i l e . jar * .class

En este caso, todos los archivos de clase del directorio actual se sitan en el

archivo llamado jarfile.jar. La herramienta JAR genera automticamente un

archivo manifest predeterminado y es siempre la primera entrada del archivo

Java (por defecto, se llama META-INF/MANIFEST.MF). Si tiene un archivo

manifest y quiere que utilice la herramienta jar para un nuevo archivo JAR,

se puede utilizar la opcin -m y especificarlo como sigue:

c:\>jar cm manifest.mt jarfile.jar *.class

49
Observe que cuando especifica las opciones cfm en lugar de cmf, necesita

especificar el nombre del archivo JAR primero, seguido del nombre del

archivo manifest:

c:\>jarcfmjarfile. jarmanifest.mft *.class

Observe tambin que los archivos JAR no son nicamente para archivos de

clase; pueden almacenar cualquier tipo de archivo. Aqu tiene la forma de

empaquetar todos los archivos de un directorio en un archivo JAR:

c:\>jarcfm jarfile.jar manifest.mft * . *

Si los nombres de archivo que quiere empaquetar incluan directorios, los

directorios se buscan de forma recursiva y se almacenan en el JAR los

archivos. Cuando el archivo JAR se desempaqueta, se recrea de nuevo la

estructura de directorios.

3.9.6. Obtener los contenidos del archivo JAR

Los archivos JAR guardar informacin empaquetada para la visualizacin

del contenido. De esta manera se puede determinar el contenido de un

archivo JAR con las opciones tf, como en este caso, donde el archivo JAR

contiene un manifest predeterminado en el directorio interno META-INF y

varios archivos de clase:

c: \>jartfjarfile. jar

META- INF /

META-INF/MANIFEST.MF

applet.class

jpanel.class

newButton.class

testPanel.class

50
3.9.7. Extraer archivos desde un archivo JAR

Cuando se programa se utiliza los archivos JAR paraarchivar los archivos;

pero, cmo se extrae los archivos de un JAR?",

"Con las opciones xf".

Podemos extraer archivos desde un archivo JAR utilizando las opciones

xf. Por ejemplo, aqu tiene la forma de extraer todos los archivos del archivo

jarfile-jar introducido en el tema previo:

c: \>jarxfjarfile. jar

Al desempaquetar todos los archivos del archivo JAR de esta forma,tambin

creamos su estructura original de directorio. En este caso, la herramientajar

desempaqueta los archivos de clase y tambin crea un directoriollamado

META-INF donde coloca el archivo predeterminado manifest

MANIFEST.MF. Tambin podemos extraer archivos especificando sus

nombres. Aqu tieneun ejemplo en el que extraemos applet.class:

c: \> jar xfjarfile. jarapplet.class

3.10. Swing Utilities

clasajavax.swing.SwingUtilities

Estos son slo 2 de los 36 mtodos de utilidad genrica definidos en

SwingUtilities, que se dividen en siete grupos: mtodos de clculo, mtodos

de conversin, mtodos de accesibilidad, mtodos de recuperacin, mtodos

relacionados con la multitarea y los eventos, mtodos para los botones del

ratn, y mtodos de disposicin/dibujo/UI. Todos estos mtodos son

estticos y se describen muy brevemente en esta seccin (para una

comprensin ms avanzada vea el cdigo fuente de SwingUtilities.java).

51
3.10.1. Mtodos de clculo

Rectangle[] computeDifference(RectanglerectA, RectanglerectB):

devuelvelas regiones rectangulares que representan la porcin de rectA que

no intersecciona con rectB.RectanglecomputeIntersection(int x, int y,

intwidth, intheight,Rectangledest): devuelve la interseccin de dos reas

rectangulares. La primera regin sedefine con los parmetros de tipo int y la

segunda por con el parmetro de tipo Rectangle. Elparmetro de tipo

Rectangle se modifica y se devuelve como resultado del clculo de forma

queno se tiene que instanciar un nuevo Rectangle.

RectanglecomputeUnion(int x, inty, intwidth, intheight, Rectangledest):

devuelve la unin de dos reas rectangulares. La primera regin se define

con losparmetros de tipo int y la segunda por con el parmetro de tipo

Rectangle. El parmetro detipo Rectangle se modifica y se devuelve como

resultado del clculo de forma que no se tieneque instanciar un nuevo

Rectangle.

isRectangleContainingRectangle(Rectangle a, Rectangle

b): devuelve true si el Rectangle a contiene completamente al

Rectangleb.computeStringWidth(FontMetricsfm, Stringstr): devuelve la

achura del String de acuerdo al objeto FontMetrics.

3.10.2. Mtodos de conversin

MouseEventconvertMouseEvent(Componentsource,

MouseEventsourceEvent, Componentdestination): devuelve un MouseEvent

nuevo con destination como fuentey las coordenadas x e y convertidas al

sistema de coordenadas de destination (asumiendo enambos casos que

destination no sea null). Si destination es null las coordenadas se convierten

52
al sistema de coordenadas de source, y se pone source como fuente del

evento. Siambos son null el MouseEvent devuelto es idntico al evento que

se pasa.Point convertPoint (Componentsource, Point aPoint,

Componentdestination): devuelve un Point que representa aPoint convertido

al sistema de coordenadas del componente destination como si se hubiese

generado en el componente source. Si uno de los componentes es null se

usa el sistema de coordenadas del otro, y si ambosson null el Point devuelto

es idntico al Point pasado.

Point convertPoint(Componentsource, int x, int y, Componentdestination):

este mtodo funciona igual que el anterior mtodo convertPoint() exceptoque

recibe parmetros de tipo int que representan las coordenadas del Point a

convertir en lugar de una instancia de

Point.RectangleconvertRectangle(Componentsource, RectangleaRectangle,

Componentdestination): devuelve un Rectangle convertido del sistema de

coordenadasdel componente source al sistema de coordenadas del

componente destination. Este mtodose comporta de forma similar a

convertPoint().voidconvertPointFromScreen(Point p, Component c):

convierte el Point dado encoordenadas de la pantalla al sistema de

coordenadas del Component dado.voidconvertPointToScreen(Point p,

Component c): convierte el Point dado en el sistema de coordenadas del

Component dado al sistema de coordenadas de la pantalla.

53
3.10.3. Mtodos de accesibilidad

AccessiblegetAccessibleAt(Component c, Point p): devuelve el

componenteAccessible en el determinado Point del sistema de coordenadas

del Component dado (sedevolver null si no se encuentra ninguno). Observe

que un componente Accessible es aquelque implementa el interface

javax.accessibility.Accessible.AccessiblegetAccessibleChild(Component c,

int i): devuelve el dcimo hijoAccessible del Component dado.int

getAccessibleChildrenCount(Component c): devuelve el nmero de

hijosAccessible que contiene el Component dado.

IntgetAccessibleIndexInParent(Component c): devuelve el ndice en su padre

delComponent dado descartando todos los componentes contenidos que no

implementen el interfaceAccessible. Se devolver -1 si el padre es null o no

implementa Accessible, o si el Component dado no implementa

Accessible.AccessibleStateSetgetAccessibleStateSet (Component c):

devuelve el conjunto de A ccessibleStates que no estn activos para el

Component dado.

3.10.4 Mtodos de recuperacin

ComponentfindFocusOwner(Component c): devuelve el componente

contenido dentro del Component dado (o el Component dado) que tiene el

foco. Si no hay tal componente se devuelve

null. ContainergetAncestorNamed(Stringname, Componentcomp): devuelve

el ancestorms cercano del Component dado con el nombre que le

pasamos. En otro caso se devuelve null.(Observe que cada Component

tiene una propiedad name que se puede asignar y recuperar usando los

mtodos setName() y getName ()respectivamente.)

54
ContainergetAncestorOfClass(Class c, Componentcomp): devuelve el

ancestro mscercano del Component dado que es una instancia de c. En

otro caso se devuelve null.ComponentgetDeepestComponentAt

(Componentparent, int x, int y): devuelve elhijo ms profundo del Component

dado que contiene el punto (x,y) en trminos del sistema decoordenadas del

Component dado. Si el Component no es un Container este mtodo

terminainmediatamente.

RectanglegetLocalBounds(Component c): devuelve un Rectagle que

representa los lmites de un Component determinado en su propio sistema

de coordenadas (de este modo siempre empieza en

0,0).ComponentgetRoot(Component c): devuelve el primer ancestro de c que

es una Window. Enotro caso este mtodo devuelve el ltimo ancestro que es

un Applet.JRootPanegetRootPane(Component c): devuelve el primer

JRootPane que es padre de c, o c si es un

JRootPane.WindowwindowForComponent (Component c): devuelve el

primer ancestro de c que es una Window. En otro caso devuelve

null.booleanisDescendingFrom(ComponentallegedDescendent,

ComponentallegedAncestor): devulve true si allegedAncestor contiene a

allegedDescendent.

3.10.5. Mtodos relacionados con la multitarea y los eventos

voidinvokeAndWait(Runnableobj): enva el Runnable a la cola de despacho

de eventos y bloquea el hilo actual.voidinvokeLater(Runnableobj): enva el

Runnable a la cola de despacho de eventos y contina.

booleanisEventDispatchThread(): devuelve true si el hilo actual es el hilo de

despacho de eventos.

55
3.10.6. Mtodos para los botones del ratn

booleanisLeftMouseButton(MouseEvent): devuelve true si el MouseEvent

correspondea una pulsacin del botn izquierdo del ratn.

booleanisMiddleMouseButton(MouseEvent): devuelve true si el

MouseEventcorresponde a una pulsacin del botn de en medio del ratn.

booleanisRightMouseButton(MouseEvent): devuelve true si el

MouseEventcorresponde a una pulsacin del botn derecho del ratn.

3.10.7 Mtodos de disposicin/dibujo/UIString

layoutCompoundLabel (FontMetricsfm, Stringtext, iconicon,

intverticalAlignment, inthorizontalAlignment, intverticalTextPosition,

inthorizontalTextPosition, RectangleviewR, RectangleiconR,RectangletextR,

inttextIconGap): Este mtodo se usa normalmente por el delegado UI de

JLabel para posicionar texto y/o un icono usando el FontMetrics, las

condiciones de alineamiento y las posiciones del texto dentro del

RectangleviewR . Si se determina que el texto de la etiqueta no cabr dentro

de este Rectangle, se usan puntos suspensivos (...) en lugar del

texto que no cabra. Los RectanglestextR e iconR se modifican para reflejar

la nuevadisposicin, y se devuelve el String resultante de esta

disposicin.StringlayoutCompoundLabel (JComponent c, FontMetricsfm,

Stringtext,iconicon, intverticalAlignment, inthorizontalAlignment,

intverticalTextPosition, inthorizontalTextPosition, RectangleviewR,

RectangleiconR, RectangletextR, inttextIconGap): este mtodo es idntico al

anterior, pero recibe el componente destino para comprobar si l la

orientacin del texto se debe tener en cuenta voidpaintComponent(Graphics

g, Component c, Container p, int x, int y,int w, int h): pinta el Component

56
dado en el contexto grfico dado, usando el rectngulo definido por los

cuatro parmetros de tipo int como rea de recorte. El Container se usa para

que acte como el padre del Component de forma que cualquier peticin de

validacin sucedan en ese componente no se propaguen por el rbol de

ancestros del componente al que pertenece el contexto grfico dado. Esta es

la misma metodologa que usan los pintores decomponentes de JList, JTree,

y JTable para mostrar correctamente el comportamiento de"sello de goma"

(rubberstamp). Este comportamiento se logra mediante el uso de

unCellRendererPanevoidpaintComponent(Graphics g, Component c,

Container p, Rectangle r):funciona de forma idntica al mtodo anterior, pero

recibe un Rectangle como parmetro en lugar de cuatro

ints.voidupdateComponentTreeUI(Component c): notifica a todos los

componentes que contiene c, y a c, que actualicen su delegado UI para que

correspondan a los actuales UIManagery UIDefaults.

57
4. Conclusiones

A lo largo de este trabajo investigativo se han comprobado las similitudes y

diferencias entre ambosAPIs para la creacin de interfaces grficas.

Bsicamente, Swing viene a ser una ampliacin y revisin de AWT. Ambas

bibliotecas de clases comparten aspectos como el manejo de eventos,

jerarquas similares de componentes, la representacin de grficas bsicas e

imgenes... Adems, Swing aade nuevas funcionalidades a los antiguos

componentes, aade nuevos componentes, introduce el concepto de Look &

Feel, da soporte a el paradigma MVC; en resumen, aprovecha el camino

recorrido por AWT respondiendo a sus deficiencias y a las nuevas

necesidades. Esto pone de manifiesto que las capacidades y respuestas

que ofrece Swing son fruto de una suma de trabajos anteriores a l, lo que

indica la importancia en la construccin de software de las buenas prcticas

de la ingeniera del software, que facilitan conceptos tan tiles como la

reutilizacin, la portabilidad entre plataformas, la escalabilidad... en resumen

al software de calidad. En resumen, AWT y Swing son un gran ejemplo de la

buena puesta en marcha de las prcticas de la ingeniera del software y de

la orientacin a objeto.

58
5. Recomendaciones

En la aplicacin slo debe haber un nico JFrame, correspondiente a la

aplicacin principal. Todas las ventanas secundarias deben ser JDialog.

Todas las ventanas secundarias deben tener una ventana padre, que es a

partir de la cual se despliega. Es decir, todos los JDialog secundarios deben

tener como padre al JFrame principal. Si desde un JDialog se va a visualizar

otro, este segundo debe tener como padre al primero, y as sucesivamente.

Evitar en lo posible los JDialog modales, o tener muy en cuenta su jerarqua

de padres. El primer JDialog modal no tiene problemas si le pones su padre

adecuadamente. Si tienes un JDialog modal visible, no muestres otro

JDialog secundario, salvo que tambin sea modal y sea hijo del anterior. Si

pones visibles a la vez dos JDialog modales y no son el uno hijo del otro,

tendrs problemas al intentar escribir en ellos o cerrarlos.

Nunca hereda de JFrame o JDialog o JApplet para hacer las ventanas. Se

puede hacer siempre de un componente que no sea ventana y que no

limite. Si las ventanas heredan de JPanel, podrs ponerlas siempre que

quieras dentro de un JFrame, un JDialog, un JInternalFrame, un JApplet o

incluso incrustarlas en otro JPanel. Si tu ventana hereda de JFrame, est

condenada a ser un JFrame toda su vida.

Reaprovechar las ventanas, no dejar al recolector de basura. Si un botn, al

apretarlo, visualiza un JDialog, no hagas un new de JDialog cada vez que

pulsas el botn. Es mejor hacer slo un new la primera vez y guardar. En las

siguientes veces bastar con hacer setVisible(true) y setVisible(false). Para

que el recolector de basura libere una ventana, adems de lo habitual, hay

como mnimo que llamar al mtodo dispose() de dicha ventana -cosa que

mucha gente no sabe- , para que el sistema de eventos de teclado y ratn

59
eliminen todas las referencias que tienen a ella. De todas formas, incluso as

no tengo muy claro que los JDialog se liberen siempre y, desde luego, en

versiones anteriores de Java, los JFrame NUNCA se liberaban. La excusa

de SUN es que como slo deba haber un JFrame principal, no tena sentido

liberarlo.

Los layouts para situar componentes no son tan complicados, slo hay que

ponerse a ello. No usar el layoutnull, ya que la ventana no ser

redimensionable y puedes tener problemas si cambia la fuente de letra, si tu

programa se ejecuta en otro sistema operativo, se cambia el look &feel, etc.

60
6. Bibliografa

A. Java Swing

http://jungla.dit.upm.es/~santiago/docencia/apuntes/Swing/

B. Sun The Swing Tutorial

http://java.sun.com/docs/books/tutorial/uiswing

C. Sun, Traductor : Juan Antonio Palos Swing y JFC

http://programacion.com/java/tutorial/swing/

Universidad de Navarra Aprenda Java como si estuviera en primero

San Sebastin,Marzo 1999

D. Universidad de Las Palmas de Gran Canaria Tutorial de Java

AWThttp://www.ulpgc.es/otros/tutoriales/java/Cap4/awt.html

61
Anexos.

Anteproyecto

INTRODUCCIN.

Esta Investigacin pretende ser una introduccin a Swing, con la que se

intenta mostrar una visin general sobre herramientas de interfaces grficas

de usuario, y ms concretamente, sobre el desarrollo de stas con Java y

sus APIs, lo que se pretende mostrar las ventajas que ofrece ste tipo de

programacin.

En primer lugar, se realiza una introduccin a Swing, el AWT y las interfaces

de usuario, tratando de sta forma de centrar al lector en el tema a tratar.

Una vez realizada dicha introduccin, se describir brevemente el paquete

Swing, para dar una idea de la jerarqua de componentes que se puede

utilizar con Swing y de sus utilidades.

Tambin se mencionar el manejo de eventos en Swing, as como los

Applets, aunque de una forma muy superficial, ya que debido a la gran

amplitud de variaciones que pueden darse, sera muy extenso hacer una

descripcin detallada.

62
DATOS INFORMATIVOS.

2.1.1. Tema General

ADMINISTRADOR DE DISEO DE JAVA

2.1.2. Tema Especfico.

COMPONENTE SWING
Universidad.
Universidad Catlica de Cuenca
Unidad Acadmica de Ingeniera de
Sistemas, Elctrica y Electrnica
Facultad de Ingeniera de Sistemas.

Investigador.

Tnlg. Anl. Freddy E. Quezada B.


Director.

Ing. Ali Mndez.

Lugar.
Universidad Catlica de Cuenca.
Fecha.
10 de Octubre del 2011.

LUGARES DE CONSULTA.

http://zarza.usal.es/~fgarcia/docencia/poo/02-03/trabajos/S2T4.pdf
http://www.programacion.com/articulo/swing_y_jfc_java_foundation_classes_94
http://jungla.dit.upm.es/~santiago/docencia/apuntes/Swing/
http://www.programacion.net/java/tutorial/swing/
http://www.programacionfacil.com/java/indice.htm

JUSTIFICACIN Y PROPUESTA.

63
4.1. ANLISIS DE LA SITUACIN ACTUAL.
La programacin en Java ha comenzado a despegar simplemente debido a
su capacidad de hacer programas en mltiples plataformas. Esto es no slo
cierto para computadoras porttiles pero Java tambin est presente en las
PC de bolsillo e incluso en los telfonos mviles estndar. Debido a esto,
existe un gran inters en programar con Java y aprovechar este gran y
creciente mercado.

La programacin en Java significa que tener las herramientas adecuadas a


fin de terminar proyecto rpido y eficientemente. Una de las herramientas
esenciales es el componente de GUI (interfaz grfica de usuario). Esto
permite agregar fcilmente el componente grfico sin la mayor parte de la
programacin necesaria. En esta categora, hay dos de las que puedes
elegir. La primera es la AWT (AbstractWindowToolkit) y el segundo es el
swing, que apareci ms tarde.

Estos kits de herramientas tienen sus propias ventajas y desventajas que los
hacen adecuados para los distintos tipos de necesidades de programacin.
El AWT utiliza muchos de los comandos de la plataforma que le da una gran
cantidad de velocidad. Pero a fin de convertirlo para su uso en otras
plataformas, debe cambiar los comandos de la contraparte. Por otro lado,
Swing utiliza cdigo Java puro, hacindolo muy porttil con el costo de
velocidad y rendimiento a travs de plataformas.

4.2. PROPUESTA.

Dar a conocer a travs de mtodos investigativos la aplicacin y uso de de


las herramientas del lenguaje Java para un diseo y desarrollo de
aplicaciones dedicadas al usuario.

64
OBJETIVOS.

5.1. Objetivo General.

Analizar los componentes de Java swing

5.2 Objetivos Especficos:

Lograr conocimiento de los paquetes de Swing de java.


Ilustrar al usuario con gua de uso que se refiere a la aplicacin de
componentes dedicados a la interface de usuario
Adquirir competencias para la aplicacin del lenguaje java

ALCANCE Y LIMITACIONES.
6.1 Alcances.

Crea una alternativa para el desarrollo de aplicaciones dedicadas al


usuario
Establecer diferencias entre distintos lenguajes de desarrollo
orientado a objetos
Aplicar los componentes de Java. Swing

6.2. Limitaciones.

Ya que Swing es un extenso conjunto de componentes el tiempo para el


desarrollo de los mismos

65
MARCO REFERENCIAL Y CONCEPTUAL.
7.1. Marco Referencial.

Swing es el nombre clave del proyecto que desarroll los nuevos


componentes que vienen a sustituir o complementar a los de AWT.
Frecuentemente se usa para referirse a los nuevos componentes y al API
relacionado. Est inmortalizado en losn ombres de paquete del API Swing,
que empiezan con javax.swing. Esta versin de lasJFC fue publicada como
JFC 1.1, que algunas veces es llamada 'Versin Swing'. El API delJFC 1.1
es conocido como el API Swing.

Swing constituye la caracterstica ms importante que se ha aadido a la


plataforma 1.2, como Sun ha preferido llamarla, Java2. Con esta ltima
incorporacin por fin se completa totalmente la parte grfica de la
programacin en Java, ofreciendo al programador acceso a todas las
caractersticas existentes en un entorno grfico actual, as como un conjunto
de componentes grficos completo y fcilmente ampliable con el que
construir la interfaz grfica de usuario, o GUI, de nuestras aplicaciones y
applets, de una forma totalmente transparente e independiente de la
plataforma en la que ejecutemos nuestro cdigo.

7.2. Marco Conceptual.

Swing es una de las mejoras principales que ha experimentado el JDK en su

versin 1.2 con respecto a la versin 1.1, y representa la nueva generacin

de AWT. Tambin es una de las API de las Clases de Fundamentos de Java

(JFC), lo cual es el resultado de un esfuerzo de colaboracin muy grande

entre Sun, Netscape, IBM y otras empresas. Lo que da a Swing su

importancia es el poder que ofrece para desarrollar interfaces grficas de

usuario (GUI) para applets y aplicaciones. La cantidad y calidad de los

controles GUI que ofrece Swing no tiene rival en ningn otro juego de

herramientas GUI.

66
El origen de los controles GUI que presenta Swing lo encontramos en las

Clases de Fundamentos de Internet de Netscape (IFC). Los componentes

Swing van ms all de las IFC, hasta el punto de que no hay un parecido

apreciable entre los componentes Swing y los de las IFC. Swing ofrece

tambin la posibilidad de cambiar fcil y rpidamente el aspecto y sensacin

(L&F) de un nico componente o grupo de componente. Esta posibilidad,

que se conoce como aspecto y sensacin conectables (PL&F), es un sello

distintivo de Swing

TEMARIO.

I INTRODUCCIN
CAPITULO I
Swing
1.1 historia
1.2 Ventajas - Desventajas
1.2 Eventos Swing
1.3 Modelos de componentes Swing
1.4 Descripcin de algunos componentes Swing

CAPITULO II
Layouts
2.1. Look &Feel
2.2. Otras nuevas caractersticas
2.3. Action
2.4. Modelos de datos y estados separados
2.5. Soporte para tecnologas asistivas
2.6. Applets en Swing
CAPITULO III
3.1. Herencia de Componentes y Contenedores

3.2. Control de Distribucin

3.3. Construccin de GUI en Swing

67
3.4. Manejo de eventos en Swing

3.5. Swing: Applets. aplicaciones y cambios de apariencia

3.6. Swing: Cuadros de texto. botones y casillas de activacin

3.7. Swing: viewports. desplazamiento. deslizadores y listas

3.8. Swing: barras. herramientas. cuadros. Se paradores y selectores

3.9. Swing: ventanas. paneles. marcos internos y cuadros de dialogo

3.10. Creacin de paquetes. interfaces. archivos JAR y Java Beans

4. Conclusiones
4.2 Recomendaciones

I. Bibliografa
II. Anexos.

68
ESTRATEGIAS METODOLGICAS.

Etapa de Mtodos
Tcnicas Resultados
investigacin Empricos Tericos

ANLISIS
DE LA Bases tericas
SITUACIN Analtico sinttico. Revisin por Internet de la
ACTUAL Investigacin.

Histrico- Lgico Investigar los


Revisin Documental elementos del
PROPUESTA DE Recoleccin de paquete swing
SOLUCIN Informacin Analtico sinttico. Observacin de java

Hipottico
Deductivo

MARCO REFERENCIAL Analtico sinttico


Y CONCEPTUAL Propuesta
fundamentada
Sistmico Tericamente.

69
Instrumentos.
Las Herramientas que se utilizarn en el Desarrollo de la Investigacin son:
El Internet, constituye la fuente y base fundamental de donde se extraer
la Informacin requerida.
El programa Netbeans 7.0, el mismo que nos ofrecer mayor soporte
Tcnico para el desarrollo del presente proyecto.

RECURSOS.

Recursos Humanos.
Catedrticos del Plantel.
Autor.

Recursos Tecnolgicos.

Uno de los Recursos Tecnolgicos importantes es la Red de Redes (el


Internet), la cual ofrece la mayor parte de la Informacin acerca de estas
herramientas

Recursos Materiales.

Computadora porttil
Netbeas 7.0 (win - linux)
tiles de oficina
Internet

70
Recursos Econmicos.
Para la realizacin del Presente Trabajo se destina los siguientes rubros:
Detalle Rubro
Equipo Porttil $ 600
tiles de Oficina $ 35
Consumo de internet prepago $ 35
Impresiones y Empastado $ 60
TOTAL 730

BIBLIOGRAFA.

Java Swing http://jungla.dit.upm.es/~santiago/docencia/apuntes/Swing/


Sun The Swing Tutorial http://java.sun.com/docs/books/tutorial/uiswing
Sun, Traductor : Juan Antonio Palos Swing y JFC
http://programacion.com/java/tutorial/swing/
Universidad de Navarra Aprenda Java como si estuviera en primero San
Sebastin, Marzo 1999
Universidad de Las Palmas de Gran Canaria Tutorial de Java - AWT
http://www.ulpgc.es/otros/tutoriales/java/Cap4/awt.html

71
CRONOGRAMA

SEMANA 1 SEMANA 2 SEMANA 3 SEMANA 4 SEMANA 5 SEMANA 6 SEMANA 7 SEMANA 8

LUN 31 LUN 28
LUN 17 A LUN 24 A LUN 7 A LUN 14 A LUN 21 A LUN 05 A
OCT A NOV A
VIE 21 DE VIE 28 DE VIE 11 DE VIE18 DE VIE 25 DE VIE 09 DE
VIE 21 DE VIE 2 DE
OCT OCT NOV NOV NOV DIC
NOV DIC

CAPITULO
I X X X X
CAPITULO
II X X X
CAPITULO
III X X X X X

72

S-ar putea să vă placă și