Está en la página 1de 13

Maquina virtual java La mquina virtual de Java (en ingls Java Virtual Machine, JVM) es un programa gratuito, ejecutable

en una plataforma especfica, capaz de interpretar y ejecutar instrucciones expresadas en un cdigo binario especial(el Java bytecode), el cual es generado por el compilador del lenguaje Java. Actualmente la mayora de las plataformas de ejecucin de Java son mquinas virtuales. La mquina virtual es un programa normal solamente ejecutable en un sistema operativo particular (por ejemplo, Windows) Esta JVM es la que le permite a Java ser multiplataforma debido a que cuando se compila el cdigo de Java, este queda compilado en bytecode que es lo que reconoce la JVM instalada en cualquier plataforma Windows, Linux o MacOS. En particular, nos interesa, por que las herramientas interactivas que incluye WebCT, como son el Chat o la pizarra virtual, estn desarrolladas en el lenguaje de programacin Java. Luego es indispensable tener instalada la mquina virtual para su correcto funcionamiento. Qu es el JDK (Java Development Kit)

Se trata de un conjunto de herramientas (programas y libreras) que permiten desarrollar (compilar, ejecutar, generar documentacin, etc.) programas en lenguaje Java. Existen versiones del JDK para prcticamente todos los Sistemas Operativos y existen tambin distintos programas comerciales Sun distribuye gratuitamente el JDK oficial para los siguientes sistemas operativos: Windows 95/98/NT, Solaris y Linux o Se pueden conseguir en Internet (http://www.javasoft.com/) o Los profesores de la asignatura los facilitarn a los alumnos que lo deseen en un CD-ROM prestado para la instalacin. Los JDK incorporan una herramienta de Debugger (detener la ejecucin de un programa en la lnea que se desee y poder conocer el valor de las variables en ese momento) La versin JDK1.2 se ha empezado a denominar tambin Java 2

que es un IDE? Un entorno de desarrollo integrado, llamado tambin IDE (sigla en ingls de integrated development environment), es un programa informtico compuesto por un conjunto de herramientas de programacin. Puede dedicarse en exclusiva a un solo lenguaje de programacino bien poder utilizarse para varios. Un IDE es un entorno de programacin que ha sido empaquetado como un programa de aplicacin, es decir, consiste en un editor de cdigo, un compilador, un depurador y un constructor de interfaz grfica (GUI). Los IDEs pueden ser aplicaciones por s solas o pueden ser parte de aplicaciones existentes. El lenguajeVisual Basic, por ejemplo, puede ser usado dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir sentencias Visual Basic en forma de macrospara Microsoft Word. Los IDE proveen un marco de trabajo amigable para la mayora de los lenguajes de programacin tales como C++, PHP, Python, Java, C#, Delphi, Visual Basic, etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecucin, en donde se permite utilizar el lenguaje de programacin en forma interactiva, sin necesidad de trabajo orientado a archivos de texto, como es el caso de Smalltalk u ObjectiveC.

BIBLIOTECAS DE LA API DE JAVA Con cada una de las versiones que Sun lanza del JDK, se acompaa de una serie de bibliotecas con clases estndar que valen como referencia para todos los programadores en Java. Estas clases se pueden incluir en los programas Java, sin temor a fallos de portabilidad. Adems, estn bien documentadas (mediante pginas Web), y organizadas en paquetes y en un gran rbol de herencia. A este conjunto de paquetes (o bibliotecas) se le conoce como la API de Java (Application Programming Interface). En este apartado explicaremos los paquetes bsicos de la API de Java, aunque algunos de ellos tienen subpaquetes. A. Paquetes de utilidades

y y y y y y

java.lang: Fundamental para el lenguaje. Incluye clases como String o StringBuffer, que se tratan ms en detenimiento en el captulo "III.2 Cadenas" de este tutorial. java.io: Para la entrada y salida a travs de flujos de datos, y ficheros del sistema. Se estudia en el captulo "III.3 Entrada/Salida" de este tutorial. java.util: Contiene colecciones de datos y clases, el modelo de eventos, facilidades horarias, generacin aleatoria de nmeros, y otras clases de utilidad. java.math: Clases para realizar aritmtica con la precisin que se desee. java.text: Clases e interfaces para manejo de texto, fechas, nmeros y mensajes de una manera independiente a los lenguajes naturales. java.security: Clases e interfaces para seguridad en Java: Encriptacin RSA... B. Paquetes para el desarrollo grfico

y y y y y

java.applet: Para crear applets y clases que las applets utilizan para comunicarse con su contexto. Se estudia en el captulo "VI. Applets" de este tutorial. java.awt: Para crear interfaces con el usuario, y para dibujar imgenes y grficos. Se estudia en el captulo "IV. Bibliotecas grficas" de este tutorial. javax.swing: Conjunto de componentes grficos que funcionan igual en todas las plataformas que Java soporta. Se estudia en el captulo "IV. Bibliotecas grficas" de este tutorial. javax.accesibility: Da soporte a clases de accesibilidad para personas discapacitadas. java.beans: Para el desarrollo de JavaBeans. C. Paquetes para el desarrollo en red

y y y y y

java.net: Clases para aplicaciones de red. Se estudia en el captulo "V. Java e Internet" de este tutorial. java.sql: Paquete que contiene el JDBC, para conexin de programas Java con Bases de datos. java.rmi: Paquete RMI, para localizar objetos remotos, comunicarse con ellos e incluso enviar objetos como parmetros de un objeto a otro. org.omg.CORBA: Facilita la posibilidad de utilizar OMG CORBA, para la conexin entre objetos distribuidos, aunque est codificados en distintos lenguajes. org.omb.CosNaming : Da servicio al IDL de Java, similar al RMI pero en CORBA

biblioteca AWT AWT es un conjunto de herramientas GUI (Interfaz Grfica con el Usuario) diseadas para trabajar con mltiples plataformas. Este paquete viene incluido en la API de Java como java.awt ya desde su primera versin, con lo que las interfaces generadas con esta biblioteca funcionan en todos los entornos Java disponibles (incluyendo navegadores, lo que les hace especialmente eficientes para la creacin de applets Java). Component Esta clase representa a cualquier objeto que puede ser parte de una interfaz grfica de usuario. Es la clase padre de muchas de las clases del AWT. Su propsito principal es representar algo que tiene una posicin y un tamao, que puede ser dibujado en la pantalla y que pueda recibir eventos de entrada (que responda a las interacciones con el usuario). La clase Component presenta diversos mtodos, organizados para cubrir varios propsitos. A continuacin se explican algunos de ellos. a.) Tamao y posicin del componente

