Manual - Programacion - Java - Tutor Swing

Embed Size (px)

Citation preview

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    1/461

    I-Swing

    Utilizar los Paquetes JFC/Swingq

    Empezar con Swing

    Sobre el JFC y Swingr

    Compilar y Ejecutar programas Swing

    Compilar y Ejecutar programas Swing (JDK 1.2)s

    Compilar y Ejecutar programas Swing (JDK 1.1)s

    r

    Ejecutar Applets Swingr

    Una gira rpida por el cdigo de un programa Swingr

    q

    Caractersticas y Conceptos Swing

    Herencia de Componentes y Contenedores Swingr

    Control de Distribucinr

    Manejo de Eventosr

    Dibujor

    Threads y Swingr

    Ms Caractersticas Swingr

    Anatomia de un programa Swingr

    q

    Usar Componentes Swing

    Reglas Generales del uso de Componentesr

    La clase JComponentr

    Indice Visual de Componentes Swingr

    Contenedores de Alto Nivel

    Cmo crear Framess

    Cmo crear Dilogoss

    Cmo crear Appletss

    Contenedores Intermedioss

    Cmo usar Panels

    Cmo usar ScrollPanes

    Cmo usar SplitPanes

    Cmo usar TabbedPanes

    Cmo usar ToolBars

    Cmo usar InternalFrames

    Cmo usar LayeredPanes

    r

    q

    http://usuarios.tripod.es/Ozito/ui/swingcomponents/component.htmlhttp://usuarios.tripod.es/Ozito/ui/swingcomponents/component.html
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    2/461

    Cmo usar RootPanes

    Componentes Swing

    Cmo usar Buttons

    Cmo usar ChekBoxs

    Cmo usar ColorChoosers

    Cmo usar ComboBoxs

    Cmo usar FileChoosers

    Cmo usar Labels

    Cmo usar Lists

    Cmo usar Menus

    Cmo usar MonitorProgresss

    Cmo usar RadioButtons

    Cmo usar Sliders

    Cmo usar Tables

    Componentes de Texto

    Ejemplos de cada Componente de textos

    Reglas de uso de Componentes de textos

    Cmo usar TextFields

    Cmo usar EditorPane y TextPanes

    Sumario de Textos

    s

    Cmo usar ToolTips

    Cmo usar Treess

    r

    Problemas comunes con Componentesr

    Escribir Oyentes de Eventos

    Ejemplos de Manejo de Eventosr

    Reglas Generales para Escribir Oyentes de Eventosr

    Manejar Eventos

    Oyente de Actions

    Oyente de Carets

    Oyente de Changes

    Oyente de Components

    Oyente de Containers

    Oyente de Documents

    r

    q

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    3/461

    Oyente de Focuss

    Oyente de InternalFrames

    Oyente de Items

    Oyente de Keys

    Oyente de ListSelections

    Oyente de Mouses

    Oyente de MouseMotions

    Oyente de UnodableEdits

    Oyente de Windows

    Distribuir Componentes en un Contenedor

    Usar Controladores de Distribucin

    Reglas de uso de Controladores de Distribucins

    Cmo usar BorderLayouts

    Cmo usar BoxLayouts

    Cmo usar CardLayouts

    Cmo usar FlowLayouts

    Cmo usar GridLayouts

    Cmo usar GridBagLayout

    Especificar Restriccioness

    El ejemplo explicados

    s

    Crear un controlador de Distribucin Personalizados

    Hacerlo sin controlador de Distribucin (Posicionamiento Absoluto)s

    Solucin de Problemas con la Distribucins

    r

    q

    Trabajar con Grficos

    Introduccin al Soporte de Graficos del AWTr

    Usar Grficos Primitivos

    Dibujar Formas Sencillass

    Trabajar con Textos

    r

    Utilizar Imgenes

    Cargar Imgeness

    Dibujar Imgeness

    r

    Realizar Animacin

    Crear un Bucle de Animacins

    r

    q

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    4/461

    Animar Grficoss

    Mover una Imagen por la Pantallas

    Mostrar una Secuencia de Imgeness

    Aumentar el rendimiento y la aparaciencia de una Animacins

    Solucin de Problemas con los Graficosr

    Usar Otras Caractersticas de Swing

    Cmo usar Actionr

    Cmo soportar tecnologas de accesibilidadr

    Cmo usar Iconosr

    Cmo seleccionar el Aspecto y Comportamientor

    Cmo usar Threadsr

    Cmo usar Timerr

    q

    Convertir a Swing

    Por qu convertir a Swing?r

    Cmo convertir mis programas a Swing?r

    Recursos de Conversin

    Repuestos Swing para Componentes SWTs

    Trucos de Conversins

    Algunos ejemplos de Conversins

    Solucin de Problemas de Conversins

    r

    q

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    5/461

    Swin

    Crear un GUI usando JFC/Swing

    sta seccin explica como crear un Interface Grfico de Usuario (GUI) paraplicaciones y applets, usando los componentes Swing. Los componentes Swingue forman parte de JavaTM Foundation Classes (JFC), se pueden usar tanto conDK 1.1 como con el JDK 1.2.

    mpezar con Sw ing es una leccin para empezar rpidamente. Primero ofreceonocimientos sobre el JFC y Swing. Luego explica cmo compilar y ejecutarrogramas -- tanto applets como aplicaciones -- que usan componentes Swing.nalmente muestra el cdigo de un programa sencillo.

    aractersticas y Conceptos Swing ofrece la iformacin que necesitas paraoder usar componentes swing efectivamente. Por ejemplo, explica cmo losrogrmas Swing muestran sus GUIs, cmo manejan los eventos como lasulsaciones del ratn, y cmo pueden usar caractersticas como los bordes parayudar a la distribucin. Finaliza con una explicacn de cmo se usan lasaractersticas y los conceptos en un programa real.

    sar componentes Sw ing explica cmo usar cada uno de los componenteswing.

    scribir oyentes de eventos explica cmo manejar eventos en los programaswing.

    istribuir Componentes Dentro de un Contenedor explica cmo elegir unontrolador de disposicin, cmo usar cada una de las clases de controladores dstribucin proporcionadas por el entorno Java, cmo usar posicionamientobsoluto en vez de un controlador de disposicin, y cmo crear nuestro propioontrolador de distribucin.

    sar otras Caractersticas Sw ing explica cmo usar actions, borders, icons, y

    mers. Tambin nos ensea a crear programas multi-threads

    onvertir a Sw ing explica cmo convertir programas que usan el API del AWT ara usar componentes Swing.

    http://usuarios.tripod.es/Ozito/index.htmlmailto:[email protected]://usuarios.tripod.es/Ozito/index.htmlmailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    6/461

    Swin

    Empezar con Swing

    sta seccin ofrece una introduccin rpida al uso de paquetes Swing para grean GUI de un programa. Primero explica lo que son Swing y JFC. Luego nos ayuobtener la versiones necesarias para compilar y ejecutar programas Swing.espus muestra cmo ejecutar applets. Finalmente, nos lleva a una excursinobre una aplicacin Swing sencilla.

    t ests ms interesado en aprender conceptos que en ejecutar programashora mismo, puedes saltarle libremente esta leccin e ir a la siguiente leccin,aractersticas y Conceptos. Puedes volver aqu cuando ests listo para empeza

    rogramar.obre el JFC y Swing

    Esta leccin cuenta una pequea historia sobre JFC y Swing. Si hasdesarrollado programas usando componentes SWT, probablementeestars interesado en la descripcin de las diferencias entre loscomponentes ATW y los componentes Swing.

    ompilar y Ejecutar Programas Swing

    Para escribir programas usando los componentes Swing, primero debesdescargar las versiones apropidas del JDK y del JFC. Luego puedesseguir las instrucciones de esta seccin para compilar y ejecutar unapequea aplicacin Swing que te proporcionamos.

    ecutar Applets Swing

    Si ests interesado en escribir aplets swing, primero debers poderejecutarlos. Esta leccin proporciona dos applets, con instrucciones para

    ejecutarlos.

    na Gira Rpida por el Cdigo de una Aplicacin Swing

    Esta seccin muestra el cdigo de una pequea aplicacin swing. Versque el cdigo que debe tener necesariamente una aplicacin Swing yaprenders algunas de las caractersitcas ms utilizadas de Swing

    mailto:[email protected]:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    7/461

    Swin

    Sobre el JFC y Swing

    sta pgina responde cuatro preguntas:Qu son el JFC y Swing?q

    Qu versiones contienen el API Swing?q

    Qu paquetes Swing debera utilizar?q

    Que tienen de diferente los componentes Swing de los componentes AWTq

    Qu son el JFC y Swing?

    JFC es la abreviatura de JavaTM Foundation Classes, que comprende ungrupo de caractersticas para ayudar a construir interfaces grficos deusuario (GUIs).Los componentes Sw ing

    Inlcuye todo desde botones hasta splitpanes o tablas. Puedes verimgenes de todos los componentes en ndice Visual deComponente Swing.

    Soporte de Aspecto y Comportamiento Conectable

    Le ofrece a cualquier componente Swing una amplia seleccin deaspectos y comportamientos. Por ejemplo, el mismo programapuede usar el Aspecto y Comportamiento Java o el Aspecto yComportamiento Windows. Esperamos mucho ms de los paquetesde Aspecto y Comportamiento -- incluyendo algo que use sonido enlugar de un 'look' visual.

    API de AccesibilidadPermite tecnologas asistivas como lectores de pantalla y displayBraille para obtener informacin desde el interface de usuario.

    Java 2D API (slo JDK 1.2 )Permite a los desarrolladores incorporar fcilmente graficos 2D dealta calidad, texto, e imgenes en aplicaciones y applets Java.

    Soporte de Drag&Drop (slo JDK 1.2)Proporciona la habilidad de arrastrar y soltar entre aplicaciones Javay aplicaciones nativas.

    Las tres primeras caractersitcas del JFC fueron implementadas sinningn cdigo nativo, tratando slo con el API definido en el JDK 1.1.

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    8/461

    Cmo resultado, se convirtieron en una extensin del JDK 1.1. Estaversin fue liberada como JFC 1.1, que algunas veces es llamada'Versin Swing'. El API del JFC 1.1 es conocido como el API Swing.

    Nota: "Swing" era el nombre clave del proyecto que desarrolllos nuevos componentes. Aunque no es un nombre oficial,frecuentemente se usa para referirse a los nuevoscomponentes y al API relacionado. Est inmortalizado en los

    nombres de paquete del API Swing, que empiezan con"javax.swing."

    Esta seccin se concentra en los componentes Swing. Te ayudaremos aelegir los apropiados para tu GUI, te diremos cmo usarlos, y te daremosla informacin que necesites para usarlos de forma efectiva.Explicaremos el Aspecto y Comportamiento Conectable y el soporte deAccesibilidad cuando afecten a la forma de escribir programas Swing. Nocubre aquellas caractersitcas del JFC que slo aparecen en el JDK 1.2.Para informacin sobre ellas, puedes ver Grficos 2D y la Home Page delJFC.

    Los siguientes grficos muestran tres vistas de un GUI que usacomponentes Swing. Cada imagen muestra el mismo programa pero conun Aspecto y Comportamiento diferente. El programa, llamadoConverter, se explica en detalle al final de la siguiente leccin,Caractersticas y Conceptos Swing.

    Java Look & Feel CDE/Motif Look & Feel Windows Look & Feel

    Qu Versiones Contienen el API Swing?

    El API Swing se presenta en dos versiones:JDK 1.2qJFC 1.1 (para usar con JDK 1.1)q

    La versin que deberas usar depende de si necesitas usar JDK 1.1 o JDK1.2. Es ms sencillo usar JDK 1.2, ya que no necesitas aadir libreraspara poder usar el API Swing; el JFC construido dentro del JDK 1.2. Sinembargo, si necesitas usar el JDK 1.1, aadir el API Swing (usando JFC1.1) no es dficil. Las instrucciones para hacer ambas cosas estn en

    http://usuarios.tripod.es/Ozito/2d/index.htmlhttp://java.sun.com/products/jfc/index.htmlhttp://java.sun.com/products/jfc/index.htmlhttp://java.sun.com/products/jfc/index.htmlhttp://java.sun.com/products/jfc/index.htmlhttp://usuarios.tripod.es/Ozito/2d/index.html
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    9/461

    Compilar y Ejecutar Programas Swing.

    Esta seccin describe el API Swing 1.1, que es la versin presente enJDK 1.2 y en la versin llamada 'JFC 1.1 (con Swing 1.1).' El cdigo deesta seccin, funciona, sin ninguna modificacin, en ambas versiones.

    Sun ha liberado muchas versiones del JFC 1.1, que estn identificadaspor la versin del API Swing que contienen. Por ejemplo, una versin

    anterior del JFC 1.1, fue llamada "JFC 1.1 (con Swing 1.0.3)." Lasiguiente tabla muestra algunas de las versiones importantes quecontienen el API Swing. La fuente en negrita indica las versionestpicamente usadas en productos comerciales.

    Versin del APISwingg

    Versin del JFC 1.1Correspondiente

    Versin del JDK 1.2Correspondiente

    Comentarios

    Swing 0.2 JFC 1.1(con Swing 0.2) ningunaLa primera verinpbica del JFC 1.1.

    Swing 1.0.3JFC 1.1(conSwing 1.0.3)

    ninguna

    La versin del JFC

    1.1 incluida en JavaP lug-in 1.1.1.Soportada para eluso en productoscomerciales.

    Swing 1.1Beta

    JFC 1.1(con Swing 1.1

    Beta)

    JDK 1.2 Beta 4

    La primera versindel JDK 1.2 que usalos mismos nombresde paquetes Swing

    que lacorrespondienteversin del JFC 1.1.

    Swing 1.1Beta 3

    JFC 1.1(con Swing 1.1Beta 3)

    JDK 1.2 RC1

    La primera versincon los nombresfinales de lospaquetes Swing.

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    10/461

    Swing 1.1

    N o t a : Este esel API cubierto

    por estetutorial.

    JFC 1.1(con

    Swing 1.1)

    JDK 1.2 FCS

    La primera versinque contiene el APIfinal de Swing 1.1que est soportadapara el uso enproductoscomerciales. JavaP lug-in 1.1.2 yJava P lug-in 1.2proporciona soportepara applets paraJDK 1.1 + Swing 1.1y JDK 1.2,respectivamente.

    Qu Paquetes Swing Debera Utilizar?

    El API Swing es poderoso, flexible -- e inmenso. Por ejemplo, la versinJFC 1.1 tiene 15 paquetes pblicos:javax.accessibility,javax.swing ,javax.swing.border,javax.swing.colorchooser,javax.swing.event,javax.swing.filechooser,javax.swing.plaf,javax.swing.plaf.basic ,javax.swing.plaf.metal,javax.swing.plaf.multi ,javax.swing.table ,javax.swing.text,javax.swing.text.html,javax.swing.tree, yjavax.swing.undo.

    Afortunadamente, la mayora de los programas slo usan un subconjuntode este API. Esta seccin ordena el API para t, ofreciendo el cdigo ms

    comn y guindote por los mtodos y clases que podras necesitar. Lamayora del cdigo de esta seccin usa slo uno o dos paquetes swing:javax.swingqjavax.swing.event (no siempre es necesario)q

    Que tienen de diferente los componentes Swing de los componentes AWT?

    Si no te importan los componentes AWT, puedes saltarte esta secccin.Puedes obtener una introduccin ms general a los componentes Swing

    en Una ruta rpida por el cdigo de una aplicacin Swing yCaractersticas y Conceptos Swing.

    Los componentes AWT son aquellos proporcionados por las plataformasJDK 1.0 y 1.1. Aunque JDK 1.2 todava soporta componentes AWT,recomendamos encarecidamente el uso de componente Swing en sulugar. Puedes indentificar los componentes Swing porque sus nombresempiezan con J. Por ejemplo, la clase button del AWT se llama Button, yla clase buttn de Swing se llama JButton. Los componentes AWT estnen el paquetejava.awt, mientras que los componentes Swing estn en

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    11/461

    el paquetejavax.swing.

    La mayor diferencia entre los componentes AWT y los componentesSwing es que stos ltimos estn implementados sin nada de cdigonativo. Esto significa que los componentes Swing pueden tener msfuncionalidad que los componentes AWT, porque no estn restringidos aldenominador comn -- 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 partedel JDK 1.2.

    Incluso el ms sencillo de los componentes Swing tiene capacidades quevan ms all de lo que ofrecen los componentes AWT. Por ejemplo:

    Los botones y las etiquetas Swing pueden mostrar imgenes enlugar de o adems del texto.

    q

    Se pueden aadir o modificar fcilmente los bordes dibujadosalrededor de casi cualquier componente Swing. Por ejemplo, es fcilponer una caja alrededor de un contenedor o una etiqueta.

    q

    Se puede modificar fcilmente el comportamiento o la apariencia deun componente Swing llamando a mtodos o creando una subclase.

    q

    Los componentes Swing no tienen porque ser rectangulares. Porejemplo, los botones pueden ser redondos.

    q

    Las tecnologas asistivas como los lectores de pantallas puedenfcilmente obtener informacin desde los componentes Swing. Porejemplo, una herramienta puede fcilmente obtener el textomostrado en un botn o en una etiqueta.

    q

    Otra caractersitca Swing es que se puede especificar el Aspecto yComportamiento que utilice el GUI de nuestro programa. Por elcontrario, los componentes AWT siempre tienen el aspecto ycomportamiento de la plataforma nativa.

    Otra caracterstica interesante es que los componentes Swing con estadousan modelos para mantener el estado. Por ejemplo, un JSlider usa unobjeto BoundedRangeModel para contener su valor actual y un rangode valores legales. Los modelos se configuran automticamente, por esono tenemos que tratar con ellos, a menos que queramos tomar ventajade la potencia que pueden ofrecernos.

    Si ests acostumbrado a usar componentes AWT, necesitars tenercuidado con algunas reglas cuando uses componentes Swing:

    Como regla, los programas no deberan usar componentne de 'pesopesado' junto con componentes Swing. Los componentes de pesopesado incluyen todos los componentes AWT listos para usar (comoMenu y ScrollPane) y todos los componentes que desciendan delas clases Canvas y Panel del AWT. Esta restriccin existe porque

    q

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    12/461

    cuando un componente Swing (u otro componente de 'peso ligero')se solapa con componentes de peso pesado, ste ltimo siempre sedibuja encima. Para ms informacin puedes ver MezclarComponentes de peso ligero y pesado, un artculo de 'The SwingConnection'.Los componentes Swing no son de thread seguro. Si modificas uncomponente Swing visible -- llamando a su mtodo setText, por

    ejemplo -- desde cualquier lugar que no sea el manejador deeventos, necesitas seguir unos pasos especiales para hacer que lamodificacin se ejecute en el thread de despacho de eventos. Estono es ningn problema para la mayora de los programas Swing, yaque el cdigo que modifica los componentes normalmente seencuentra en los manejadores de eventos.

    q

    La herencia de contenidos de cualquier ventana o applet quecontenga componentes swing debe tener un contenedor de altonivel Swing como raz del rbol. Por ejemplo, una ventana principaldebera ser implementada como un ejemplar de JFrame en vez decomo un ejemplar de Frame.

    q

    No se aaden directamente los componentes a un contenedor dealto nivel como un JFrame. En su lugar, se aaden loscomponentes a un contenedor (llamado panel de contenido) que asu vez est contenido por el JFrame.

    q

    Convertir a Swing explica ms cosas sobre las diferencias entre loscomponentes Swing y los componentes AWT.

    http://java.sun.com/products/jfc/tsc/swingdoc-archive/mixing.htmlhttp://java.sun.com/products/jfc/tsc/swingdoc-archive/mixing.htmlmailto:[email protected]://java.sun.com/products/jfc/tsc/swingdoc-archive/mixing.htmlhttp://java.sun.com/products/jfc/tsc/swingdoc-archive/mixing.html
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    13/461

    Swin

    Compilar y Ejecutar Programas Swing

    sta seccin explica cmo compilar e ejecutar una aplicacin Swing. Lasstrucciones de compilacin funcionan para todos los programas Swing -- appleaplicaciones. Si ests interesados en los applets Swing, deberas leer tambinecutar Applets Swing. Si no ests intesado en compilar y ejecutar programaswing, puedes saltar directamente a Un Ruta Rpida por el Cdigo de unaplicacin Swing, que te guiar a travs del cdigo de una sencilla aplicacin.

    as instrucciones de esta seccin asumen que ya sabes escribir y compilarrogramas Java.

    mo se compila un programa Swing depende de si se est utilizando el JDK 1.JDK 1.2. Usar el JDK 1.2 es un poco ms sencillo porque tiene incluido la vers

    e Swing. Elige las instrucciones correspondientes a la versin que eststilizando:

    JDK 1.2q

    JDK 1.1 + JFC/ Swing Releaseq

    as instrucciones explican cmo ejecutar un programa sencillo, llamadowingApplication, cuyo GUI se parece a esto:

    mailto:[email protected]:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    14/461

    Swin

    Compilar y Ejecutar Programas Swing (JDK 1.2)

    qu estn los pasos para compilar y ejecutar nuestro primer programa Swing cJDK 1.2.:

    Descargar la ltima versin del JDK 1.2, si no lo has hecho y.1.

    Crear un programas que use componentes Swing.2.

    Compilar el programa.3.

    Ejecutar el programa.4.

    escargar la ltima versin del JDK 1.2

    Aqu podrs descargar gratis la ltima versin del JDK 1.2.

    rear un Porgrama que Use Componentes Swing

    Puedes usar un programa sencillo que nosotros proporcionamos, llamadoSwingApplication. Por favor, descarga y guarda este fichero:SwingApplication.java. El nombre del fichero debe ser exactamente"SwingApplication.java" incluyendo las maysculas.

    ompilar un Programa que usa Componentes Swing

    El siguiente paso es compilar el programa. Compilar un programa Swingcon el JDK 1.2 es sencillo, ya que los paquetes Swing forman parte delJDK 1.2. Aqu tenemos un ejemplo:

    javac -deprecation SwingApplication.java

    Si no puedes compilar SwingApplication.java, ser probablementeporque ests usando un compilador del JDK 1.1 en vez de uno del JDK

    1.2, o porque ests usando una versin beta del JDK 1.2. Deberas poderejecutar los programas de esta seccin sin cambiarlos si te hasactualizado a la versin ms reciente del JDK 1.2.

    Si debes usar el JDK 1.2 Beta 4, por alguna razn, aqu puedes ver cmocambiar SwingApplication.java para usar los antiguos nombres depaquetes:

    //import javax.swing.*; //comment out this line import com.sun.java.swing.*;//uncomment this line

    http://java.sun.com/products/jdk/1.2/http://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/SwingApplication.javahttp://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/SwingApplication.javahttp://java.sun.com/products/jdk/1.2/mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    15/461

    Puedes ver Nombres de Paquetes Swing para ms informacin sobre losdistintos nombres de paquetes.

    ecutar el Programa

    Una vez que el programa se ha compilado satisfactoriamente, podemosejecutarlo.

    Asumiendo que nuestro programa usa un Aspecto y Comportamientoestndard -- como el Aspecto y Comportamiento Java, o Windows oCDE/Motif -- podemos usar el intrpre del JDK 1.2 para ejecutar elprogramas sin aadir nada al path de clases. Por ejemplo:

    java SwingApplication

    Si se usa un Aspecto y Comportamiento no estndard, deberemosasegurarnos de que su paquete est incluido en el path de clases. Porejemplo:

    Solaris: java -classpath .:/home/me/lnfdir/newlnf.jar SwingApplication Win32: java-classpath .;C:\java\lnfdir\newlnf.jar SwingApplication

    Nota:No incluyas las clases del JDK 1.2 en el path de clases.El intrprete del 1.2 las encuentra automticamente.

    http://usuarios.tripod.es/Ozito/ui/swingstart/_packagename.htmlmailto:[email protected]://usuarios.tripod.es/Ozito/ui/swingstart/_packagename.html
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    16/461

    Swin

    Compilar y Ejecutar Programas Swing (JDK 1.1)

    qu estn los pasos para compilar y ejecutar nuestro primer programa Swing cJDK 1.2 y JFC/Swing:

    Descargar la ltima versin del JDK, si no lo has hecho ya.1.

    Descargar la ltima versin del JFC 1.1.2.

    Crear un programa que use componentes Swing.3.

    Compilar el programa.4.

    Ejecutar el programa.5.

    escargar la ltima Versin del JDK 1.1

    Puedes descargar gratis la implementacin de referencia del JDK 1.1desde java.sun.com. Slo tienes que ir a la pgina apropiada para tuplataforma -- Solaris o Win32.

    escargar la ltima versin de JFC/Swing

    Puedes desacargar la ltima versin del JFC 1.1 en la Home Page del

    JFC. Esta seccin describe la versin Swing 1.1 del JFC 1.1.

    rear un Programa que use Componentes Swing

    Puedes usar un programa sencillo que nosotros proporcionamos, llamadoSwingApplication. Por favor, descarga y guarda este fichero:SwingApplication.java. El nombre del fichero debe ser exactamente"SwingApplication.java" incluyendo las maysculas.

    ompilar un Programa que use Componentes Swing

    El siguiente paso es compilar el programa. Aqu puedes ver unaexplicacin general de cmo compilar una aplicacin Swing con el JDK1.1:

    Anota dnde se encuentra tu copia del JFC 1.1 (Swing 1.1). Elarchivo de clases Swing swing.jar, est en el directorio superior deesta versin. Podras querer crear una variable de entorno llamadaSWING_HOME que contenga el path del directorio superior de la

    1.

    http://java.sun.com/products/jdk/1.1/http://java.sun.com/products/jdk/1.1/download-jdk-solaris.htmlhttp://java.sun.com/products/jdk/1.1/download-jdk-windows.htmlhttp://java.sun.com/products/jfc/#download-swinghttp://java.sun.com/products/jfc/#download-swinghttp://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/SwingApplication.javahttp://usuarios.tripod.es/Ozito/ui/swingstart/_envvariables.htmlhttp://usuarios.tripod.es/Ozito/ui/swingstart/_envvariables.htmlhttp://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/SwingApplication.javahttp://java.sun.com/products/jfc/#download-swinghttp://java.sun.com/products/jfc/#download-swinghttp://java.sun.com/products/jdk/1.1/download-jdk-windows.htmlhttp://java.sun.com/products/jdk/1.1/download-jdk-solaris.htmlhttp://java.sun.com/products/jdk/1.1/mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    17/461

    versin del JFC 1.1.

    Nota: No descomprimas el archivo swing.jar!

    Anota dnde est instalada tu versin del JDK. Necesitas esto parapoder encontrar las versiones apropiadas de las clases del JDK y elintrprete. Podras querer crear una variable de entorno llamadaJAVA_HOME que contenga el path del directorio superior de la

    versin del JDK.Las clases del JDK estn en el directorio lib del JDK, en un ficherollamado classes.zip. No descomprimas este fichero!. El intrpreteJava est en el directorio bin del JDK.

    2.

    Compila la aplicacin especificando un classpath que incluya elfichero swing.jar, el fichero classes.zip, y el directorio quecontenga las clases del programa (normalmente "."). Asegurate deque el fichero classes.zip y el compilador utilizado sonexactamente de la misma versin del JDK!.

    3.

    El siguiente ejemplo muestra cmo compilar SwingApplication en unsistema UNIX. Asume que has configurado las variables de entornoJAVA_HOME y SWING_HOME.

    $JAVA_HOME/bin/javac -classpath .:$SWING_HOME/swing.jar:$JAVA_HOME/lib/classes.zip SwingApplication.java

    Si eliges no usar variables de entorno, podras usar un comando comoste:

    javac -classpath .:/home/me/swing-1.1/swing.jar: /home/me/jdk1.1.7/lib/classes.zipSwingApplication.java

    Aqu puedes ver un ejemplo de compilacin sobre Win32:

    %JAVA_HOME%\bin\javac -deprecation -classpath.;%SWING_HOME%\swing.jar;%JAVA_HOME%\lib\classes.zip SwingApplication.java

    Aqu puedes ver una alternativa que no usa variables de entorno:

    javac -deprecation -classpath .;C:\java\swing-1.1\swing.jar;C:\java\jdk1.1.7\lib\classes.zip SwingApplication.java

    Nota: Si no puedes compilar SwingApplication.java,probablemente ser debido a que no tienes los ficheroscorrectos en el classpath o a que ests usando una versin delJFC 1.1 que tiene un API Swing antiguo. Deberas poderejecutar los programas de esta seccin sin cambiarlos si te hasactualizado a la versin ms reciente del JFC 1.1.

    Antes de la Beta 3 de Swing 1.1, el API Swing usaba nombresde paquetes diferentes. Aqu puedes ver cmo modificar

    http://usuarios.tripod.es/Ozito/ui/swingstart/_envvariables.htmlhttp://usuarios.tripod.es/Ozito/ui/swingstart/_envvariables.html
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    18/461

    SwingApplication.java para usar los antiguos nombres depaquetes:

    //import javax.swing.*; //comment out this line importcom.sun.java.swing.*; //uncomment this line

    Puedes ver Nombres de Paquetes Swing para ms informacinsobre los distintos nombres de paquetes.

    ecutar el Programa

    Una vez que el programa se ha compilado satisfactoriamente, podemosejecutarlo.

    Asegurate de que el classpath del intrprete no slo incluye lo quenecesites para compilar el fichero, sino que tambin debe incluir elfichero para el Aspecto y Comportamiento que use el programa. ElAspecto y Comportamiento Java, que es el valor por defecto, est en el

    fichero swing.jar. El Aspecto y Comportamiento Windows est enwindows.jar, y el Aspecto y Comportamiento CDE/Motif est enmotif.jar. No ests limitado a estas opciones deAspecto-y-Comportamiento; puedes usar cualquier otro Aspecto yComportamiento diseado para usarse con el API de Swing 1.1.

    Esta aplicacin usa el Aspecto y Comportamiento Java, por eso slonecesitamos swing.jar en el path de clases. As, el comando paraejecutarlo sera similar al comando para compilarlo. Slo hay quesustituirjava porjavac, y eliminar el sufijo .java. Por ejemplo, en

    UNIX:java -classpath .:/home/me/swing-1.1/swing.jar: /home/me/jdk1.1.7/lib/classes.zipSwingApplication

    Aqu hay un ejemplo de ejecucin de una aplicacin que usa el Aspecto yComportamiento Windows:

    %JAVA_HOME%\bin\java -classpath .;%SWING_HOME%\swing.jar;%JAVA_HOME%\lib\classes.zip;%SWING_HOME%\windows.jar SomeClass

    Mientras ests desarrollando tu aplicacin puedes simplificar el path de

    clases usando swingall.jar, que incluye todas las clases de la versinJFC 1.1. Por eso en lugar de poner swing.jar y windows.jar en tu pathde clases, por ejemplo, puedes poner slo swingall.jar.

    Importante: Evita usar swingall.jar en tu aplicacin final,contiene informacin usada por desarrolladores, as cmo lospaquetes de Aspecto y Comportamiento que usa una aplicacintpica. Puedes disminuir el tamao usando slo el ficheroswing.jar adems de los arhivos de Aspecto y

    http://usuarios.tripod.es/Ozito/ui/swingstart/_packagename.htmlhttp://usuarios.tripod.es/Ozito/ui/swingstart/_packagename.html
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    19/461

    Comportamiento que necesites.

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    20/461

    Swin

    Ejecutar un Applet Swing

    e pueden ejecutar applets Swing en cualquier navegador que tenga instalado eava Plug-in. Otras opciones son utilizar un navegador que sea complatible con DK 1.1 y que pueda encontrar las clases Swing, o un navegador que seaompatible con el JDK 1.2. Actualmente, el nico navegador compatible 1.2sponible es la utilidad AppletViewer proporcionada con el JDK 1.2. Para obteneformacin sobre como configurar los navegadores compatibles 1.2 para quebajen con Swing, puedes darte una vuelta por Hacer nuestro Navegador Swin

    n artculo de "The Swing Connection".

    a nica diferencia requerida entre un applet no-swing y otro applet swing, es qste ltimo debe descender de la clase JApplet, en vez de hacerlo directamenteclase Applet. Para ms informacin sobre los applets puedes ver Introduccis Applets

    Puedes ver una caja debajo de este prrafo que contiene el texto: "You areuccessfully running a Swing applet"? Si es as, tu navegador est configuradoorrectamente.

    Nota: Como el applet anterior utiliza Java Plug-in 1.1.1, es una versin

    Swing 1.0.3 del applet. Para ejecutar la versin Swing 1.1 Beta 3 delapplet, podemos utilizar el AppletViewer para verHelloSwingApplet.html , especificando swing.jar en el path de clasesdel AppletViewer.

    Puedes encontrar el cdigo fuente del applet enHelloSwingApplet.java, y el cdigo HTML para incluir el applet viendoel cdigo de sta misma pgina. La mala noticia es que el cdigo HTMLpara incluir el applet es un poco enrevesado. La buena noticia es que sepuede generar el cdigo HTML para una sencilla etiqueta automticamente. Puedes ver la documentacin del Java Plug-in paraobtener detalles sobre cmo descargar un conversor HTML gratis.

    Aqu puedes ver un applet ms complejo, con mltiples ficheros declases y un fichero de imagen. El cdigo del applet est enAppletDemo.java. Tambin utiliza el fichero ../ images/ middle.gif.

    El resto de esta pgina ofrece instrucciones paso a paso para ejecutar losapplets anteriores.

    http://java.sun.com/products/plugin/http://java.sun.com/products/jfc/tsc/swingdoc-current/applets.htmlhttp://java.sun.com/products/jfc/swingdoc-api/com.sun.java.swing.JApplet.htmlhttp://usuarios.tripod.es/Ozito/applets/appletintroduction.htmlhttp://usuarios.tripod.es/Ozito/applets/appletintroduction.htmlhttp://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/HelloSwingApplet.htmlhttp://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/HelloSwingApplet.javahttp://java.sun.com/products/plugin/http://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/AppletDemo.javahttp://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/images/middle.gifhttp://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/images/middle.gifhttp://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/AppletDemo.javahttp://java.sun.com/products/plugin/http://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/HelloSwingApplet.javahttp://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/HelloSwingApplet.htmlhttp://usuarios.tripod.es/Ozito/applets/appletintroduction.htmlhttp://usuarios.tripod.es/Ozito/applets/appletintroduction.htmlhttp://java.sun.com/products/jfc/swingdoc-api/com.sun.java.swing.JApplet.htmlhttp://java.sun.com/products/jfc/tsc/swingdoc-current/applets.htmlhttp://java.sun.com/products/plugin/mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    21/461

    aso a Paso: Ejecutar un Applet Basado en Swing

    Encontrar un navegador compatible 1.1 1,2, o descargar el JavaPlug-in dentro de un navegador compatible. Asegurate de quetienes la ltima versin tanto del navegador como del plug-in, yaque las ltimas versiones tienden a corregir errores que hacen queSwing funcione mejor. Los dos navegadores Java 1.1 son HotJavabrowser y el Applet Viewer (appletviewer), que se distribuye conel JDK. Una versin 1.2 del Appletviewer se distribuye en el JDK1.2. El Java Plug-in lo soportan varias versiones de NetscapeNavigator e Internet Explorer; puedes ver la Documentacin delJava Plug-in para obtener ms detalles.

    1.

    Si ests utilizando un navegador compatible 1.1 sin el Java Plug-in,determina cmo cargar el fichero Swing JAR en tu navegador.Puedes ver Configurar el Path de Clases del Navegador para ver unejemplo de cmo poner un fichero JAR de Swing en el path de

    clases del Appletviewer. Puedes ver Make Your Browser Swing enThe Swing Connection para ver cmo hacer lo mismo con InternetExplorer y Netscape Navigator.

    2.

    Apunta a esta pgina.3.

    http://java.sun.com/products/hotjava/http://java.sun.com/products/hotjava/http://java.sun.com/products/jdk/CurrentReleasehttp://java.sun.com/products/plugin/http://java.sun.com/products/plugin/http://usuarios.tripod.es/Ozito/ui/swingstart/_classpath.htmlhttp://java.sun.com/products/jfc/tsc/swingdoc-current/applets.htmlmailto:[email protected]://java.sun.com/products/jfc/tsc/swingdoc-current/applets.htmlhttp://usuarios.tripod.es/Ozito/ui/swingstart/_classpath.htmlhttp://java.sun.com/products/plugin/http://java.sun.com/products/plugin/http://java.sun.com/products/jdk/CurrentReleasehttp://java.sun.com/products/hotjava/http://java.sun.com/products/hotjava/
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    22/461

    Swin

    Una Ruta Rpida por el Cdigo de una Aplicacin

    Swingsta pgina te lleva a travs del cdigo del programa SwingApplication. Laguiente leccin, Caractersticas y Conceptos Swing, proporciona explicacionesompletas sobre los tpicos introducidos en esta seccin. Tambin proporciona, emplo mayor y ms realista, que puedes usar para ampliar y probar tus

    onocimientos sobre Swing.

    a aplicacin SwingAplication presentada en la seccin anterior es muy sencilrae una ventana que se parece a sta:

    ada vez que el usuario pulsa el botn, la etiqueta se actualiza. Puedes encontr

    programa completo en SwingApplication.java.sta pgina explica el programa en detalle, incluyendo los siguientes aspectos:

    Importar paquetes Swingq

    Elegir el Aspecto y Comportamientoq

    Configurar el Contenedor de alto nivelq

    Configurar botones y etiquetasq

    Aadir Componentes a los Contenedoresq

    Aadir Bordes alrededor de los Componentesq

    Manejar Eventosq

    Tratar con los problemas de Threadsq

    Soportar Tecnologas Asistivasq

    mportar paquetes Swing

    La siguiente lnea importa el paquete principal de Swing:

    http://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/SwingApplication.javahttp://usuarios.tripod.es/Ozito/ui/swingstart/example-swing/SwingApplication.javamailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    23/461

    import javax.swing.*;

    Nota: Las primeras versiones beta del JFC/Swing y del JDK1.2 usaban nombres de paquetes diferentes. Puedes verNombres de Paquetes Swing para ms detalles.

    Los programas Swing tambin necesitan clases de los paquetes

    principales del AWT:import java.awt.*; import java.awt.event.*;

    egir el Aspecto y Comportamiento

    Aqu puedes ver el cdigo que utiliza SwingApplication para seleccionarsu aspecto y comportamiento:

    public static void main(String [] args) { try { UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e){ } ..//Crea y muestra el GUI... }

    El cdigo anterior, esencialmente dice, "No me importa si el usuario aelegido un aspecto y comportamiento -- utiliza el aspecto ycomportamiento multi-plataforma." Esta aproximacin dictatorial tienesentido cuando el program ha sido diseado con un aspecto ycomportamiento particular en mente. El aspecto y comportamientomulti-plataforma es conocido como Aspecto y Comportamiento Java (conel nick "Metal").

    Para ms informacin sobre cmo especificar el aspecto y

    comportamiento, puedes ver la pgina Cmo Seleccionar el Aspecto yComportamiento

    onfigurar el Contenedor de Alto Nivel

    Todo programa que presente un GUI Swing contiene al menos uncontenedor Swing de alto nivel. Para la mayora de los programas, loscontenedores de alto nivel Swing son ejemplares de JFrame, JDialog, o(para los applets) JApplet. Cada objeto JFrame implementa una

    ventana secundaria. Cada objeto JApplet implementa un rea depantalla de un applet dentro de una ventana del navegador. Uncontenedor de Alto Nivel Swing porporciona el soporte que necesitan loscomponentes Swing para realizar su dibujado y su manejo de eventos.

    El ejemplo SwingApplication tiene un slo contenedor de alto nivel, unJFrame. Cuando el usuario cierra el frame, la aplicacin finaliza. Aquest el cdigo que configura y muestra el frame:

    public class SwingApplication { ... public static void main(String[] args) { ... JFrameframe = new JFrame("SwingApplication");//...create the components to go into the

    http://usuarios.tripod.es/Ozito/ui/swingstart/_packagename.htmlhttp://usuarios.tripod.es/Ozito/ui/swingstart/_packagename.html
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    24/461

    frame...//...stick them in a container named contents...frame.getContentPane().add(contents, BorderLayout.CENTER); //Finish setting upthe frame, and show it. frame.addWindowListener(new WindowAdapter() { publicvoid windowClosing(WindowEvent e) { System.exit(0); } }); frame.pack();frame.setVisible(true); } }

    Para ms informacin sobre los contenedores de alto nivel puedes verLos Componentes Swing y el rbol de Herencia de Contenedores

    onfigurar los Botones y las Etiquetas

    Como la mayora de los GUIs, el ejemplo de SwingApplication contieneun botn y una etiqueta. (Al contrario que la mayora de los GUIs, estoes todo lo que tiene SwingApplication). Aqu podemos ver el cdigoque inicializa el botn:

    JButton button = new JButton("I'm a Swing button!"); button.setMnemonic('i');button.addActionListener(this);

    La primera lnea crea el botn, La segunda lnea selecciona la letra "i"como mnemnico que el usuario puede utilizar para simular un click delbotn. Por ejemplo, en el Aspecto y Comportamiento Metal, teclear Alt+iresulta en un click del botn. La tercera lnea registra un manejador deeventos para el click del botn. Podremos ver el cdigo del manejador deeventos en Menajear Eventos.

    Aqu podemos ver el cdigo que inicializa y manipula la etiqueta:

    ...//where instance variables are declared: private static String labelPrefix ="Number of button clicks: "; private int numClicks = 0; ...//in GUI initialization code:

    final JLabel label = new JLabel(labelPrefix + "0 "); ... label.setLabelFor(button);...//in the event handler for button clicks: label.setText(labelPrefix + numClicks);

    El cdigo anterior es bastante conocido, excepto la lnea que invoca almtodo setLabelFor. Este cdigo existe slo para indicar a lastecnologas asistivas que la etiqueta describe el botn. Para msinformacin, puedes ver Supporting Assistive Technologies.

    Finalmente, aqu est el cdigo que inicializa el panel:

    JPanel pane = new JPanel(); pane.setBorder(BorderFactory.createEmptyBorder(30,

    30, 10, 30)); pane.setLayout(new GridLayout(0, 1)); pane.add(button);pane.add(label);

    Para ms informacin sobre los componentes Swing como los botones ylas etiquetas, puedes ver Usar Componentes Swing

    adir Componentes a los Contenedores

    SwingApplication agrupa la etiqueta y el botn en un contenedor (unJPanel) antes de aadir los componentes al frame. Aqu est el cdigo

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    25/461

    que inicializa el panel:

    JPanel pane = new JPanel(); pane.setBorder(BorderFactory.createEmptyBorder(30,30, 10, 30)); pane.setLayout(new GridLayout(0, 1)); pane.add(button);pane.add(label);

    La primera lnea de cdigo crea el panel. La segunda le aade un borde;explicaremos los bordes ms tarde.

    La tercera lnea de cdigo crea un controlador de distribucin que fuerzael contenido del panel a dibujarse en una sla columna. La ltima lneaaade el botn y la etiqueta al panel. Aadir el botn y la etiqueta alpanel significa que estn controlados por el controlador de distribucindel panel. Especficamente, el controlador de distribucin de uncontenedor determina el tamao y la posicin de cada componente quehaya sido aadido al contenedor.

    Los conceptos de los controladores de distribucin se describen enControladores de Distribucin. Para aprender cmo usar controladores de

    distribucin individuales, puedes ver la leccin Distribuir ComponentesDentro de un Contenedor.

    adir Bordes Alrededor de los Componentes

    Aqu est, de nuevo, el cdigo que aade el borde al JPanel:

    pane.setBorder(BorderFactory.createEmptyBorder( 30, //top 30, //left 10, //bottom30) //LEFT );

    Este borde simplemente proporciona un espacio en blanco alrededor del

    panel de contenidos -- 30 pixels extras en la parte superior, izquierda yderecha y 10 pixels extras en la parte inferior. Los bordes son unacaractersitcas que JPanel de la clase Component.

    Los conceptos de los bordes se describen en Control de la distribucin yen Dibujo

    anejar Eventos

    El ejemplo SwingApplication contiene dos manejadores de eventos.Uno maneja las pulsaciones del botn (eventos action) y otro maneja loseventos de cerrar ventana:

    button.addActionListener(new ActionListener() { public voidactionPerformed(ActionEvent e) { numClicks++; label.setText(labelPrefix +numClicks); } }); ... frame.addWindowListener(new WindowAdapter() { public voidwindowClosing(WindowEvent e) { System.exit(0); } });

    Puedes leer sobre el manejo de eventos Swing en Manejo de Eventos yen la leccin Escribir Oyentes de Eventos.

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    26/461

    ratar con Problemas de Threads

    El programa SwingApplication es de thread seguro. Una vez que suGUI es visible, en el manejador de eventos slo ocurre manipulacin GUI(actualizar la etiqueta). Como el manejador de eventos se ejecuta en elmismo thread que realiza todo el manejo de eventos y pintado de laaplicacin, no existe la posibilidad de que dos threads intenten manipular

    el GUI a la vez.Sin embargo, es fcil introducir problemas de threads en un programa.

    Puedes ver Threads y Swing para ms informacin sobre los threadsseguros en Swing.

    oportar Tecnologas Asistivas

    El soporte para tecnologas asistivas -- dispositivos como lectores depantalla que proporcionan formas alternativas de acceder a la

    informacin de un GUI -- ya est incluido en cada componente Swing. Elnico cdigo que existen en SwingApplication que maneja el soportede tecnologas asistivas es este:

    label.setLabelFor(button);

    Adems, la siguientes lneas seleccionan la informacin que puede serutilizada por tecnologas asistivas:

    super("HelloSwing"); JButton button = new JButton("I'm a Swing button!"); label =new JLabel(labelPrefix + "0 "); label.setText(labelPrefix + numClicks); JFrame frame

    = new JFrame("SwingApplication");Puedes ver Soportar Tecnologas Asistivas para ms informacin sobrecmo asegurarte de que tu programa funciona bien con herramientasque usan el API de accesibilidad para pedir componentes.

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    27/461

    Swin

    Caractersticas y Conceptos Swing

    sta leccin presenta las caractersticas de Swing y explica todos los conceptos ecesitas para poder utilizar los componentes Swing de forma efectiva. Al final dst leccin diseccionamos un programa Swing, como revisin de todo lo que haprendido.

    os Componentes Swing y el rbol de Contenedores

    Esta seccin muestra todos los componentes Swing y te cuenta comocombinarlos, en general, para crear un GUI. Swing proporciona muchos

    componentes GUI estndards como botones, listas, mens, y reas detexto. Tambin incluye contenedores como ventanas y barras deherramientas.

    ontrol de la Distribucin

    Los Contenedores usan controladores de ditribucin para determinarel tamao y la posicin de los componentes que contienen. Los bordesafectan a la distribucin de un GUI Swing haciendo los componentes msgrandes. Tambin puedes usar componentes invisibles que afecten a la

    distribucin.

    anejo de Eventos

    El Manejo de Eventos es la forma en que los programas responden alos eventos externos, como una pulsacin de usuario, Los programasSwing realizan todo su dibujado y menejo de eventos en el thread dedespacho de eventos.

    bujado

    Dibujado significa el dibujo del componente en la pantalla. Aunque essencillo personalizar el dibujado de un componente, la mayora de losprogramas lo ms complicado que hacen es personalizar el borde delcomponente.

    hreads y Swing

    Si haces algo a algn componente visible que podra afectar o depender

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    28/461

    de su estado, necesitas hacerlo desde el thread de despacho de eventos.Esto no es ningn problema para la mayora de los programas sencillos,que generalmente se refieren a los componentes slo desde el cdigo demanejo de eventos. Sin embargo, otros programas necesitan usar elmtodo invoekLater para ejecutar las llamadas al componenterelacionado desde el thread de despacho de eventos.

    s Caractersticas y Conceptos Swing

    Esta seccin presenta todava ms caractersticas y conceptos Swing, conenlaces a dnde encontrar ms informacin sobre ellas. Los tpicosincluyen, las caractersitcas de la clase JComponent, iconos, actions,soporte de Aspecto y Comportamiento Conectable, Tecnologas Asistivasy modelos separados.

    a Anatoma de un Programa Swing

    Esta seccin desmenuza una aplicacin Swing, llamada 'Converter' pararevisar cmo funcionan los programas Swing.

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    29/461

    Swin

    Los Componentes Swing y el rbol de Contenido

    sta seccin presenta algunos de los componentes ms utilizados de Swing yxplica como los componentes de un GUI entran juntos en un contenedor. Paraustrarlo, usaremos el programa SwingApplication presentado en Una Rutapida por el Cdigo de una Aplicacin Swing. Y aqu est su aspecto de nuevo:

    wingApplication crea cuatro componentes Swing muy utilizados:un frame, o ventana principal (JFrame)qun panel, algunas veces llamado pane (JPanel)qun botn (JButton)quna etiqueta (JLabel)q

    frame es un contenedor de alto nivel. Existe principalmente para proporcionaspacio para que se dibujen otros componentes Swing. Los otros contenedores to nivel ms utilizados son los dilogos (JDialog) y los applets (JApplet).

    panel es un contenedor intermedio. Su nico propsito es simplificar elosicionamiento del botn y la etiqueta. Otros contenedores intermedios, como aneles desplazables, (JScrollPane) y los paneles con pestaas (JTabbedPanepicamente juegan un papel ms visible e interactivo en el GUI de un programa

    botn y la etiqueta son componentes atmicos -- componentes que existen

    ara contener otros componentes Swing, sino como entidades auto-suficientes qepresentan bits de informain para el usuario. Frecuentemente, los componenttmicos tambin obtienen entrada del usuario. El API Swing proporciona muchomponentes atmicos, incluyendo combo boxes (JComboBox), campos de texTextField), y tablas (JTable).

    qu podemos ver un digrama con el rbol de contenidos de la ventanaostrada por SwingApplication. Este digrama muestra todos los contenedore

    reados o usados por el programa, junto con los componentes que contienen.

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    30/461

    bserva que si aadimos una ventana -- por ejemplo, un dilogo -- la nuevaentana tendra su propio rbol de contenidos, independiente del mostrado en egura.

    JFrame (un contenedor de algo nivle)

    |

    ...

    |

    panel de contenido

    |

    JPanel

    |

    +----------------+

    | |

    JButton JLabel

    omo muestra la figura, incluso el programa Swing ms sencillo tiene mltiplesveles en su rbol de contenidos. La raz del rbol de contenidos es siempre un

    ontenedor de alto nivel. Este contenedor proporciona espacio para que susomponentes Swing descendentes se dibujen a s mismo.

    Truco: Para ver el rbol de contenidos de cualquier frame o dilogo,pulsa el borde para seleccionarlo y pulsa Control-Shift-F1. Se escribiruna lista con el rbol de contenidos en el stream de salida estndard.

    odo contenedor de alto nivel contiene indirectamente un contenedor intermedionocido como panel de contenido. Para la mayora de los programas noecesitas saber qu pasa entre el contenedor de alto nivel y su panel de contenSi realmente quieres verlo, puedes ver Cmo usar Paneles Raz.)

    mo regla general, el panel de contenido contiene, directamente odirectamente, todos los componentes visibles en el GUI de la ventana. La granxcepcin a esta regla es que si el contenedor de alto nivel tiene una barra deen, entonces sta se sita en un lugar especial fuera del panel de contenido.

    ara aadir componentes a un contenedor, se usa una de las distintas formas dtodo add. Este mtodo tiene al menos un argumento -- el componente a aagunas veces se requiere un argumento adicional para proporcionan informaci

    e distribucin. Por ejemplo, la ltima lnea del siguiente cdigo de ejemplospecifica que el panel debera estar en el centro de su contenedor (el panel deontenido).

    rame = new JFrame(...);

    utton = new JButton(...);

    abel = new JLabel(...);

    ane = new JPanel();

    ane.add(button);

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    31/461

    ane.add(label);

    rame.getContentPane().add(pane, BorderLayout.CENTER);

    ara ver todos los componentes Swing puedes ir a la pgina Un ndice visual de omponentes Swing.

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    32/461

    Swin

    Control de Distribucin

    as siguientes figuras muestran los GUIs de cinco programas, cada uno de ellosuestra cinco botones. Los botones son idnticos, y el cdigo de los programas

    asi idntico. Entonces por qu parecen tan diferentes? Porque usan diferentesontroladores de distribucin para controlar el tamao y posicin de los botones

    ontrol de Distribucin es el proceso de determinar el tamao y posicin de lomponentes. Por defecto, cada contenedor tiene un controlador de distribuc

    un objeto que realiza el control de la distribucin de los componentes dentro ontenedor. Los componentes pueden proporcionarle al controlador de disposicius preferencias en cuanto a tamao y alineamiento, pero la ltima palabra la tcontrolador de disposicin.

    a plataforma Java suministra cinco controladores de disposicin comunmentetilizados: BorderLayout, BoxLayout, FlowLayout, GridBagLayout, yridLayout. Estos controladores de distribucin estn diseados para mostrarltiples componentes a la vez, y se han visto en la figura anterior. Una sextaase proporcionada, CardLayout, es un controlador de disposicin de propsitoeneral usado en combinacin con otros controladores de distribucin. Puedesncontrar detalles sobre cada uno de estos seis controladores, incluyendo claveara elegir el apropiado, en Usar Controladores de Distribucin.

    empre que se use el mtodo add para poner un componente en un contenedo

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    33/461

    ebemos tener en cuenta el controlador de distribucin del contenedor. Algunosontroladores como BorderLayout requiere que especifiquemos la posicinelativa del componente en el contenedor, usando un argumento extra para eltodo add. Ocasionalmente, un controlador de distribucin comoridBagLayout requiere elaborados procesos de configuracin. Sin embargo,uchos controladores de distribucin simplemente sitan los componentes en e

    rden en que fueron aadidos a su contenedor.

    odos esto probablemente suena ms complicado de lo que s. Si quieres puedeopiar el cdigo de nuestros ejemplos de Usar Componentes Swing o buscar elontrolador de distribucin individual en Usar Controladores de Distribucin.eneralmente, slo tendrs que seleccionar el controlador de distribucin de dopos de contenedores: paneles de contenido (que usan BorderLayout porefecto) y JPanel (que usan FlowLayout por defecto).

    resto de esta seccin describe algunas de las tareas ms comunes de lastribucin:

    Seleccionar el Controlador de Distribucinq

    Proporcionar Consejos sobre un Componenteq

    Poner Espacio entre Componentesq

    Cmo Ocurre el Control de Distribucinq

    eleccionar el Controlador de Distribucin

    Podemos cambiar fcilmente el controlador de distribucin que usa uncontenedor. Slo se debe llamar al mtodo setLayout del contenedor.

    Por ejemplo, aqu est el cdigo que hace que un panel useBorderLayout:

    JPanel pane = new JPanel();

    pane.setLayout(new BorderLayout());

    Aunque recomendamos que uses controladores de distribucin, se puederealizar la distribucin sin ellos. Seleccionando una propiedad dedistribucin del contenedor a nulo, podemos hacer que el contenedor nouse ningn controlador de distribucin. Con este esquema, llamado

    posicionamiento absoluto, podemos especificar el tamao y posicinde cada componente dentro del contenedor. Una desventaja delposicionamiento absoluto es que no se ajusta bien cuando seredimensiona el contenedor de alto nivel. Tampoco se ajusta bien a lasdiferencias entres usuarios y sistemas, como los diferentes tamaos defuente.

    roporcionar Consejos sobre un Componente

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    34/461

    Algunas veces necesitamos personalizar el tamao que un componenteproporciona al controlador de distribucin del contenedor, para que elcomponente se vea bien. Se puede hacer esto proporcionando lostamaos mnimo, preferido y mximo del componente. Tambinpodemos llamar a los mtodos de seleccin de tamao del componente-- setMinimumSize , setPreferredSize, y setMaximumSize -- opodemos crear una subclase del componente que sobreescriba losmtodos apropiados -- getMinimumSize , getPreferredSize, y

    getMaximumSize . Actualmente, el nico controlador de distribucin enla plataforma Java que presta atencin a la peticin de tamao mximodel componente es BoxLayout.

    Adems de proporcionar preferencias de tamao, podemos especificarpreferencias de alineamiento. Por ejemplo, podemos especificar que losbordes superiores de dos componentes deberan estar alineados. Seseleccionan los consejos de alineamiento llamando a los mtodossetAlignmentX y setAlignmentY del componente, o sobreescribiendolos mtodos, getAlignmentX y getAlignmentY del componente.Realmente BoxLayout es el nico controlador de distribucin que prestaatencin a los consejos de alineamiento.

    oner Espacio entre Componentes

    Tres factores influyen en la cantidad de espacio entre los componentesvisibles de un contenedor:El controlador de distribucin

    Algunos controladores de distribucin ponen automticamente

    espacio entre los componentes; otros no. Algunos permiten inclusoespecificar la cantidad de espacio entre los componentes. Puedesver Distribuir Componentes dentro de un Contenedor sobre elsoporte de espaciado de cada controlador de distribucin.

    Componentes invisibles.Se pueden crear componentes de peso ligero que no realicendibujo, pero que ocupen espacio en el GUI. Frecuentemente se usanlos componentes invisibles en contenedores controlados porBoxLayout. Puedes ver Cmo usar BoxLayout para ver ejemplos

    de uso de componentes invisibles.Bordes vacos

    No importa cual sea el controlador de distribucin, podemos afectarla aparente cantidad de espacio entre componentes aadiendolesbordes. Los mejores candidatos para los bordes vacos son los quetpicamente no tienen bordes, como los paneles y las etiquetas.Algunos otros componentes, como paneles desplazables, nofuncionan bien con bordes en algunas implementaciones del

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    35/461

    Aspecto y Comportamiento, debido a la forma en que implementansu cdigo de dibujo. Para ms informacin sobre los bordes puedesver Cmo usar Bordes.

    mo Ocurre el Control de Distribucin

    Aqu hay un ejemplo de secuencia de control de distribucin para unframe (JFrame).

    Despus de que el GUI est construido, se llama al mtodo packsobre el JFrame. Esto especifica que el frame debera ser de sutamao preferido.

    1.

    Para encontrar el tamao preferido del frame, el controlador dedistribucin aade el tamao de los lados del frame al tamaopreferido del componente directamente contenido por el frame. Estoes la suma del tamao preferido del panel de contenido, ms eltamao de la barra de men del frame, si existe.

    2.

    El controlador de disposicin del panel de contenido es responsablede imaginarse el tamao preferido del panel de contenido. Pordefecto, este controlador de disposicin es un objetoBorderLayout. Sin embargo, asumamos que lo hemosreemplazado con un objeto GridLayout que se ha configurado paracrear dos columnas. Lo interesante de gridlayout es que fuerza aque todos los componentes sean del mismo tamao, e intentahacerlos tan anchos como la anchura preferida del componente msancho, y tan altos como la altura preferida del componente msalto.

    Primero, el controlador gridlayout pregunta el panel de contenidopor su insets -- el tamao del borde del panel de contenido, siexiste. Luego, el controlador de gridlayout le pregunta a cadacomponente del panel de contenido sus tamaos preferidos,anotando la mayor anchura preferida y la mayor altura preferia.Luego calcula el tamao preferido del panel de contenido.

    3.

    Cuando a cada botn se le pide su tamao preferido, el botnprimero comprueba si el usuario ha especificado un tamaopreferido. Si es as, reporta este tamao. Si no es as, le pregunta a

    su Aspecto y Comportamiento el tamao preferido.

    4.

    El resultado final es que para determinar el mejor tamao de un frame,el sitema determina los tamaos de los contenedores en la parte inferiordel rbol de contenidos. Estos tamaos filtran el rbol de contenidos,eventualmente determinan el tamao total del frame. De forma similarocurren los clculos cuando se redimensiona el frame.

    ara ms informacin sobre control de distribucin, puedes ir a Distribuiromponentes Dentro de un Contenedor.

    http://usuarios.tripod.es/Ozito/ui/swingmisc/border.htmlhttp://usuarios.tripod.es/Ozito/ui/swingmisc/border.html
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    36/461

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    37/461

    Swin

    Manejo de Eventos

    ada vez que el usuario teclea un caracter o pulsa un botn del ratn, ocurre unvento. Cualquier puede ser notificado del evento. Todo lo que tiene que hacer esmplementar el interface apropiado y ser registrado como un oyente de evento dvento fuente apropiado. Los componentes Swing puede generar muchas clases vento. Aqu hay unos pocos ejemplos:

    Accin que resulta en el evento Tipo de oyenteEl usuario pulsa un botn, presiona Returnmientras teclea en un campo de texto, o elige untem de men.

    ActionListener

    El usuario elige un frame (ventana principal). WindowListenerEl usuario pulsa un botn del ratn mientras elcursor est sobre un componente. MouseListener

    El usuario mueve el cursor sobre un componente. MouseMotionListenerEl componente se hace visible. ComponentListenerEl componente obtiene obtiene el foco del teclado. FocusListenerCambia la tabla o la seleccin de una lista. ListSelectionListener

    ada evento est representado por un objeto que ofrece informacin sobre el even

    identifica la fuente. Las fuentes de los eventos normalmente son componentes, pros tipos de objetos tambin pueden ser fuente de eventos. Como muestra laguiente figura, cada fuente de evento puede tener varios oyentes registrados.versamente, un slo oyente puede registrarse con varias fuentes de eventos.

    vent event object /----> event listener

    ource ---------------------------> event listener

    \----> event listener

    escripcin:Mltiples oyentes pueden ser registrados para ser

    otificados de eventos de un tipo particular sobre una fuente particul

    uando queramos detectar los eventos de un componente determinado, primeroebemos chequear la seccin "Cmo se usa" el componente. Esta seccin ofreceemplos de manejo de eventos de los que querrs utilizar. Por ejemplo, Cmo cre

    rames ofrece un ejemplo de escritura de un oyente de window que sale de laplicacin cuando se cierra el frame.

    mo Implementar un Manejador de Eventos

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    38/461

    Todo manejador de eventos requiere tres partes de cdigo:Donde se declare la clase del manejador de eventos, el cdigoespecifica que la clase o implementa un interface de oyente, odesciende una clase que implementa un interface de oyente. Porejemplo:

    public class MyClass implements ActionListener {

    1.

    El cdigo que registra un ejemplar de la clase de manejo de eventosde un oynete sobre uno o ms componentes. Por ejemplo:

    someComponent.addActionListener(instanceOfMyClass);

    2.

    La implementacin de los mtodos del interface oyente. Por ejemplo:

    public void actionPerformed(ActionEvent e) {

    ...//code that reacts to the action...

    }

    3.

    Un escenario de manejo de eventos tpico ocurre con los botones(JButton). Para detectar cuando el usuario pulsa un botn de la pantalla (opulsa la tecla equivalente), un programa debe tener un objeto queimplementa el interface ActionListener. El programa debe registrar esteobjeto como un oyente de actin del botn (la fuente del evento), usando elmtodo addActionListener. Cuando el usuario pulsa el botn de lapantalla, ste dispara el evento action, Esto resulta en una llamada almtodo actionPerformed del oyente de action, el nico mtodo delinterface ActionListener). El nico argumento del mtodo es un objetoActionEvent que ofrece informacin sobre el evento y su fuente.

    ActionEvent

    button ----------------------------> action listener

    Descripcin: Cuando el usuario pulsa un botn, los oyentes

    de action del botn son notificados.

    Los manejadores de eventos pueden ser ejemplares de cualquier clase.Frecuentemente, se implementan usando clases internas annimas, lo quepuede hacer el cdio algo ms confuso -- hasta que hayas usado las clases

    internas. Para ms informacin sobre el uso de clases internas, puedes verUsar Adaptadores y Clases Internas para Manejar Eventos.

    Para ms informacin sobre la implementacin de manejo de eventos,puedes ver Escribir Oyentes de Eventos.

    os Threads y el Manejo de Eventos

    El cdigo de manejo de eventos se ejecuta en un slo threadm el threadde despacho de eventos. Esto asegura que todo manejador de eventos se

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    39/461

    terminar de ejecutar antes de ejecutar otro. Por ejemplo, el mtodoactionPerformed del ejemplo anterior se ejecuta en el thread de manejode eventos. El cdigo de dibujo tambin se realiza en el thread de despachode eventos. Esto significa que mientras se est ejecutando el mtodoactionPerformed , el GUI del programa est congelado -- no se dibujarnada ni se responder a las pulsaciones del ratn, por ejemplo.

    Importante: El cdigo de manejo de eventos debera ejecutar

    cada pulsacin! De otro modo, el rendimiento de tu programa severa empobrecido. Si necesitas hacer una operacin de largaoperacin como resultado de un evento, hazlo arrancando unnuevo thread (o de otro modo envindo una peticin a otrothread) para realizar la operacin. Para obtener ayuda sobre leuso de threads, puedes ver Cmo usar Threads.

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    40/461

    Swin

    Dibujo

    odras no necesitar la informacin de esta seccin, en absoluto. Sin embargo, ss componentes parece que no se dibujan correctamente, entender los concept

    e esta seccin podra ayudarte a ver qu hay errneo. De igual modo, necesitantender esta seccin si creas cdigo de dibujo personalizado para un compone

    mo funciona el dibujo

    Cuando un GUI Swing necesita dibujarse a s mismo -- la primera vez, oen respuesta a la vuelta de un ocultamiento, o porque necesita reflejar

    un cambio en el estado del programa -- empieza con el componente msalto que necesita ser redibujado y va bajando por el rbol de contenidos.Esto est orquestado por el sistema de dibujo del AWT, y se ha hechoms eficiente mediante el manejador de dibujo de Swing y el cdigo dedoble buffer.

    Los componentes Swing generalmente se redibujan a s mismos siempreque es necesario. Por ejemplo, cuando llamamos al mtodo setText deun componente, el cmponente debera redibujarse automticamente as mismo, y si es necesario, redimensionarse. Si no lo hace as es un

    bug. El atajo es llamar al mtodo repaint sobre el componente parapedir que el componente se ponga en la cola para redibujado. Si senecesita cambiar el tamao o la posicin del componente pero noautomticamente, deberamos llamar al mtodo revalidate sobre elcomponente antes de llamar a repaint.

    Al igual que el cdigo de manejo de eventos, el cdigo de dibujo seejecuta en el thread del despacho de eventos. Mientras se estmanejando un evento no ocurrir ningn dibujo. De forma similar, si laoperacin de dibujado tarda mucho tiempo, no se manejar ningn

    evento durante ese tiempo.Los programas slo deberan dibujarse cuando el sistema de dibujo se lodiga. La razn es que cada ocurrencia de dibujo de un propiocomponente debe ser ejecutado sin interrupcin. De otro modo, podranocurrir resultados imprecedibles. como que un botn fuera dibujadomedio pulsado o medio liberado.

    Para acelerar, el dibujo Swing usa doble-buffer por defecto -- realizadoen un buffer fuera de pantalla y luego lanzado a la pantalla una vez

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    41/461

    finalizado. Podra ayudar al rendimiento si hacemos un componenteSwing opaco, para que el sistema de dibujo de Swing pueda conocer loque no tiene que pintar detrs del componente. Para hacer opaco uncomponente Swing, se llama al mtodo setOpaque(true) sobre elcomponente.

    Los componentes no-opacos de Swing puede parecer que tienencualquier forma, aunque su rea de dibujo disponible es siempre

    rectangular. Por ejemplo, un botn podra dibujarse a s mismodibujando un octgono relleno. El componente detrs del botn, (sucontenedor, comunmente) sera visible, a travs de las esquinas de loslados del botn. El botn podra necesitar incluir cdigo especial dedeteccin para evitar que un evento action cuando el usuario pulsa enlas esquinas del botn.

    n Ejemplo de Dibujo

    Para ilustrar el dibujado, usaremos el programa SwingApplication, que

    se explic en Una Ruta Rpida a travs del Cdigo de una AplicacinSwing. Aqu podemos ver el GUI de SwingApplication:

    Y aqu su rbol de contenidos:

    JFrame (a top-level container)

    |

    ...

    |

    content pane

    |

    JPanel

    |

    +----------------+

    | |

    JButton JLabel

    Aqu est lo que sucede cuando se dibuja el GUI de SwingApplication:El contenedor de alto nivel, JFrame, se dibuja as s mismo.1.El panel de contenido primero dibuja su fondo, que es un rectngulo2.

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    42/461

    slido de color gris. Luego le dice al JPanel que se dibuje el mismo.El rectngulo del panel de contenido realmente no aparece en elGUI finalizado porque est oscurecido por el JPanel.

    Nota: Es importante que el panel de contenido sea opaco. De otromodo, resultar en dibujados confusos. Cmo el JPanel es opaco,podemos hacer que sea el panel de contenido (sustituyendosetContentPane por el cdigo existente getContentPane().add).

    Esto simplifica considerablemente el rbol de contenidos y eldibujado, eliminado un contenedor innecesario.

    El JPanel primero dibuja su fondo, un rectngulo slido de colorgris. Luego dibuja su borde. Esl borde es un EmptyBorder, que notendr efecto excepto para incrementar el tamao del JPanelreservando algn espacio extra en los laterales del panel.Finalmente, el panel le pide a sus hijos que se dibujen a s mismos.

    3.

    Para dibujarse a s mismo, el JButton dibuja su rectngulo defondo si es necesario y luego dibuja el texto que contiene. Si elbotn tiene el foco del teclado, significa que cualquier cosa que seteclee va directamente al botn para su procesamiento, luego elbotn realiza algn dibujado especfico del Aspecto yComportamiento para aclarar que tiene el foco.

    4.

    Para dibujarse a s misma, la JLabel dibuja su texto.5.

    De este modo, cada componente se dibuja a s mismo antes de que lohaga cualquier componente que contenga, Esto asegura que el fondo deun JPanel, por ejemplo, slo se dibuja cuando no est cubierto por uno

    de los componentes que contiene. La siguiente figura ilustra el orden enque cada componente que desciende de JComponent se dibuja a smismo:

    1. fondo(si es opaco)

    2. dibujopersonalizado

    (si existe)

    3. borde(si existe)

    4. hijos(si existen)

    .............

    .............

    .............

    .............

    .............

    .............

    .............

    ....().......

    .............

    .............

    .............

    .............

    =============

    =...()......=

    =...........=

    =...........=

    =...........=

    =============

    =============

    =...()......=

    =.---------.=

    =.|JButton|.=

    =.---------.=

    =============

    Para ms informacin sobe el dibujado, puedes ver la leccin Trabajarcon Grficos.

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    43/461

    Swin

    Threads y Swing

    sta pgina explica como usar el API Swing de forma segura con threads. Siuestro programa es un applet, lo ms seguro es construir su GUI en el mtodoit. Si nuestro programa es una aplicacin con el siguiente patrn comn

    staremos seguros:

    /Thread-safe example

    ublic class MyApplication {

    public static void main(String[] args) {

    JFrame f = new JFrame(...);

    ...//Add components to the frame here...f.pack();

    f.setVisible(true);

    //Don't do any more GUI work here.

    }

    ...

    //All manipulation of the GUI -- setText, getText, etc. --

    //is performed in event handlers such as actionPerformed().

    ...

    n embargo, si nuestro programa crea threads que realizan tareas que afectan UI, o manipulan un GUI ya visible en respuesta a algn evento del AWT, sigueyendo!a Regla de los Threads

    Los componentes Swing solo pueden ser accedidos por un thread a la vez.Generalmente, este thread es el que despacha los eventos.

    xcepciones a la Regla

    Unas pocas operaciones estn garantizadas como seguras ante los threadsmo Ejecutar Cdigo en el Thread de Despacho de Eventos

    Si necesitamos acceder al UI desde fuera del cdigo del despachador deeventos o de dibujo, podemos usar los mtodos invokeLater oinvokeAndWait.

    mo crear Threads

    Si necesitamos crear un thread -- por ejemplo para manejar un trabajo qu

    http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    44/461

    gasta mucho tiempo o paquetes de I/O -- podemos usar uno de los threadtiles como SwingWorker o Timer.

    a Regla de los Threads

    La Regla de los Threads es la siguiente:

    Regla: Una vez que se haya realizado un componente Swing,

    todo el cdigo que pudiera afectar o depender del estado deese componente debera ejecutarse en el thread de despachode eventos.

    Esta regla podra sonar espeluznante, pero para la mayora de losprogramas sencillos, no tenemos que preocuparnos de los threads. Antesde entrar en detalles sobre cmo escribir cdigo Swing, definiremos dostrminos: realizado y thread de despacho de eventos.

    Realizado significa que el mtodo paint del componente haya sido o

    podra ser llamado. Un componente Swing que sea una ventana de altonivel se realiza habiendo llamado a uno de estos mtodos sobre ella:setVisible(true) , show , o (lo que podra sorprendernos) pack. Una vezque una ventana se ha realizado, todos los componentes que contieneestn realizados. Otra forma de realizar un componente es aadirlo a uncomponente que ya est realizado.

    El thread de despacho de eventos es el thead que ejecuta el cdigo dedibujo y de despacho de eventos. Por ejemplo los mtodos paint yactionPerformed se ejecutan automticamente en el thread de

    despacho de eventos. Otra forma de ejecutar cdigo en el thread dedespacho de eventos es usar el mtodo invokeLater de SwingUtilities.

    xcepciones a la Regla

    Existen unas pocas excepciones a la regla de que todo el cdigo queafecte a un componente Swing realizado debe ejecutare en el thread dedespacho de eventos:Unos pocos mtodos de threads seguros.

    En la Documentacin del API Swing, los mtodos de threadsseguros estn marcados con este texto:Este mtodo es seguro ante los threads, aunque muchosmtodos Swing no lo son. Por favor lea Threads andSwing para ms informacin.

    Un GUI de una aplicacin frecuentemente puede ser construido ymostrado en el thread principal.

    Mientras que no se haya realizado ningn componente (Swing o de

    http://java.sun.com/products/jfc/tsc/swingdoc-archive/threads.htmlhttp://java.sun.com/products/jfc/tsc/swingdoc-archive/threads.htmlhttp://java.sun.com/products/jfc/tsc/swingdoc-archive/threads.htmlhttp://java.sun.com/products/jfc/tsc/swingdoc-archive/threads.html
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    45/461

    otro tipo) en el entorno de ejecucin actual, est construir ymostrar un GUI en el thread principal de una aplicacin. Paraayudarnos a ver por qu, aqu hay un anlisis del thread seguro dethread-safe example. Para refrescar nuestra memoria, aqu estnlas lneas ms importantes del ejemplo:

    public static void main(String[] args) {

    JFrame f = new JFrame(...); ...//Add components to the frame here...

    f.pack();

    f.setVisible(true);

    //Don't do any more GUI work here.

    }

    El ejemplo construye el GUI en el thread principal. En general,podemos construir (pero no mostrar) un GUI en cualquierthread, mientras que no hagamos llamadas que se refieran oafecten a los componentes ya realizados.

    1.

    Los componentes en el GUI son realizados por la llamada apack.

    2.

    Inmediatamente despus, los componentes el GUI sonmostrados con la llamada a setVisible (o show ).Tcnicamente, la llamada a setVisible es insegura porque loscomponentes ya han sido realizados por la llamada a pack.Sin embargo, como el programa no ha hecho visible el GUItodava, es sumamente contrario a que una llamada a paintocurra antes de que retorne setVisible.

    3.

    El thread principal no ejecuta cdigo GUI despus de llamar asetVisible. Esto significa que el cdigo del GUI se mueve delthread principal al thread de despacho de eventos, y elejemplo es, en la prctica, de thread seguro.

    4.

    Un GUI de un applet puede contruirse y mostrarse en el mtodoinit:

    Los navegadores existentes no dibujan el applet hasta despus deque hayan sido llamados los mtodos init y start. As, construir elGUI en el mtodo init del applet es seguro, siempre que no llamesa show() o setVisible(true) sobre el objeto applet actual.

    Por supuesto, los applets que usan componentes Swing deben serimplementados como subclases de JApplet, y los componentesdeben ser aadidos al panel de contenido del JApplet, en vez dedirectamente al JApplet. Al igual que para cualquier applet, nuncadeberamos realizar inicializacin que consuma mucho tiempo en losmtodos init o start; en su lugar deberamos arrancar un threadque realice las tareas que consuman tiempo.

    http://-/?-http://-/?-
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    46/461

    Los siguientes mtodos de JComponent son seguros parallamarlos desde cualquier thread: repaint, revalidate, einvalidate.

    Los mtodos repaint y revalidate envian peticiones para que elthread de despacho de eventos llame a paint y validate,respectivamente. El mtodo invalidate slo marca un componentesy se requiere la validacin de todos sus ancestros.

    Oyentes que pueden ser modificados desde cualquier threadEs siempre seguro llamar a los mtodos addLis t e n e rT y p e Listenery removeLis t e n e rT y p e Listener. Las operaciones deaadir/eliminar no tienen ningn efecto en el despacho de eventos,

    mo Ejecutar Cdigo en el Thread de Despacho de Eventos

    La mayor parte del trabajo de post-inicializacin de un GUI naturalmenteocurre en el thread de despacho de eventos. Una vez que el GUI esvisible, la mayora de los programas son conducidos por eventos comoacciones de botones o clicks del ratn, que siempre son manejados porel thread de despacho de eventos.

    Sin embargo, algunos programas necesitan realizar algn trabajo de GUIno conducido por eventos, despus de que el GUI sea visible. Aqutenemos algunos ejemplos:Programas que deben realizar una operacin de inicializacinlarga antes de poder ser usados:

    Esta clase de programas generalmente debera mostrar algn GUI

    mientras est ocurriendo la inicializacin, y luego actualizar ocambiar el GUI. La inicializacin no debera ocurrir en el thread dedespacho de eventos; si no el repintado y el despacho de eventosse pararan. Sin embargo, despus de la inicializacin elcambio/actualizacin del GUI debera ocurrir en el thread dedespacho de eventos por razones de seguridad con los threads.

    Programas cuyo GUI debe actualizarse como resultado deeventos no-AWT:

    Por ejemplo, supongamos que un programa servidor quiere obtener

    peticiones de otros programas que podran estar ejecutndose endiferentes mquinas. Estas peticiones podran venir en cualquiermomento, y resultan en llamadas a algunos de los mtodos delservidor en algn mtodo thread desconocido. Cmo puede elmtodo actualizar el GUI? Ejecutando el cdigo de actualizacin delGUI en el thread de despacho de eventos.

    La clase SwingUtilities proporciona dos mtodos para ayudarnos aejecutar cdigo en el thread de despacho de eventos:

    http://java.sun.com/products/jfc/swingdoc-api/com.sun.java.swing.JComponent.htmlhttp://java.sun.com/products/jfc/swingdoc-api/com.sun.java.swing.JComponent.html
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    47/461

    invokeLater: Pide que algn cdigo se ejecute en el thread de despachode eventos. Este mtodo retorna inmediatamente, sin esperar a que elcdigo sea ejecutado.invokeAndWait: Acta igual que invokeLater, excepto en que estemtodo espera a que el cdigo se ejecute. Como regla, deberamos usarinvokeLater en vez de este mtodo.

    ara ms informaicn sobre el uso de invokeLater y invokeAndWait, y otrosucos para esciribir programas multi-threads, puedes ver Cmo usar Threads.

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    48/461

    Swin

    Ms Caractersticas y Conceptos Swing

    sta leccin ha explicado algunos de los mejores conceptos que necesitarsonocer para construir GUIs Swing -- el rbol de contenidos, el control destribucin, el manejo de eventos, el dibujado, y los threads. Adems, hemoscado tpicos relacionados, como los bordes. Esta seccin explica algunas

    aractersticas Swing que no se han explicado todava:Caractersticas que Proporciona JComponentq

    Iconosq

    Actionsq

    Aspecto y Comportamiento Conectableq

    Soporte de Tecnologas Asistivasq

    Modelos de Datos y Estados Separadosq

    aractersticas que ProporcionaJComponent

    Excepto los contenedores de alto nivel, todos los componentes queempiezan con J descienden de la clase JComponent. Obtienen muchascaractersticas de esta clase, como la posibilidad de tener bordes,tooltips, y Aspecto y Comportamiento configurable. Tambin heredanmuchos mtodos de conveniencia. Para ms detalles, sobre lo queproporciona la clase JComponent puedes ver La clase JComponent

    onos

    Muchos componentes Swing -- principalmente los botones y las etiquetas-- pueden mostrar imgenes. Estas imgenes se especifican comoobjetos Icon. Puedes ver Cmo usar Iconos para ver instrucciones y una

    lista de ejemplos que usa iconos.ctions

    Con objetos Action, el API Swing proporciona un soporte especial paracompartir datos y estados entre dos o ms componentes que puedengenerar eventos action. Por ejemplo, si tenemos un botn y un tem demen que realizan la misma funcin, podramos considerar la utilizacinde un objeto Action para coordinar el texto, el icono y el estado de

    http://usuarios.tripod.es/Ozito/ui/swingcomponents/jcomponent.htmlhttp://usuarios.tripod.es/Ozito/ui/swingcomponents/jcomponent.htmlmailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    49/461

    activado de los dos componentes. Para ms detalles, puedes ver Cmousar Actions.

    specto y Comportamiento Conectable

    Un sencillo programa puede tener uno o varios aspectos ycomportamientos. Se puede permitir que el usuario determine el aspectoy comportamiento, o podemos determinarlos programticamente.

    Puedes ver Cmo seleccionar el Aspecto y Comportamiento para msdetalles.

    oporte para Tecnologas Asistivas

    Las tecnologas asisticas como los lectores de pantallas pueden usar elAPI de accesibilidad para obtener informacin sobre los componentesSwing. Incluso si no hacemos nada, nuestro programa Swingprobablemente funcionar correctamente con tecnologas asistivas, ya

    que el API de accesibilidad est construido internamente en loscomponentes Swing. Sin embargo, con un pequeo esfuerzo extra,podemos hacer que nuestro programa funcione todava mejor contecnologas asistivas, lo que podra expandir el mercado de nuestroprograma. Puedes ver Cmo Soportar Tecnologas Asistivas para msdetalles.

    delos de Datos y Estados Separados

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

    Por ejemplo, un botn (JButton) tiene un modelo (ButtonModel) quealmacena el estado del botn -- cul es su mnemnico de teclado, si estactivado, seleccionado o pulsado, etc. Algunos componentes tienenmltiples modelos. Por ejemplo, una lista (JList) usa un ListModel quealmacena los contenidos de la lista y un ListSelectionModel que siguela pista de la seleccin actual de la lista.

    Normalmente no necesitamos conocer los modelos que usa uncomponente. Por ejemplo, casi todos los programas que usan botonestratan directamente con el objeto JButton, y no lo hacen en absoluto

    con el objeto ButtonModel.Entonces Por qu existen modelos separados? Porque ofrecen laposibilidad de trabajar con componentes ms eficientemente y paracompartir fcilmente datos y estados entre componentes. Un caso comnes cuando un componente, como una lista o una tabla, contiene muchosdatos. Puede ser mucho ms rpido manejar los datos trabajandodirectamente con un modelo de datos que tener que esperar a cadapeticin de datos al modelo. Podemos usar el modelo por defecto del

  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    50/461

    componente o implementar uno propio.

    Para ms informacin sobre los modelos, puedes visitar las pginasindividuales de cada componente o La Anatoma de un Programa Basadoen Swing que describe algunos modelos personalizados usados por elprograma creado en esa seccin.

    mailto:[email protected]
  • 8/14/2019 Manual - Programacion - Java - Tutor Swing

    51/461

    Swin

    a Anatoma de un Programa Basado en Swing

    sta seccin mustra un programa Swing, llamado Converter, que tiene un UI grficuedes ver cmo est implementado este programa mirando el cdigo fuente queuedes encontrar en los ficheros Converter.java y ConversionPanel.java . Sinmbargo, no habla sobre lneas individuales de cdigo. Se concentra en cmo elrograma Converter usa las caractersticas GUI proporcionadas por la plataforma Jte pierdes cuando lees el cdigo fuente de Converter, puedes refrescar tu memo

    n la pgina Una Ruta Rpida por el Cdigo de una Aplicacin Swing.

    onverter es una aplicacin que convierte medidas de distancias entre unidadestricas y amricanas. Para ejecutarlo, debes compilar los siguientes ficheros fuent

    onverter.java , ConversionPanel.java , ConverterRangeModel.java ,ollowerRangeModel.java, DecimalField.java, FormattedDocument.java , ynit.java. Una vez compilado, puedes ejecutarlo llamando al intrprete con la claseonverter. Si necesitas ayuda para compilar y ejecutar Converter, puedes verompilar y Ejecutar un Programa Swing.

    qu tenemos un grfico comentado del GUI de Converter:

    Frame", "JPanel (ConversionPanel)" (x2 apuntado a los paneles que dicen "Metric

    ystem" and "U.S. System"), "JTextField (DecimalField)" (x2), JSlider (x2), JCombo2)]

    sta seccin describe las siguientes caractersitcas de Converter:Componentes Swingq

    El rbol de Contenidosq

    Control de Distribucin y Bordesq

    Modelos Separadosq

    Aspecto y Comportamiento Conectableq

    http://usuarios.tripod.es/Ozito/ui/swingoverview/example-swing/Converter.javahttp://usuarios.tripod.es/Ozito/ui/swingoverview/example-swing/ConversionPanel.javahttp://usuarios.tripod.es/Ozito/ui/swingoverview/example-swing/Converter.javahttp://usuarios.tripod.es/Ozito/ui/swingoverview/example-swing/ConversionPanel.javahttp://usuarios.tripod.es/Ozito/ui/swingoverview/example-swing/ConverterRangeModel.javahttp://usuarios.tripod.es/Ozito/ui/swingoverview/example-swing/FollowerRangeModel.javahttp://usuarios.tripod.es/Ozito/ui/swingoverview/example-swing/DecimalField.javahttp://usuarios.tripod.es/Ozito/ui/swingoverview/example-swing/FormattedDocument.javahttp://usuarios.tripod.es/Ozito/ui/swingoverview/example-swing/Unit.javahttp://