Modelo de Delegación de Eventos De acuerdo con Javasoft, las principales características de partida que han originado el nuevo modelode manejo de eventos en el AWT, son: o o o o o o Que sea simple y fácil de aprender Que soporte una clara separación entre el código de la aplicación y el código del interfaz Que facilite la creación de robustos controladores de eventos, con menos posibilidad de generación de errores (chequeo más potente en tiempo de compilación) Suficientemente flexible para permitir el flujo y propagación de eventos Para herramientas visuales, permitir en tiempo de ejecución ver cómo se generan estos eventos y quien lo hace Que soporte compatibilidad binaria con el modelo anterior Los eventos ahora están organizados en jerarquías de clases de eventos. El nuevo modelo hace uso de fuentes de eventos (Source) y receptores de eventos (Listener). Una fuente de eventos es un objeto que tiene la capacidad de detectar eventos y notificar a los receptores de eventos que se han producido esos eventos. Aunque el programador puede establecer el entorno en que se producen esas notificaciones, siempre hay un escenario por defecto. Un objeto receptor de eventos es una clase (o una subclase de una clase) que implementa un interfaz receptor específico. Hay definidos un determinado número de interfaces receptores, donde cada interfaz declara los métodos adecuados al tratamiento de los eventos de su clase. Luego, hay un emparejamiento natural entre clases de eventos y definiciones de interfaces. Por ejemplo, hay una clase de eventos de ratón que incluye muchos de los eventos asociados con las acciones del ratón, y hay un interfaz que se utiliza para definir los receptores de esos eventos. Un objeto receptor puede estar registrado con un objeto fuente para ser notificado de la ocurrencia de todos los eventos de la clase para los que el objeto receptor está diseñado. Una vez que el objeto receptor está registrado para ser notificado de esos eventos, el suceso de un evento en esta clase automáticamente invocará al método sobreescrito del objeto receptor. El código en el método sobreescrito debe estar diseñado por el programador para realizar las acciones específicas que desee cuando suceda el evento. Algunas clases de eventos, como los de ratón, involucran a un determinado conjunto de eventos diferentes. Una clase receptor que implemente el interfaz que recoja estos eventos debe sobreescribir todos los métodos declarados en el interfaz. Para prevenir esto, de forma que no sea tan tedioso y no haya que sobreescribir métodos que no se van a utilizar, se han definido un conjunto de clases intermedias, conocida como clases Adaptadoras (Adapter). Estas clases Adaptadores implementan los interfaces receptor y sobreescriben todos los métodos del interfaz con métodos vacíos. Una clase receptor puede estar definida como clase que extiende una clase Adapter en lugar de una clase que implemente el interfaz. Cuando se hace esto, la clase receptor solamente necesita sobreescribir aquellos métodos que sean de interés para la aplicación, porque todos los otros métodos serán resueltos por la clase Adapter Uno de los objetos receptor que se implementan con mayor frecuencia son los de la interfaz WindowListener en el manejo de ventanas, lo que haria necesario sobreescribir los seis métodos de la interfaz. Por lo que la otra clase receptor que se extiende es la clase WindowAdapter en vez de implementar la interfazWindowListener. La clase WindowAdapter sobrescribe los seis métodos de la interfaz con métodos vacíos, por lo que la clase receptor no necesita sobreescribir esos seis métodos solo el que necesita. Gestión de Eventos El paquete java.awt.event es el que contiene la mayor parte de las clases e interfaces de eventos. El modelo de delegación de eventos es un concepto que trabaja de la siguiente manera: Una fuente genera un evento y lo envía a uno a más oyentes o auditores, que han estado simplemente esperando hasta que reciben ese evento y una vez recibido lo procesan y lo devuelven. Una fuente es un objeto que genera un evento. Esto ocurre cuando cambia de alguna manera el estado interno de ese objeto. Las fuentes pueden generar más de un tipo de eventos. Una fuente tiene que ir acompañada de auditores para que estos reciban las notificaciones sobre el tipo específico de evento, cada tipo de evento tiene su propio método de registro. La forma general es: Public void addTypeListener(TypeListener el) Por ejemplo el método que registra o acompaña a un auditor de evento de teclado es addKeyListener( ). Cuando ocurre un evento, se notifica a todos los auditores registrados, que reciben una copia del objeto evento. Esto es lo que se conoce como multicasting del evento. Una fuente también puede proporcionar un método que permita a un auditor eliminar un registro en un tipo específico de evento y la forma general es: Public void removeTypeListener(TypeListener el); Aquí Type es el nombre del evento y el es una referencia al auditor. Por ejemplo para borrar un auditor del teclado se llamaría removeKeyListener( ). Auditores de eventos. Un auditor es un objeto que es avisado cuando ocurre un evento. Tiene dos requisitos principales. Primero tiene que ser registrado o ir acompañado por una o más fuentes para recibir notificaciones sobre los tipos específicos de eventos. Segundo, tiene que implementar métodos para recibir y procesar notificaciones. Clases de eventos principales en java.awt.event Clase de evento ActionEvent Descripción Se genera cuando se presiona un botón, se hace doble clic en un elemento de una lista, o se selecciona un elemento de tipo menú. Se genera cuando se manipula un scrollbar. Se genera cuando un componente se oculta, se mueve, se cambia de tamaño o se hace visible. Se genera cuando se añade o se elimina un componente de un contenedor. Se genera cuando un componente gana o pierde el foco. Superclase abstracta de cualquier clase de evento de entrada de componente. Se genera cuando se hace click en un checkbox o en un elemento de una lista; tambien ocurre cuando se hace una selección en una opción choice o cuando se selecciona o deselecciona un elemento de un menú de opciones. Se genera cuando se recibe una entrada desde el teclado. Se genera cuando el ratón se arrastra, se mueve, se hace clic, se presiona, o se libera; también se genera cuando el ratón entra o sale de un componente. Se genera cuando se cambia el valor de un área de texto o un campo de texto Se genera cuando una ventana se activa, se cierra, se desactiva, se minimiza, se maximiza, se abre, o se sale de ella. AdjustmentEvent ComponentEvent ContainerEvent FocusEvent InputEvent ItemEvent KeyEvent MouseEvent TextEvent WindowEvent ActionEvent .SHIFT_MASK una última constante entera ACTION_PERFORMED que se utiliza para identificar eventos de acción.Define cuatro constantes enteras que se pueden utilizar para identificar cualquier modificador asociado con este tipo de evento: ALT_MASK.CTRL_MASK. Para identificar el evento de acción generado se utiliza el método String getActionCommand( ) getSource( ) devuelve el objeto del tipo que genero el evento. Para identificar el tipo de tecla modificadora se uso se utiliza el método int getModifiers( ) AdjustmentEvent En este tipo de evento hay cinco constantes enteras que definen la actividad realizada por este evento: BLOCK_DECREMENT el usuario hace click dentro de la scrollbar para decrementar su valor. TRACK se arrastra el botón movible de la scroll bar UNIT_DECREMENT se ha hecho click en el botón que esta al final de la scroll bar para decrementar su valor UNIT_INCREMENT se ha hecho click en el botón que esta al final de la scroll bar para incrementar su valor Además hay una constante entera ADJUSTEMENT_VALUE_CHANGED que indica que ha ocurrido un cambio. BLOCK_INCREMENT el usuario hace click dentro de la scroll bar para incrementar su valor.META_MASK. Para determinar el tipo de ajuste se realiza mediante el método int getAdjustmentType( ) Y la cantidad de ajuste se obtiene mediante int getValue( ) ItemEvent Hay dos tipos de eventos de elemento y se identifican por las siguientes constantes enteras: DESELECTED el usuario deselecciona un elemento SELECTED el usuario selecciona un elemento Además define una constante para indicar que ocurrió un cambio y es ITEM_STATE_CHANGED Tambien define tres métodos unos es Object getItem( ) que devuelve la referencia al objeto que ha generado el evento ItemSelectable getItemSelectable( ) que se usa para obtener una referencia a los objetos ItemSelectable que han generado un evento. . KEY_RELEASED Y KEY_TYPED las dos primeras se generan cuando se presiona o se libera una tecla y el ultimo se genera cuando se genera un carácter. KeyEvent Define tres constantes enteras y son KEY_PRESSED. Int getStateChange( ) que devuelve el cambio de estado ocurrido ya se SELECTED o DESELECTED. VK_CONTROL VK especifica código de teclas virtuales y son independientes de SHIFT y ALT En caso que no este definido CHAR_UNDEFINED O VK_UNDEFINED el carácter generara un Los métodos que mas se usan son char getKeyChar( ) y int getKeyCode( ) respectivamente devuelve el carácter presionado y el tipo de tecla presionada. VK_PAGE_DOWN.VK_UP.Hay eventos que se generan que no siempre producen caracteres y es cuando se presionan teclas como el SHIFT y las constantes definidas son: VK_0…VK_9 y VK_A….VK_LEFT.V K_RIGHT.VK_SHIFT.VK_Z VK_ENTER.VK_DOWN.VK_CANCEL.VK_ALT.VK_ESCAPE.VK_PAGE_UP. MouseEvent Define las siguientes constantes para identificar los tipos de eventos y son: MOUSE_CLICKED el usuario hace click con el ratón MOUSE_DRAGGED el usuario arrastra el ratón MOUSE_ENTERED el ratón mete un componente MOUSE_EXITED el ratón sale de un componente MOUSE_MOVED se mueve el ratón MOUSE_PRESSED se presiona el ratón MOUSE_RELEASED se libera el raton . . Esto significa que se pueden añadir o quitar múltiples receptores de una sola fuente. int getY( ) que devuelven las coordenadas x.y del ratón y o Point getPoint( ) que tambien las devuelve pero mediante un objeto de tipo Point El método int getClickCount( ) que indica el número de clicks que se han hecho con el ratón WindowEvent define las siguientes constantes: WINDOW_ACTIVATED se ha activado la ventana WINDOW_CLOSED se ha cerrado la ventana WINDOW_CLOSING se ha pedido que se cierre la ventana WINDOW_DEACTIVATED la ventana a dejado de estar activa WINDOW_DEICONIFIED se ha mostrado la ventada tras pulsar su icono WINDOW_ICONIFIED se ha minimizado la ventana WINDOW_OPENED se ha abierto la ventana La función que se utiliza es Window getWindow( ) que devuelve el objeto que ha generado el evento. Fuentes de Eventos Todas las fuentes de eventos del AWT soportan el multienvío a receptores. la notificación de que se ha producido un mismo evento se puede enviar a uno o más objetos receptores simultáneamente.Los métodos mas usados son: int getX( ). en otras palabras. awt. Por ejemplo.awt.Dialog addWindowListener java. porque cada componente de la pantalla generará sus eventos específicos. barras de desplazamiento. cajas de selección. Como en el caso de los receptores. se puede hacer una distinción entre los eventos de bajo nivel y los eventos de tipo semántico. Las fuentes de eventos de bajo nivel serán las clases de elementos o componentes visuales del interfaz gráfico (botones.Component addComponentListener addFocusListener addKeyListener addMouseListener addMouseMotionListener java.El API de Java no garantiza el orden en que se enviarán los eventos a los receptores que están registrados en un objeto fuente. hay que tener en cuenta la herencia.awt. En caso de que el orden en que se distribuyen los eventos sea un factor importante en el programa. como se verá en uno de los programas que se presentarán. un objeto puede detectar eventos del ratón sobre un objeto Frame y notificar a un objeto MouseListener de la ocurrencia de estos eventos. etc. Esto es posible porque un objeto Frame extiende indirectamente la clase Component y.Container addContainerListener java.). MouseListener está definida en la claseComponent. el hecho de que los datos del evento estén encapsulados en un solo objeto hace que la propagación del evento sea extremadamente simple. para ser informados de esos eventos. aunque en la lista anterior no se muestre unMouseListener sobre un Frame. .2 permite registrar receptores sobre fuentes de eventos de los siguientes tipos: java. El JDK 1. se deberían encadenar los receptores de un solo objeto receptor registrado sobre el objeto fuente.awt.Frame addWindowListener Para determinar todos los tipos de eventos que se pueden comunicar desde un objeto fuente a un receptor. awt. Genera eventos de acción cuando se hace doble click sobre un elemento. en el JDK 1.awt.TextArea addTextListener java. genera eventos de elemento cuando se selecciona o deselecciona un elemento.TextField addActionListener addTextListener Ejemplos de componentes que pueden generar eventos Origen evento Button Checkbox Choice List de Descripción Genera eventos de acción (ActionEvent) cuando se presiona el botón.Checkbox addItemListener java.awt. Genera eventos de elementos (ItemEvent) cuando se selecciona o deselecciona un checkbox.Scrollbar addAdjustmentListener java.Choice addItemListener java.List addActionListener addItemListener java. Genera eventos de elementos cuando se cambia de opción choice.CheckboxMenuItem addItemListener java.awt.Los receptores de eventos que se pueden registrar de tipo semántico sobre objetos fuentes.2 son: java.awt. generadores de eventos.awt.Button addActionListener java.awt.MenuItem addActionListener java.awt.awt. Generá eventos de acción cuando se selecciona un Menu Item . el AWT proporciona un conjunto de clases abstractas adaptadores (Adapter) que coinciden con las interfaces. se maximiza. genera eventos de lemento cuando se selecciona o se deselecciona un elemento de un menú de opciones. etc. En la mayoría de las ocasiones. se cierra. Cuando se implementa un interfaz. al soltar el botón. en vez deimplementar el interfaz receptor correspondiente. Genera eventos de texto (TextEvent) cuando el usuario introduce un carácter. Se pueden definir clases Receptor extendiendo clases adaptadores. El interfaz declara un método para cada uno de estos subtipos. . se abre o se sale de ella.Scrollbar Text components Window elemento de menú. Adaptadores Muchos interfaces EventListener están diseñados para recibir múltiples clases de eventos. el interfaz MouseListener puede recibir eventos de pulsación de botón. Cada clase adaptador implementa un interfaz y redefine todos los métodos declarados por el interfaz con métodos vacíos. hay que recordar que todos los métodos declarados en un interfaz corresponden a los tipos de eventos individuales de la clase de eventos correspondiente. Por ello. Genera eventos de ventana (WindowEvent) cuando una ventana se activa. y que el objeto Fuente notifica al Receptor la ocurrencia de un evento de un tipo determinado invocando al método redefinido del interfaz. Genera eventos de ajuste (AdjustmentEvent) cuando se manipula el scrollbar. con lo cual se satisface ya el requerimiento de la redefinición de todos los métodos. De nuevo. no es necesario redefinir todos los métodos declarados en el interfaz porque no son útiles para la aplicación. incluso aunque se haga con métodos vacíos. se desactiva. es necesario redefinir todos los métodos que se declaran en ese interfaz. Esto proporciona libertad al programador para redefinir solamente aquellos métodos del interfaz que intervienen en la aplicación que desarrolla. a la recepción del cursor. se minimiza. por ejemplo. awt.ComponentAdapter java.2 son las que se indican a continuación: java.Las clases Adaptadores que se definen en el JDK 1.awt.awt. ComponentListener La interfaz tiene que definir los siguientes métodos: void componentResized(ComponentEvent ce) void componentMoved(ComponentEvent ce) .MouseMotionAdapter java.awt.MouseAdapter java.awt. AdjustmentListener La interfaz tiene que definir el método: void adjustmentValueChanged(AdjustmetEvent ae) el cual se invoca cuando ocurre un evento de ajuste.FocusAdapter java.WindowAdapter Interfaces de auditor que más se utilizan ActionListener La interfaz tiene que definir el método: void actionPerformed(ActionEvent e) el cual se invoca cuando ocurre un evento de acción.awt.KeyAdapter java. ContainerListener La interfaz tiene que definir los siguientes métodos: void componentAdded(ContainerEvet ce) void componentRemoved(ContainerEvet ce) Se invocan cuando se añade un componente a un contenedor y cuando se borra un componente de un contenedor. FocusListener La interfaz tiene que definir los siguientes métodos: void focusGained(FocusEvent fe) void focusLost(FocusEvent fe) Se invocan cuando se gana el foco o se pierde el foco ItemListener La interfaz tiene que definir el siguiente método: void itemStateChanged(ItemEvent ie) Se invoca cuando cambia el estado de un elemento . se muestra o se oculta. se mueve.void componentShown(ComponentEvent ce) void componentHiden(ComponentEvent ce) Se invocan cuando a un componente se le cambia de tamaño. libera una tecla y cuando se introduce un carácter. MouseListener La interfaz tiene que definir los siguientes métodos: void mouseClicked(MouseEvent me) void mouseEntered(MouseEvent me) void mouseExited(MouseEvent me) void mousePressed(MouseEvent me) void mouseReleased(MouseEvent me) Se invocan cuando se presiona.KeyListener La interfaz tiene que definir los siguientes métodos: void keyPressed(KeyEvent ke) void keyReleased(KeyEvent ke) void keyTyped(KeyEvent ke) Se invocan cuando se presiona. cuando se presiona y se libera el ratón. . cuando entra a un componente. MouseMotionListener La interfaz tiene que definir los siguientes métodos: void mouseDragged(MouseEvent me) void mouseMoved(MouseEvent me) Se invocan cuando se arrastra y se mueve el ratón. cuando sale. cuando se abre a partir de un icono y cuando se abre una ventana. se desactiva. se minimiza a un icono. WindowListener La interfaz tiene que definir los siguientes métodos: void windowActivated(WindowEvent we) activa void windowDeactivated(WindowEvent we) desactiva void windowClosed(WindowEvent we) cierra void windowClosing(WindowEvent we) petición de cerrar void windowDeiconfied(WindowEvent we) void windowIconfied(WindowEvent we) minimiza void windowOpened(WindowEvent we) abre Se invocan cuando se activa. se cierra una ventana. Clases adaptadoras que se usan cuando no se requieren definir todos los eventos de un elemento y son: . se esta cerrando una ventana.TextListener La interfaz tiene que definir el siguiente método: void textChanged(TextEvent te) Se invoca cuando ha ocurrido un cambio en un área de texto o en un campo de texto. Clase Adaptadora ComponentAdapter ContainerAdapter FocusAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter Interfaz auditora ComponentListen ContainerListen FocusListener KeyListener MouseListener MouseMotionListener WindowListener Applets Los applets son aplicaciones que se pueden ejecutar sobre Internet. para construir un applet se debe construir una clase derivada la clase existente Applet. Los applets deben de incluir dos paquetes que son: java.applet Los applets son ejecutados por un navegador de internet o bien por un visor de applets (appletviewer) y se deben de incluir en una página web como sigue: <applet code=“miapplet” width=200 height=60> </applet> Estructura de un Applet .awt y java. applet. Public class esqueleto extends Applet{ Public void init(){ //código de inicialización } Public void start(){ // código que comienza y reanuda la ejecución } Public void stop(){ //código que detiene la ejecución } Public void destroy( ){ //se ejecuta cuando termina el applet ultimo} Public void paint(Graphics g){ //código para dibujar el contenido de la ventana } } Orden de ejecución de los métodos en los applets Cuando comienza un applet el AWT llama a los siguientes métodos: init() start() y paint() .*.awt. Import java.Import java.*. cuando se va a otra pagina destroy se llama cuando determina que ya acabo el applet Ejemplo de un applet import java.Cuando finaliza un applet se llama a los siguientes métodos.*. paint se le llama cada vez que la salida del applet tiene que redibujarse y tambien se llama cuando el applet empieza a ejecutarse o miestras el applet tenga que dibujar una salida. . Este se llama cada vez que un documento HTML de un applet se visualiza en la pantalla. start se llama inmediatamente despues del init es llamado para reanudar un applet después de que este se haya detenido o parado. stop se llama cuando el navegador deja el documento HTML que contiene el applet. stop() destroy() init es el primer método y es cuando se deberían de inicializar las variables.awt. drawString(msg. public class app extends Applet{ String msg.30). fondo setForeground(Color. } public void paint(Graphics g){ msg+="en el interior del paint".*.blue).10. //establecer el color de la fuente msg="en el init ". } public void start(){ msg+="dentro de start ".import java. } } //establecer el color del Programa HTML <html> .applet.white). g. public void init() { setBackground(Color. como paint( ) o update( ). .int x1. Un contexto grafico está encapsulado en la clase Graphics y se obtiene de 2 maneras: Se pasa a un applet cuando se llama a algunos de sus métodos. una ventana hija de un applet. Las líneas se dibujan con el método drawLine(int x. que puede ser una ventana principal de un applet. Dibujar rectángulos. Todas las salidas sobre una ventana tienen lugar a traves de un contexto gráfico. o una ventana de una aplicación independiente. El origen (0.<head> <title>Primer applet</title> <applet code=“app.int y1) que realiza una linea con el color en uso.class” width=300 height=200> </applet> </head> <body> <b>corriendo</b> </body> </html> Trabajo con graficos.0) de cada ventana está en la esquina superior izquierda. El AWT tiene una amplia variedad de métodos graficos graficos. Es devuelto por el método getGraphics( ) de Component Líneas de dibujo.int y. Todos los gráficos se dibujan en una ventana. Las coordenadas vienen en pixeles. int largoy) Dibujar arcos.int xdiam. void drawRect(int x. int anchox.int ydiam) o fillRoundRect(int x. respectivamente.int anchox. se usan los métodos drawRoundRect(int x.int y.int y.int altoy.int numpuntos). Dibujar polígonos.int anchox. Para obtener las dimensiones de la ventana se obtienen mediante getSize( ) este devuelve un objeto de la clase Dimension con las diemsiones de la ventana. También se pueden dibujar figuras con formas arbitrarias utilizando los métodos drawPolygon(int x[ ].int y.int altoy.int y[ ].int largoy) void fillRect(int x.int y. Los vértices del poligono estan especificados por las parejas de coordenadas que vienen en los arreglos x y y.int y. int largoy) y para una elipse rellena se utiliza el método fillOval(int x. Dibujar círculos y elipses. int anchox. int anchox.int largoy.int y.int largoy. int angulofinal) y fillArc(int x. Tamaño de los graficos. Los arcos se pueden dibujar con drawArc(int x.int y. Para dibujar una elipse se utiliza el método drawOval(int x.int largoy) Para dibujar un rectángulo redondeado. El diámetro del arco a lo largo del eje x y eje y estan dados por xdiam.int y. . Trabajar con color.Los métodos drawRect( ) y fillRect dibujan un rectángulo sólo con el borde o relleno. int anchox.ydiam.int xdiam.int y[ ].int ydiam).int anguloinicial.int anchox. int angulofinal).int numpuntos) y fillPolygon(int x[ ]. int anchox.int anguloinicial. int green.flota blue) Para establecer el color para los gráficos.int blue) Color(int rgbValue) Color(flota red. La ventaja de modo XOR es que se garantiza que el nuevo objeto siempre sea visible. cada nueva salida que se realiza a una ventana se superpone al contenido de lo que hubiese en la anterior. es posible tener sobre la ventana nuevos objetos en modo XOR utilizando el método setXORMode( ). cualquiera que sea el color sobre el que se dibujara el objeto y para volver al modo de sobrescribir. La clase Color define varias consantes por ejemplo Color. Sin embargo. . Las formas que mas se usan son las siguientes: Color(int red. El color esta encapsulado en la clase Color. Tambien puede crear sus propios colores utilizando uno de los constructores de colores.etc) en el que se esta ejecutando el programa o el applet. Por defecto. Trabajo con los tipos de letra. Para ello se busca el color que más se ajuste al solicitado. que tiene el formato siguiente: void setXORMode(Color xorColor) donde xorColor especifica el color que se utilizara para hacer el XOR en la ventana cuando se dibuja un objeto. Determinación de los tipos de letra disponibles. Se puede cambiar este color llamando al método setColor(Color nuevocolor) y se puede obtener el color en curso llamando a Color getColor( ) Establecer el modo de pintar.flota green. los objetos graficos se dibujan en el color actual del frente. teniendo en cuenta las limitaciones del hardware de visualización (monitor.black esto para especificar un conjunto de colores comunes.El sistema de color del AWT permite especificar cualquier color. El modo de pintar determina como se dibujan los objetos en una ventana. hay que llamar a setPaintMode( ). Por defecto. DialogInput. Se puede obtener esa referencia utilizando el método estático getLocalGraphicsEnvironment( ). primero hay que construir un objeto Font que describa ese tipo de letra. . Monospaced y Symbol. Serif. Dialog es el tipo de letra que utilizan las cajas de diálogo del sistema. Para obtener esta información.int pointSize) fontName especifica el nombre del tipo de letra deseado. tambien es el tipo de letra que hay por defecto.int fontStyle. Una de las formas del constructor Font tiene el siguiente formato: Font(String fontName. El estilo del tipo de letra se especifica con fontStyle y puede estar formado por una o mas de una de estas tres constantes: Font. Ademas del método getAllFonts( ) está definido por la clase GraphicsEnvironment: Font[ ] getAllFonts( ) Este método devuelve un arreglo de objetos Font que contiene todos los tipos de letras disponibles. se necesita una referencia GraphicsEnvironment para llamarlos. Como estos métodos son miembros de GraphicsEnvironment. Se puede especificar el nombre utilizado bien el nombre lógico. Java admite los siguientes tipos de letra: Dialog. Sans Serif. que está definido por GraphicsEnvironment: static GraphicsEnvironment getLocalGraphicsEnvironment( ) Creación y selección del tipo de letra Para seleccionar un nuevo tipo de letra.PLAIN. se utiliza el método getAviableFontFamilyNames( ) definido por la clase GraphicsEnvironment: String[ ] getAviableFontFamilyNames( ) Este método devuelve un array de strings con los nombres de las familias de tipos de letra disponibles. bien el nombre face.Cuando se trabajan con tipos de letra suele ser necesario saber que tipos de letra están disponibles en la computadora. Ejemplo de manejo de primitivas de java usando AWT import java.ITALIC. Para determinar el espacio entre lineas. se puede utilizar el valor devuelto por getLeading( ) y para determinar la altura total del tipo de letra.BOLD y Font. Para utilizar un tipo de letra propio. El tamaño del tipo de letra.Font.*. Visualización de varias lineas de texto. Otra forma de determinar la altura maxima del tipo de letra es utilizando getHeight( ) y para determinar la longitud en pixeles de una cadena se obtienen con stringWidth( ).*. hay que sumar al valor devuelto por getAscent( )el valor devuelto por getDescent( ). Font.applet.BOLD | Font. que esta definido por Component. public class primitivas extends Applet{ public void init(){ setBackground(Color. Por ejemplo. } .awt.BLUE). y tiene la siguiente forma general: void setFont(Font fontObj) donde fontObj es el objeto que contiene el tipo de letra deseado. import java.WHITE). Lo que más se utiliza es FontMetrics para determinar el espacio entre líneas de texto y tambien para determinar la longitud de un string que se esta visualizando.ITALIC especifica un estilo en negrita y cursiva. Para combinar estilos se puede hacer un OR. en puntos. se utiliza el método setFont( ). Ver ejercicio y centrar texto. setForeground(Color. se especifica en pointSize. g. int cx1[]={500. . g.50.360).20. g.300}.50.10.50. g.50.200.0.50).green).100.3).drawRect(200.600.250).drawOval(20.fillOval(50.GREEN). int x=d. g. g. g.10.setColor(Color.public void paint(Graphics g){ showStatus("uso de primitivas").fillArc(400.50.170.20).50.300.200.3).600.50.drawLine(10. d=getSize(). int cx[]={500.drawRoundRect(300.width.550}.10).drawArc(400.45). g.300.50.250.10. int cy[]={200.100).drawString("Inicio de las primitivas de java".0.300.setColor(Color.drawPolygon(cx. Dimension d.50. g.180). g. int cy1[]={400.550}. g.cy1.400.100.fillRect(100.cy. g.100}.fillPolygon(cx1. g.50). 10.*. public void init(){ setFont(f).awt.*. g.100.*.10). } public void paint(Graphics g){ setForeground(Color. String xs=x+" "+y.12).BLUE). import java. . } } Ejemplo de manejo de letras de java usando AWT import java.ITALIC.awt.Font. public class letras extends Applet{ Font f=new Font("Dialog".applet.PLAIN|Font.drawString("cadenas de texto".int y=d.applet. import java.height. } } import java.drawString(xs.*. g.100). Organiza de izquierda a derecha y de arriba abajo por default. Font fuentes[].getAvailableFontFamilyNames().10.getAllFonts().i++){ msg[i]=fuentes[i]+" ". Fontlist=ge. for(int i=0. fuentes=ge.getLocalGraphicsEnvironment().j++) g. } } Gestores de Organización.length. String Fontlist[]. . } for(int j=3.j<msg. String msg[]=new String[60].j*11).i<msg.public class tipofont extends Applet{ public void paint(Graphics g){ GraphicsEnvironment ge=GraphicsEnvironment.drawString(msg[j].length. FlowLayout es el gestor de organización por defecto y utilizado en los ejemplos anteriores. LEFT.CENTER BorderLayout. FlowLayout( int how.NORTH BorderLayout.EAST BorderLayout.int vert ) .int hor. norte.FlowLayout( ) FlowLayout( int how) How puede ser FlowLayout. este.SOUTH BorderLayout. int numcolumnas ) GridLayout(int numfilas.region) GridLayout Organiza los componentes en una cuadricula de 2 dimensiones GridLayout( ) GridLayout(int numfilas. BorderLayout es la segunda forma de organización habitual por áreas. int horz.RIGHT FlowLayout.CENTER. oeste. int vert) los ultimos especifican el espacio entre elementos horizontales y verticales. sur. int numcolumnas.int vert) igual define espacios Constantes que especifican las regiones: BorderLayout.WEST La forma de aplicar las organización es add(componente. FlowLayout. centro BorderLayout( ) BorderLayout( int horiz. Another o Asqueroso. y para asegurarse que los elementos que desarrolla para generar interfaces gráficas sean fácilmente transportables entre plataformas. como lupas de pantalla. que todavía está en construcción Accesibilidad. El entorno que ofrece es demasiado simple. engloba a todos los componentes del AWT que existían en la versión 1.1. Alternative. Awkward. son clases en las que se soporta Glasgow. Java 2D.2 del JDK y en los que se han incorporado en versiones posteriores: o o o o Java 2D es un conjunto de clases gráficas bajo licencia de IBM/Taligent. Arrastrar y Soltar y Swing. AWT. La versión del AWT que Sun proporciona con el JDK se desarrolló en sólo dos meses y es la parte más débil de todo lo que representa Java como lenguaje. Javasoft.AWT AWT es el acrónimo del X Window Toolkit para Java. Se trata de una biblioteca de clases Java para el desarrollo de Interfaces de Usuario Gráficas. Accesibilidad. que están constituidas por cinco grupos de clases. en vista de la precariedad de que hace gala el AWT. no se han tenido en cuenta las ideas de entornos gráficos novedosos. donde X puede ser cualquier cosa: Abstract. que es la nueva generación de los JavaBeans Swing. Ha sido creada en conjunción con Netscape y proporciona una serie de componentes muy bien descritos y especificados de forma que su presentación visual es independiente de la plataforma en que se ejecute el applet o la . proporciona clases para facilitar el uso de ordenadores y tecnología informática a disminuidos. IBM y Lighthouse Design para crear un conjunto de clases que proporcionen una sensación visual agradable y sean más fáciles de utilizar por el programador. y cosas así Arrastrar y Soltar (Drag and Drop). Quizá la presión de tener que lanzar algo al mercado haya tenido mucho que ver en la pobreza de AWT. es la parte más importante y la que más desarrollada se encuentra. se ha unido con Netscape. aunque parece que Sun se decanta por Abstracto. seriedad por encima de todo. Esta colección de clases son las Java Foundation Classes (JFC). al menos en este momento: AWT. etc. y sus clases de soporte. Con Swing se va un paso más allá. pestañas. ni hWnds. Estructura del AWT La estructura de la versión actual del AWT se puede resumir en los puntos que se exponen a continuación: o o o o o Los Contenedores contienen Componentes. que son los controles básicos No se usan posiciones fijas de los Componentes. etc. sino que están situados a través de una disposición controlada (layouts) El común denominador de más bajo nivel se acerca al teclado. La estructura básica del AWT se basa en Componentes y Contenedores. tanto de AWT como de Swing. lo que hace posible que widgets Swing puedan contener otros componentes. Hay un conjunto de componentes de Swing que son análogos a los de AWT. ratón y manejo de eventos Alto nivel de abstracción respecto al entorno de ventanas en que se ejecute la aplicación (no hay áreas cliente. corriendo por cuenta del programador (todavía no hay herramientas de composición visual) el encaje de todas las piezas. y algunos de ellos participan de la arquitectura MVC (Modelo-Vista-Controlador). aunque Swing también proporciona otros widgets nuevos como árboles. ya que todos los JComponentes son subclases de Container.) La arquitectura de la aplicación es dependiente del entorno de ventanas. JComponents. ni llamadas a X.aplicación que utilice estas clases. Estos últimos contienen Componentes posicionados a su respecto y son Componentes a su vez. en vez de tener un tamaño fijo . lo que hace prever interesantes posibilidades. así como la seguridad de tratamiento de los eventos adecuados. A continuación se aborda la programación con el AWT fundamentalmente para tener la base suficiente y poder seguir profundizando en las demás características del lenguaje Java. de forma que los eventos pueden tratarse tanto en Contenedores como en Componentes. aunque también se presentarán ejemplos de utilización deJComponentes cuando Swing tenga implementado alguno que corresponda el del AWT o derivado de él. Swing simplemente extiende el AWT añadiendo un conjunto de componentes. además. todos los Componentes de la interface de usuario son instancias de la claseComponent o uno de sus subtipos.o o Es bastante dependiente de la máquina en que se ejecuta la aplicación (no puede asumir que un diálogo tendrá el mismo tamaño en cada máquina) Carece de un formato de recursos. losComponentes. En el AWT. listas. Tipos de Componentes En el árbol siguiente se muestra la relación que existe entre todas las clases que proporciona AWT para la creación de interfaces de usuario. En el AWT. Los Contenedores contienen y organizan la situación de los Componentes. presentando la jerarquía de Clases e Interfaces: Clases: o o o o o o Adjustable BorderLayout CardLayout CheckboxGroup Color Component o Button . Los Componentes permiten al usuario interactuar con la aplicación y proporcionar información desde el programa al usuario sobre el estado del programa. cajas de selección o campos de texto. barras de desplazamiento. etiquetas. sino agrupados dentro deContenedores. Típicos ejemplos de estos Componentes son los botones. También contienen el código necesario para el control de eventos. todos los Contenedores son instancias de la clase Container o uno de sus subtipos. cambiar la forma del cursor o modificar el icono de la aplicación. Los Componentes no se encuentran aislados. los Contenedores son en sí mismos Componentes y como tales pueden ser situados dentro de otros Contenedores. No hay ningún diseñador de interfaces (todavía) Componentes y Contenedores Una interfaz gráfica está construida en base a elementos gráficos básicos. No se puede separar el código de lo que es propiamente interface. o o o o o o o o o o o o o o o o o o o Canvas o Checkbox o Choice o Container o Panel o Applet o ScrollPane o Window o Dialog o FileDialog o Frame o Label o List o Scrollbar o TextComponent o TextArea o TextField Cursor Dimension Event FlowLayout Font FontMetrics Graphics GridLayout GridBagConstraints GridBagLayout Image Insets MediaTracker MenuComponent o MenuBar o MenuItem o CheckboxMenuItem o Menu o PopMenu MenuShorcut Point Polygon PrintJob Rectangle o . conocida como componentesLightweight. desde el JDK 1. Sin embargo. puede ser pintado en pantalla y puede recibir eventos.Componentes Component es una clase abstracta que representa todo lo que tiene una posición.o Toolkit Interfaces: o o o o LayoutManager LayoutManager2 MenuContainer Shape AWT .1 puede ser extendida para proporcionar una nueva característica incorporada a Java. ni puede ser instanciada. No tiene constructores públicos. un tamaño. Los Objetos derivados de la clase Component que se incluyen en el Abstract Window Toolkit son los que aparecen a continuación: o o o o o o o o o Button Canvas Checkbox Choice Container o Panel o Window o Dialog o Frame Label List Scrollbar TextComponent o TextArea o TextField . Componentes de entrada y salida textual como los campos de texto (TextField).RIGTH. Etiquetas. las listas (List). Label. Así habría Componentes con entrada de tipo no-textual como los botones de pulsación (Button).LEFT. Window.CENTER Los métodos para manipular las etiquetas son: void setText( String arg) poner la nueva cadena a la etiqueta . zonas de dibujo (Canvas) e incluso los Contenedores (Panel.Sobre estos Componentes se podrían hacer más agrupaciones y quizá la más significativa fuese la que diferencie a los Componentes según el tipo de entrada. Componentes de AWT. Dialog y Frame). que también pueden considerarse como Componentes. en donde se encontrarían Componentes como las barras de desplazamiento (Scrollbar). El primer constructor crea una etiqueta vacia. Label(String str. El control mas sencillo de utilizar es una etiqueta es un objeto de la clase Label. Label. botones de marcación (Checkbox). Las etiquetas son controles pasivos que no admiten ninguna interacción con el usuario. otros Componentes sin acomodo fijo en ningún lado. por default esta justificada a la izquierda y la tercera crea una etiqueta con el string de la forma indicada por how y estos pueden se de tres formas: Label. Label define los siguientes constructores: Label( ) Label(String str). botones de selección (Choice) y botones de comprobación (CheckboxGroup). las áreas de texto (TextArea) y las etiquetas (Label).int how). y contiene un string que se muestra en pantalla. La segunda versión crea una etiqueta con la cadena especificada en la cadena. y. los botones son objetos de la clase Button y este proporciona dos constructores: Button( ) Button(String Str) El primero constructor crea un boton vacio y el segundo crea un botón con la etiqueta especificada en la cadena. Esta formado por un pequeño cuadro que puede contener o no una marca de comprobación.String getText( ) obtener el contenido de la etiqueta Los alineamientos se pueden especificar mediante dos métodos: void setAlignment(int how) int getAlignment( ) Botones El control que mas se utiliza son los botones. Hay una etiqueta asociada a cada checkbox que describe que opción representa. (Interfaz ActionListener y metodo actionPerformed) Checkbox Los checkbox son objetos de la clase Checkbox. Se puede asignar la etiqueta y obtener la etiqueta utilizando los métodos: void setLabel(String str) String getLabel( ) Evento generado es un ActionEvent. Un botón es un componente que contiene una etiqueta y que genera un evento cuando es pulsado. Un checkbox es un objeo que se utiliza para activar o desactivar una opción. Para cambiar el estado de un checkbox sólo hay . Los méodos utilizados para el manejo de los checkbox son: boolean getState( ) (seleccionado o no) void setState(boolean on) (seleccionado o no) String getLabel( ) checkbox void setLabel(String str) devuelve el estado del checkbox establece el estado del checkbox devuelve la etiqueta asignada al establece la etiqueta al checkbox Evento generado es itemStateChanged) CheckboxGroup ItemEvent. CheckboxGroup cbgroup. boolean on) Checkbox(String str.que pulsar sobre el.CheckboxGroup cbgroup) Checkbox(String str. Los checkbox se pueden utilizar individualmente o como parte de un grupo y los constructores son los siguientes: Checkbox( ) Checkbox(String str) Checkbox(String str. El cuarto y quinto formato crea un checkbox cuya etiqueta esta especificada en str y si no pertenece a ningun checkboxgroup entonces debe de estar a null y on especifica si esta seleccionado o no. El segundo formato crea un checkbox cuya etiqueta esta especificada en str e igualmente no esta seleccionada. El tercer formato crea un checkbox cuya etiqueta esta especificada en str y puede estar seleccionado si on es true y si esta en false no esta seleccionado. boolean on) El primer formato crea un checkbox cuya etiqueta es vacia y el estado está no seleccionado. (Interfaz ItemListener y método . boolean on. Cuando el usuario hace clic en él. hay que llamar addItem o add que contienen los siguientes formatos: void addItem (String name). un control choice es una forma de menú. A estos checkbox se les suele llamar botones de radio(radio buttons). Por tanto. Cada elemento de la lista es un string que aparece justificado a la izquierda en el orden en que se añadió al objeto Choice y solo esta definido un constructor que crea una lista vacia. Para crear un conjunto de grupos de checkbox mutuamente excluyentes. que crea un grupo vacío. Los métodos definidos para manejar los ChecboxGroup son: Checkbox getSelectedCheckbox( ) devuelve el checkbox actualmente seleccionado void setSelectedCheckbox(Checkbox cual) para establecer el checkbox seleccionado Evento generado es itemStateChanged) ItemEvent. aparece la lista completa de opciones.Se puede crear un conjunto de checkbox que sean mutuamente excluyente en el que solo se pueda elegir a la vez uno solo y solo uno de los checkbox del grupo. primero hay que definir el grupo al que pertenecen y después especificar ese grupo cuando se crean los checkbox. un componente Choice solo ocupa el espacio necesario para mostrar el elemento que esta seleccionado. Los grupos de checkbox son objetos de la clase CheckboxGroup y solo se definen un constructor por defecto. Cuando está inactivo. (Interfaz ItemListener y método Controles Choice La clase Choice se utiliza para crear un lista pop-up de elementos para que el usuario pueda elegir uno de ellos. y se puede realizar una nueva selección. . ya que funcionan como los controles de radio para abrir un coche donde solo abre un carro en especifico. Para añadir un elemento a la lista. void add(String name). se puede construir un objeto List que muestre cualquier número de opciones en una ventana. el valor de numRows especifica el número de entradas que en la lista estaran . A diferencia de Choice. (Interfaz ItemListener y método Listas La clase List proporciona una lista de selección compacta. con desplazamiento. que solo muestra el único elemento que se puede seleccionar en el menú. void select(int index) String getItem(int index) para obtener el nombre de un elemento de una posición.Para determinar el elemento seleccionado se puede llamar a los siguientes métodos: String getSelectedItem( ) int getSelectedIndex( ) int getSelectedCount( ) devuelve el número de elementos en la lista void select(String name) para indicar el elemento que debe estar seleccionado. List tiene estos constructores: List( ) List(int numRows) List(int numRows. Evento generado es itemStateChanged) ItemEvent.boolean multipleselect) La primera versión crea un control List que permite que haya sólo un elemento seleccionado al instante. que permite realizar selecciones multiples. Tambien se puede configurar de manera que se puedan realizar selecciones multiples. En el segundo formato. visibles (las demas se pueden ver cuando sea necesario desplazandose por la ventana). que tiene estos dos formatos: void add(String name) lista void add(String name.int index) especificada Añade los elementos al final de la Añade los elementos en la posición Las listas empiezan a partir de la posición cero y se puede especificar -1 para que se anexe al final de la lista. Para añadir elementos a la lista. void select(int index) String getItem(int index) para obtener el nombre de un elemento de una posición. Si es false. el usuario puede seleccionar dos o mas elementos a la vez. solo se puede seleccionar un elemento. si multipleselect es true. . En el tercer formato. Para determinar el elemento seleccionado se puede llamar a los siguientes métodos solo cuando se puede seleccionar un unico elemento: String getSelectedItem( ) int getSelectedIndex( ) Para determinar el elemento seleccionado se puede llamar a los siguientes métodos solo cuando se pueden seleccionar varios elementos: String [ ] getSelectedItems( ) int [ ] getSelectedIndexes( ) int getSelectedCount( ) devuelve el número de elementos en la lista void select(String name) para indicar el elemento que debe estar seleccionado. hay que llamar al método add( ). Evento generado es ItemEvent. Las barras de desplazamiento se utilizan para seleccionar valores continuos entre minimo y un maximo especificado.Evento generado es un ActionEvent.VERTICAL. int initialvalue. int min. Una barra de desplazamiento tiene varios elementos. (Interfaz ActionListener y metodo actionPerformed) solo cuando se le hace clic en un elemento de la lista.int tamaño. Las barras de desplazamiento pueden ser horizontales y verticales. El primer formato crea una barra de desplazamiento vertical. (Interfaz ItemListener y método itemStateChanged) cuando se selecciona o deselecciona un elemento. int min. La clase Scrollbar encapsula las barras de desplazamiento y define los siguientes constructores: Scrollbar( ) Scrollbar(int style) Scrollbar(int style.HORIZONTAL) int initialvalue valor inicial de la barra int tamaño int min int max tamaño de la barra valor minimo valor maximo Para establecer los valores en caso de haber utilizado el primer constructor se usa: void setValues(int initialvalue. los siguientes formatos permiten especificar la orientación del la barra (Scrollbar. Barras de desplazamiento. Para obtener y poner el valor a la barra se usa: int getValue( ) .int max). Scrollbar.int max).int tamaño. Evento generado es AdjustmentEvent. int numchars) int numchars especifica la anchura en caracteres String str inicializa el campo por el texto especificado Para obtener el texto del campo especificado se usa String getText( ) Para establecer el texto al campo se usa void setText(String texto) . por defecto el incremento de pagina es de 10 y se pueden cambiar llamando a void setBlockIncrement(int nuevo incremento).void setValue(int valor) para obtener los valores minimos y maximo: int getMinimum( ) int getMaximum( ) Por defecto el incremento de la flecha es de 1 pero se puede cambiar mediante void setUnitIncrement(int nuevo incremento). La clase TextField es una subclase de TextComponent y TextField proporciona los siguientes constructores: TextField( ) TextField(int numchars ) TextField(String Str) TextField(String Str. Los campos de texto permiten al usuario introducir strings y editar texto utilizando los cursores. las teclas de cortar y pegar y las selecciones que se hacen con el raton. (Interfaz AdjustmentListener y método getAdjustmentType para determinar el tipo de ajuste. TextField La clase TextField implementa un área de entrada de texto de una sola línea que se llama control de edición. int final) Se puede poner editables y verificar si es editable o no con: void setEditable(boolean valor) boolean isEditable( ) Si no se desea ver el caracter que se esta presionando por ejemplo pasword se usa void setEchoChar(char ch) y con boolean echoCharIsSet se puede verificar si el campo esta en el modo anterior y para ver que carácter se va a ver su usa char getEchoChar( ).int numcaracteres ) TextArea(String Str) TextArea(String str.int numlineas. TextArea Algunas veces no basta con una entrada de una sola linea para realizar ciertas tareas y para manejar esto AWT incluye un sencillo editor multilíneas llamado TextArea y los constructores son los siguientes: TextArea( ) TextArea(int numlineas.int numcaracteres) TextArea(String str.Se puede seleccionar parte del texto utilizando los siguientes métodos: String getSelectedText( ) void select(int inicio.int numcarcateres.int numlineas.int sBars) Numlineas especifica la altura en lineas del área de texto y numcaracteres especifica la anchura en caracteres y el texto inicial se especifica con str y sBars especifica las barras de desplazamiento que va a tener y los valores son los siguientes: SCROLLBARS_BOTH SCROLLBARS_HORIZONTAL_ONLY . Menu y MenuItem. Tambien se pueden incluir elementos de menú que se puedan verificar(o seleccionar). void setText(String texto).int index) void replaceRange(String str. Cada opción esta asociada a un menú desplegable. que son opciones de menú de la clase CheckboxMenuItem y aparece una marca al lado de ellos cuando se seleccionan. Barra de menú y menús Una ventana de nivel superior puede tener asociada una barra de menú. MenuItem representa algo que el usuario quiere seleccionar. insert pone el texto especificado en la posicion indicada y para remplazar texto se usa replaceRange. Debido a que Menu es una subclase de MenuItem. se puede crear una jerarquía de submenus anidados. . Cada Menu tiene una lista de objetos MenuItem.int endindex) append añade el texto al fina del texto actual. void setEditable(boolean valor). String getSelectedText( ). void select(int inicio.SCROLLBARS_NONE SCROLLBARS_VERTICAL_ONLY Textarea es una subclase de TextComponent por lo que soporta los mismo metodos que TextField (String getText( ).int final). En general una barra de menú tiene uno o más objetos Menú. boolean isEditable( )) y además agrega los siguientes métodos: void append(String str) void insert(String str.int startIndex. Estas opciones se implementan con MenuBar. que muestre una lista de opciones de menú de nivel superior. El primer constructor crea un menú vacio. el menú pop_up puede flotar libremente. se crean instancias de Menú que definan las selecciones que se muestran en la barra. primero hay que crear una instancia de MenuBar. esta deshabilitado. se utiliza el método: boolean isEnabled( ) Para cambiar el nombre de un elemento del menú se llama a setLabel( ) y para obtener el nombre se llama a getLabel: void setLabel(String nuevoNombre) . que tiene el siguiente formato: void setEnabled(boolean enabledFlag) Si enabledFlag es true el elemento del menu esta habilitado. Esta clase sólo define el constructor por defecto. Esta clase define los siguientes constructores: MenuItem( ) MenuItem(String ItemName) MenuItem(String ItemName. MenuShortcut KeyAccel) ItemName es el nombre que se muestra en el menú y KeyAccel es la tecla aceleradora para ese elemento. Se puede habilitar e deshabilitar un elemento del menú uilizando el método setEnabled( ). Los elementos individuales del menú son de la clase MenuItem. Después. en caso contrario. boolean removable) La optionName especifica el nombre de la selección de menú. En caso contrario permanecera siempre a la barra de menú. Los constructores de Menu son las siguientes: Menu( ) Menu(String optionName) Menu(String optionName. Para determinar si un elemento esta habilitado o no. Si removable es true.Para crear una barra de menú. Se puede checar el estado de una opción utilizando boolean getState( ) y se puede activar utilizando void setState(boolean chk) Ya que se crearon todos los elementos primero se agrega en menubar utilizando el método setMenuBar(MenuBar mbar) Una vez que se ha creado cada uno de los elementos del menú hay que añadirlos a un objeto de Menú utilizando add y tiene el formato de la siguiente forma: MenuItem add(MenuItem item) Ya que se añadieron todos los elementos a un objeto de tipo menú se añaden al objeto MenuBar.String getLabel( ) Se puede crear un elemento de menú que se pueda chequear utilizando una subclase de MenuItem llamado CheckboxMenuItem y que tiene los siguientes constructores: CheckboxMenuItem( ) CheckboxMenuItem(String itemName) CheckboxMenuItem(String itemName. si on esta en true indica que la opción este marcada como selececionada.boolean on) itemName es el nombre que se muestra en el menu. Menu add(Menu menú) Cada vez que se selecciona un elemento de menú se genera un evento de tipo ActionEvent y los Checkcox generan eventos ItemEvent El método getItem( ) de ItemEvent devuelve la referencia al elemento que ha generado ese evento. Object getItem( ) FileDialog . en caso contrario no. FileDialog. FileDialog tiene dos métodos que permite determinar el nombre y la ruta del archivo y son: String getDirectory( ) String getFile( ) Se muestra utilizando setVisible(true). FileDialog(Frame parent. Dialog Se pueden crear cuadros de dialogo que permiten agrupar un conjunto de controles relacionados. boolean mode) Dialog(Frame parentWindow. boxename es el nombre que aparece en el titulo del cuadro de dialodo y how puede ser FileDialog. String boxename. mode si es true es modal en caso contrario no modal. . Donde parent es el propietario del cuadro de dialogo de archivo. FileDialog(Frame parent). Para crear un cuadro de dialogo de archivo solo hay que crear un objeto de la clase FileDialog y tiene los siguientes constructores: FileDialog(Frame parent. String title. Los cuadros de dialogo se utilizan principalmente para obtener entradas del usuario. boolean mode) parentWindow es el propietario del cuadro de dialogo.SAVE(El archivo se selecciona para escritura).Se puede utilizar un cuadro de dialogo para que el usuario pueda seleccionar un achivo. dispose( ) esta definido por la clase Window y libera todos los recursos asociados a la ventana del cuadro de dialogo. title es el titulo del cuadro de dialogo.int how). String boxename). Los cuadros de dialogo pueden ser modal(toda la atención se dirige al cuadro hasta que se cierra) o no modal(se puede hacer otra cosa y después interactuar con el dialogo) y los constructores son: Dialog(Frame parentWindow.LOAD(El archivo se selecciona para lectura).