y y y y y y y y

Dimension getSize(); Devuelve la anchura y altura del componente como un objeto de la clase Dimension, que tiene como campos: width (anchura) y heigth(altura). void setSize(int ancho, int largo); Establece la anchura y altura del componente. Dimension getPreferredSize(); Devuelve el tamao que este componente debera tener. void setPreferredSize(); Establece el tamao que este componente debera tener. Dimension getMinimumSize(); Devuelve el tamao mnimo que este componente debera tener. void setMinimumSize(int ancho, int largo); Establece el tamao mnimo que este componente debera tener. Rectangle getBounds(); Devuelve las coordenadas de este componente como un objeto de la clase Rectangle, que tiene como campos: x, y, width y heigth. void setBounds(int x, int y, int ancho, int largo); Establece las coordenadas de este componente.

b.) Acciones sobre el componente

y y y y y y y

boolean getEnabled(); Comprueba si el componente est o no activo. void setEnabled(boolean); Establece el componente a activo o inactivo. boolean getVisible(); Comprueba si el componente est o no visible. void setVisible(boolean); Establece si el componente est visible o invisible. void paint(Graphics g); Indica al AWT que ha de dibujar el componente g. void repaint(); Indica al AWT que ha de volver a dibujar el componente. void update(Graphics g); Es llamado por AWT cuando se invoca el mtodo repaint(). Por defecto llama a paint().

c.) Eventos de interaccin con el usuario A su vez hay tres tipos de mtodos, para la gestin de eventos mediante el nuevo modelo de eventos de AWT (desde la versin 1.1). Hay tres tipos de mtodos:

void add_Tipo_Listener(_Tipo_Listener l); Aade un oyente a la espera de algn tipo de eventos sobre este componente.

y y

void remove_Tipo_Listener(_Tipo_Listener l); Elimina algn oyente que estaba a la espera de algn tipo de eventos sobre este componente. void process_Tipo_Event(_Tipo_Event e); Procesa eventos del tipo _Tipo_Event envindolos a cualquier objeto _Tipo_Listener que estuviera escuchando.

En estos mtodos _Tipo_ puede ser cualquiera de los siguientes: Component, Focus, InputMethod, Key, Mouse, MouseMotion. Container La clase Container sabe cmo mostrar componentes embebidos (que a su vez pueden ser instancias de la clase Container). Algunos de los mtodos de la clase Container son:

y y y y y

Component add(Component c); Aade un componente al contenedor. void print(Graphics g); Imprime el contenedor. void printComponents(Graphics g); Imprime cada uno de los componentes de este contenedor. LayoutManager getLayout(); Devuelve el gestor de impresin (LayoutManager) asociado a este contenedor, que es el responsable de colocar los componentes dentro del contenedor. void setLayout(LayoutManager 1); Establece un gestor de impresin para este componente.

Estos objetos Container tienen un LayoutManager asociado que define la manera en que van a posicionarse los objetos componentes en su interior. Gestores de impresin LayoutManager y LayoutManager2 son dos interfaces encargadas de la representacin y posicionamiento en pantalla de componentes AWT. De estas interfaces se proporcionan cinco implementaciones en AWT. Cada una de ellas reparte los objetos de una forma particular:

y y y y y

BorderLayout: En cinco lugares: Norte, Sur, Este, Oeste y Centro (North, South, East, West y Center). CardLayout: Permite gestionar varios componentes de los que slo uno se visualiza a la vez, permaneciendo los dems invisibles debajo. FlowLayout: De izquierda a derecha horizontalmente en cada lnea. Cuando sobrepasan una lnea se comienza a la izquierda de la siguiente. GridLayout: En una tabla en la que todas las casillas tienen el mismo tamao. GridBagLayout: En una tabla, pero las casillas no tienen que tener el mismo tamao.

Otras clases Por supuesto AWT no se limita a estas clases. Dentro de esta biblioteca podemos encontrar multitud de clases prefabricadas para facilitar el diseo grfico. A continuacin explicamos algunas de ellas. a.) Clases contenedoras (hijas de Container

Panel: Permite hacer una presentacin ms avanzada que Container mediante la combinacin con subpaneles o subclases para crear contenedores personalizados. La clase Applet que sirve para crear applets Java, hereda de esta clase Panel.

y y y y y

ScrollPane: Una barra de desplazamiento, horizontal o vertical. Window: Una ventana sin borde. Frame: Una ventana que no tiene borde. Puede tener asociado un objeto Menubar (una barra de herramientas o barra de men personalizada). Dialog: Una ventana usada para crear dilogos. Tiene la capacidad de ser modal con lo que slo este contenedor recibira entradas del usuario. Filedialog: Un dilogo que usa el selector de archivos nativo del sistema operativo.

b.) Clases componentes (hijas directas de Component)

y y y y y y y y y y

Button: Un botn grfico para el que se puede definir una accin que suceder cuando se presione el botn. Canvas: Permite pintar o capturar eventos del usuario. Se puede usar para crear grficos o como clase base para crear una jerarqua de componentes personalizados. Checkbox: Soporta dos estados: on y off. Se pueden asociar acciones que se ejecuten (triggers) cuando el estado cambie. Choice: Men desplegable de opciones. Label: Cadena de etiqueta en una localizacin dada. List: Una lista desplegable de cadenas. Scrollbar: Desplegable de objetos Canvas. TextComponent: Cualquier componente que permita editar cadenas de texto.Tiene dos clases hijas: TextField: Componente de texto consistente en una lnea que puede ser usada para construir formularios. TextArea: Componente para edicin de texto de tamao variable.

Eventos de AWT AWT tiene sus propios eventos, que se explican a continuacin.

a.) Eventos fsicos Son todos hijos del evento ComponentEvent, que indica algn cambio en un objeto Component:

y y y y y

InputEvent: Se ha producido una entrada del usuario. Tiene como eventos hijos KeyEvent (pulsacin de una tecla) y MouseEvent (accin sobre el ratn). FocusEvent: Avisa al programa de que el componente ha ganado o perdido la atencin (enfoque) del usuario. Esto se deduce de la actividad del usuario (ratn y teclado). WindowEvent: Avisa al programa de que el usuario ha utilizado uno de los controles de ventana a nivel del sistema operativo, como los controles de minimizar o cerrar. ContainerEvent: Se enva cuando se aaden o eliminan componentes a un contenedor. PaintEvent: Evento especial que seala que el sistema operativo quiere dibujar de nuevo una parte de la interfaz. Un componente debe sobreescribir el mtodo paint() o el mtodo update() para gestionar este evento. Biblioteca Swins

Arquitectura Es un framework Modelo Vista Controlador para desarrollar interfaces grficas para Java con independencia de la plataforma. Sigue un simple modelo de programacin por hilos, y posee las siguientes caractersticas principales:

  

Independencia de plataforma. Extensibilidad: es una arquitectura altamente particionada: los usuarios pueden proveer sus propias implementaciones modificadas para sobrescribir las implementaciones por defecto. Se puede extender clases existentes proveyendo alternativas de implementacin para elementos esenciales. Personalizable: dado el modelo de representacin programtico del framework de swing, el control permite representar diferentes estilos de apariencia "look and feel" (desde apariencia MacOS hasta apariencia Windows XP pasando por apariencia GTK+, IBM UNIX o HP UXentre otros). Adems, los usuarios pueden proveer su propia implementacin de apariencia, que permitir cambios uniformes en la apariencia existente en las aplicaciones Swing sin efectuar ningn cambio al cdigo de aplicacin.

Nuevas caractersticas La arquitectura Swing presenta una serie de ventajas respecto a su antecedente AWT:

Amplia variedad de componentes: En general las clases que comiencen por "J" son componentes que se pueden aadir a la aplicacin. Por ejemplo: JButton. Aspecto modificable (look and feel): Se puede personalizar el aspecto de las interfaces o utilizar varios aspectos que existen por defecto (Metal Max, Basic Motif, Window Win32). Arquitectura Modelo-Vista-Controlador: Esta arquitectura da lugar a todo un enfoque de desarrollo muy arraigado en los entornos grficos de usuario realizados con tcnicas orientadas a objetos. Cada componente tiene asociado una clase de modelo de datos y una interfaz que utiliza. Se puede crear un modelo de datos personalizado para cada componente, con slo heredar de la clase Model. Gestin mejorada de la entrada del usuario: Se pueden gestionar combinaciones de teclas en un objeto KeyStroke y registrarlo como componente. El evento se activar cuando se pulse dicha combinacin si est siendo utilizado el componente, la ventana en que se encuentra o algn hijo del componente. Objetos de accin (action objects): Estos objetos cuando estn activados (enabled) controlan las acciones de varios objetos componentes de la interfaz. Son hijos de ActionListener. Contenedores anidados: Cualquier componente puede estar anidado en otro. Por ejemplo, un grfico se puede anidar en una lista. Escritorios virtuales: Se pueden crear escritorios virtuales o "interfaz de mltiples documentos" mediante las clases JDesktopPane y JInternalFrame. Bordes complejos: Los componentes pueden presentar nuevos tipos de bordes. Adems el usuario puede crear tipos de bordes personalizados. Dilogos personalizados: Se pueden crear multitud de formas de mensajes y opciones de dilogo con el usuario, mediante la clase JOptionPane. Clases para dilogos habituales: Se puede utilizar JFileChooser para elegir un fichero, y JColorChooser para elegir un color. Componentes para tablas y rboles de datos: Mediante las clases JTable y JTree. Potentes manipuladores de texto: Adems de campos y reas de texto, se presentan campos de sintaxis oculta JPassword, y texto con mltiples fuentes JTextPane. Adems hay paquetes para utilizar ficheros en formato HTML o RTF. Capacidad para "deshacer": En gran variedad de situaciones se pueden deshacer las modificaciones que se realizaron.

 

Soporte a la accesibilidad: Se facilita la generacin de interfaces que ayuden a la accesibilidad de discapacitados, por ejemplo en Braille.

Nuevos gestores de impresin 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 componente previo. SpringLayout: El espacio se asigna en funcin de una serie de restricciones asociadas con cada componente. ScrollPaneLayout: Incorporado en el componente ScrollPane. ViewportLayout: Incorporado en el componente Viewport.

 

 

Principales clases Las clases de Swing se parecen mucho a las de AWT. As la clase Panel de AWT tiene una clase JPanel en Swing. Esto se cumple para todas las clases menos para Choice, Canvas, FileDialgog y ScrollPane. De hecho todas las clases componentes de Swing (clases hijas de JComponent), son hijas de la clase Component de AWT.

ButtonGroup: Muestra una lista de elementos (JRadioButton) con solo uno seleccionable. Cada elemento tiene un crculo, que en caso del elemento seleccionado contendr un "punto". JToggleButton: Es como un botn normal, pero al ser pinchado por el usuario queda activado. JProgressBar: Representa una barra de estado de progreso, mediante la que habitualmente se muestra el desarrollo de un proceso en desarrollo (ejemplo: la instalacin de una aplicacin). JTabbedPane: Es una ventana con solapas (la que utiliza Windows). Este componente haba sido muy solicitado. JApplet: Aunque ya exista una clase Applet en AWT, esta nueva versin es necesaria para crear applets Java que utilicen interfaces Swing.

 

Por supuesto Swing no se limita a estas clases, sino que posee muchas ms con diversas funcionalidades. Para estudiarlas consulte la documentacin del JDK 1.2 de Java. Patrn de diseo Modelo-Vista-Controlador Muchos de los componentes Swing estn basados en un patrn de diseo denominado "Modelo-VistaControlador".

El concepto de este patrn de diseo se basa en tres elementos:

  

Modelo: Almacena el estado interno en un conjunto de clases. Vista: Muestra la informacin del modelo Controlador: Cambia la informacin del modelo (delegado).

Ejemplo Simple programa basado en Swing. Muestra una ventama (conteniendo una etiqueta y un botn) // Importa las clases necesarias de Swing and AWT import java.awt.EventQueue; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class SwingExample { public static void main(String[] args) { // Asegrese de que todas las instancias y accesos de Swing/AWT estn hecha en la // Event Dispatch Thread (EDT) EventQueue.invokeLater(new Runnable() { public void run() { // Crea un JFrame, es una Window con "decoraciones", o sea // titulo, borde y botn JFrame f = new JFrame("Swing Example Window"); f.setLayout(new FlowLayout()); // Adiciona algunos Componentes f.add(new JLabel("Hello, world!")); f.add(new JButton("Press me!")); f.pack(); f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); f.setVisible(true); } }); } } Diferencia entra AWT y Swins El interfaz de usuario es el aspecto ms importante de cualquier aplicacin. Una aplicacin sin un interfaz fcil, impide que los usuarios saquen el mximo rendimiento del programa. Java proporciona los elementos bsicos para construir decentes interfaces de usuario a travs del AWT, y opciones para mejorarlas mediante Swing, que s permite la creacin de interfaces de usuario de gran impacto y sin demasiados quebraderos de cabeza por parte del programador. Al nivel ms bajo, el sistema operativo transmite informacin desde el ratn y el teclado como dispositivos de entrada al programa. El AWT fue diseado pensando en que el programador no tuviese que preocuparse de detalles como controlar el movimiento del ratn o leer el teclado, ni tampoco atender a detalles como la escritura en pantalla. El AWT constituye una librera de clases orientada a objeto para cubrir estos recursos y servicios de bajo nivel. Cuando se empieza a utilizar Swing, se observa que JavaSoft ha dado un gran paso adelante respecto al AWT. Ahora los Componentes del interfaz grfico son Beans y utilizan el nuevo modelo de Delegacin de Eventos de Java. Swing proporciona un conjunto completo de Componentes, todos ellos lightweight, es decir,

ya no se usan componentes "peer" dependientes del sistema operativo, y adems, Swing est totalmente escrito en Java. Todo ello redunda en una mayor funcionalidad en manos del programador, y en la posibilidad de mejorar en gran medida la cosmtica de los interfaces grficos de usuario. Son muchas las ventajas que ofrece el uso de Swing. Por ejemplo, la navegacin con el teclado es automtica, cualquier aplicacin Swing se puede utilizar sin ratn, sin tener que escribir ni una lnea de cdigo adicional. Las etiquetas de informacin, o "tool tips", se pueden crear con una sola lnea de cdigo. Adems, Swing aprovecha la circunstancia de que sus Componentes no estn renderizados sobre la pantalla por el sistema operativo para soportar lo que llaman "pluggable look and feel", es decir, que la apariencia de la aplicacin se adapta dinmicamente al sistema operativo y plataforma en que est corriendo. Cuadros de dilogo y mensajes de alerta

El uso de pequeas ventanas auxiliares, bien sea para notificar al usuario o para solicitar informaciones puntuales, est sumamente extendido en todas las interfaces grficas de usuario. Java ofrece dos componentes, JOptionPane y JDialog, destinados a satisfacer este tipo de necesidades. Veamos en primer lugar un pequeo ejemplo de cuadro de dilogo que solicita una informacin y verifica la validez de la respuesta. Ejemplo.- Construir un programa que solicite un valor numrico entero cuyo valor est entre entre 1 y 10. El programa deber seguir solicitando el nmero mientras el valor de este no satisfaga estos requisitos. Una vez insertado un valor vlido, el programa lo mostrar en pantalla con un tamao mayor que el normal. Una posible versin de este programa es la que puede verse en las imgenes siguientes:

El programa arranca con un marco centrado en pantalla, y sin visualizar nmero alguno. El men archivo ofrece dos opciones, Ctrl-D para mostrar el cuadro de dilogo y Ctrl-Q para salir de programa. Obsrvese que esta ventana es un JFrame del tipo empleado habitualmente; no se ha utilizado todava ningn JDialog.

En esta imagen se observa lo que ocurre cuando el usuario inserta una cadena alfanumrica en lugar de un nmero entero y pulsa Intro. El resultado es un pitido y el progama pasa a mostrar el contenido del cuadro de texto seleccionado en su totalidad, para facilitar la introduccin de un nuevo valor. El programa permaecer en esta situacin mientras el usuario no inserte un nmero entero que satisfaga los requisitos impuestos.

Estas imgenes muestran lo que sucede cuando el usuario inserta un valor numrico correcto (el 7 en la imagen) y pulsa Intro. El programa admite el valor como vlido, desaparece el cuadro de dilogo y pasa a mostrarse el valor introducido en la ventana principal del programa. Para activar el cuadro de dilogo se puede seleccionar la primera opcin del men Archivo, o se puede pulsar Ctrl-D.

El programa consta de los archivos siguientes:

  

DemoInput.java Finis.java VerificadorCuadro.java Administradores de diseo (flow layout,grid layout, border layout)

"El Contenedor de los Componentes es el Frame. Tambin es la ventana principal de la aplicacin, lo que hace que para cambiar el icono o el cursor de la aplicacin no sea necesario crear mtodos nativos; al ser la ventana un Frame, ya contiene el entorno bsico para la funcionalidad de la ventana principal. Vamos a empezar a crear una aplicacin bsica, a la que iremos incorporando Componentes. Quizs vayamos un poco de prisa en las explicaciones que siguen; no preocuparse, ya que lo que no quede claro ahora, lo estar ms tarde. El problema es que para poder profundizar sobre algunos aspectos de Java, necesitamos conocer otros previos, as que proporcionaremos un ligero conocimiento sobre algunas caractersticas de Java y del AWT, para que nos permitan entrar a fondo en otras; y ya conociendo estas ltimas, volveremos sobre las primeras. Un poco lioso, pero imprescindible. En el archivo AplicacionAWT.java, se encuentra el cdigo completo de la aplicacin que vamos ir construyendo a lo largo de este repaso general por las caractersticas de que dispone el AWT. Comenzaremos el desarrollo de nuestra aplicacin bsica con AWT a partir del cdigo que mostramos a continuacin:import java.awt.*; public class AplicacionAWT extends Frame { static final int HOR_TAMANO = 1600; static final int VER_TAMANO = 1600; public AplicacionAWT() { super( "S.A.A.C:" ); pack(); resize( HOR_TAMANO,VER_TAMANO ); show(); } public static void main( String args[] ) { new AplicacionAWT(); } } La clase anterior es un Frame, ya que extiende esa clase y hereda todas sus caractersticas. Tiene un mtodo, el constructor, que no admite parmetros. Adems, se hace una llamada explcita al constructor super, es decir, al constructor de la clase padre, para pasarle como parmetro la cadena que figurar como el ttulo de la ventana. La llamada a show() es necesaria, ya que por defecto, los Contenedores del AWT se crean ocultos y hay que mostrarlos explcitamente. La llamada a pack() hace que los Componentes se ajusten a sus tamaos correctos en funcin del Contenedor en que se encuentren situados. La ejecucin de la aplicacin mostrar la siguiente ventana en pantalla:

Los atributos fundamentales de la ventana anterior son: Marco de 300x200 pixels No tiene barra de men No tiene ningn Componente Ttulo "Aplicacin Java con AWT" Color de fondo por defecto Layout por defecto Fondo de la ventana vaco "" Qu es un administrador de diseo? Los administradores nos ahorran el trabajo de dar a cada elemento su posicin (x,y). En vez de ello, un administrador define una disposicn u orden para todo el conjunto de elementos. Imaginemos una situacin cotidiana: si tienes que organizar un grupo de personas en una habitacin supn que tienes dos opciones: la primera es la ms usual, decir a cada persona la posicin exacta que debe ocupar. La segunda opcin es ms "abstracta" y ms interesante, les digo a todos que se organicen en funcin de un cierto orden, por ejemplo, en filas paralelas empezando desde la izquierda, o en diagonal, etc. En la segunda opcin lo nico que tienes que hacer es ordenar a todos los elementos que se organicen de una forma determinada y suponemos que todos los elementos tienen la suficiente "inteligencia" como para adoptar ese orden. Esto es algo muy semejante a lo que hacen nuestros administradores de diseo. Vamos a ver los administradores de diseo ms comunes en AWT: FlowLayout, BorderLayout y GridLayout.. Cmo se define el administrador de diseo? Por medio de la llamada a la funcin setLayout. Esta llamada se realiza desde jbInit:

setLayout( new TIPO_DE_ADMINISTRADOR_DE_DISEO() ); Donde TIPO_DE_ADMINISTRADOR_DE_DISEO es cualquiera de los tipos antes sealados: FlowLayout, BorderLayout, GridLayout y GridBagLayout. FlowLayout Por defecto un applet tiene como administrador de diseo a FlowLaout, que organiza los elementos de izquierda a derecha y de arriba hacia abajo. Por defecto la alineacin es centrada. En el siguiente ejemplo hemos puesto un FlowLayout con una alineacin a la izquierda (LEFT):

private void jbInit() throws Exception { setLayout( new FlowLayout( FlowLayout.LEFT ) ); .... } Las versiones del constructor de FlowLayout son:

y y y

FlowLayout( ) FlowLayout( int align ): El parmetro debe ser una constante static de la clase FlowLayout que indica el alineamiento horizontal: FlowLayout.LEFT, FlowLayout.RIGHT o FlowLayout.CENTER. . FlowLayout( int align, int hgap, int vgap ): el segundo y tercer parmetro indican la separacin horizontal y vertical en pxeles.

En el siguiente ejemplo hemos usado setLayout( new FlowLayout( FlowLayout.LEFT, 20, 10 ) ):

BorderLayout Este administrador organiza los elementos por zonas: Norte, Sur, Este, Oeste y Centro. Veamos el siguiente ejemplo, en el que la zona se indica en el segundo argumento de la llamada a a add():

private void jbInit() throws Exception { this.setLayout( new BorderLayout( ) ); b_juan.setText("Juan"); b_pedro.setText("Pedro"); b_pablo.setText("Pablo"); b_santiago.setText("Santiago"); b_mateo.setText("Mateo"); add(b_juan, BorderLayout.NORTH); add(b_pedro, BorderLayout.CENTER); add(b_pablo, BorderLayout.SOUTH); add(b_santiago, BorderLayout.EAST); add(b_mateo, BorderLayout.WEST); } El aspecto final es:

Observe dos caractersticas importantes: cada elemento (en este caso botones) se expande sobre la zona asignada. Adems el ltimo elemento de una zona oculta a los anteriores elementos de esa zona. Para entender esto, supongamos que incluimos un botn, denominado b_judas, y lo aadimos a la misma zona (NORTH) que b_juan:

private void jbInit() throws Exception { .... add(b_juan, BorderLayout.NORTH); add(b_judas, BorderLayout.NORTH); .... } Cul es el botn que se observa?Cul se oculta? Las versiones del constructor de BorderLayout son:

y y

BorderLayout( ) BorderLayout( int hgap, int vgap ): para indicar la separacin horizontal y vertical en pxeles.

GridLayout La disposicin o aspecto que indica este administrador de diseo es la tpica un eje cartesiano, como una hoja de clculo estructurada en filas y columnas. Proseguimos con nuestro ejemplo de los botones aplicando este nuevo administrador:

Para usar GridLayout debe especificar las filas y columnas a la hora de construirlo. Los elementos se aaden al applet con el orden izquierda-derecha y arriba-abajo: private void jbInit() throws Exception { this.setLayout( new GridLayout( 2, 3 ) ); // Dos filas y tres columnas b_juan.setText("Juan"); b_pedro.setText("Pedro"); b_pablo.setText("Pablo"); b_santiago.setText("Santiago"); b_mateo.setText("Mateo"); add(b_juan); add(b_pedro); add(b_pablo); add(b_santiago); add(b_mateo); } Existe un segundo tipo de constructor que permite especificar la distancia horizontal y vertical de los elementos:

GridLayout(int rows, int cols, int hgap, int vgap)