Swing

April 10, 2023 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Swing...

Description

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁃󰁯󰁮󰁴󰁥󰁮󰁩󰁤󰁯

PROGRAMACIÓN GRÁFICA CON SWING........................................ ............................................................................... ....................................... 3  CARACTERISTICAS DE SWING ................................................................................................ 4  JERARQUÍA DE COMPONENTES DEL SWING ....................................................................... 5   COMPONENTES........................................ ..................................................................................... .................................................................................... ....................................... 9  EVENTOS ....................................................................................................................................... 9  ¿Qué es un evento? .................................................................................................................... 10  El modelo de delegación de eventos.......................................................................................... 10   Tipos de Eventos ....................................................................................................................... 14  Origen de eventos ...................................................................................................................... 16  Adapters ..................................................................................................................................... 19  COMPONENTES ATÓMICOS DEL SWING S WING ........................................ ............................................................................. ..................................... 24   JButton ....................................................................................................................................... 24  JCheckBox ................................................................................................................................. 24  JRadioButton ............................................................................................................................. 26  JList ........................................................................................................................................... 29  JComboBox ............................................................................................................................... 31  JLabel ........................................................................................................................................ 32  JTextField y JPasswordField ..................................................................................................... 33  JTextArea................................................................................................................................... 36  CUADROS DE DIALOGO ESTÁNDAR .................................................................................... 38   JOptionPane ............................................................................................................................... 38  JFileChooser .............................................................................................................................. 43  JColorChooser ........................................................................................................................... 45  LAYOUTS .................................................................................................................................... 47  FlowLayout ................................................................................................................................ 48  BorderLayout ............................................................................................................................. 49  GridLayout ................................................................................................................................ 51  CONTENEDORES DE ALTO NIVEL ........................................................................................ 54  JDialog ....................................................................................................................................... 55  CONTENEDORES DE NIVEL INTERMEDIO .......................................................................... 56   JScrollPane ................................................................................................................................ 56  JPanel ......................................................................................................................................... 59 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 JtabbedPane ............................................................................................................................... 61  JSplitPane .................................................................................................................................. 63  JToolBar .................................................................................................................................... 65  MENUS ......................................................................................................................................... 67  JMenuBar .................................................................................................................................. 67  JMenu ........................................................................................................................................ 67  JMenuItem ................................................................................................................................. 68  OTRAS CLASES BÁSICAS ........................................................................................................ 74  Evento con Teclado ................................................................................................................... 74   CLASE Color ............................................................................................................................ 78  CLASE Font .............................................................................................................................. 80  CLASE MouseAdapter .............................................................................................................. 81  CLASE ImageIcon .................................................................................................................... 83  CLASE Graphics ....................................................................................................................... 85  "Look & Feel" 

 

CONFIGURANDO EL  DE UNA APLICACIÓN ........................................... 92 APPLETS ...................................................................................................................................... 98  Ciclo de vida de un applet ......................................................................................................... 98   El tag Applet en HTML HT ML .......................................... ....................................................................................... ................................................................. .................... 104   Paso de parámetros a un applet desde HTML ......................................................................... 111   Ejemplos con el método m étodo getParameter() ............................................... .................................................................................. ................................... 112  

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

PROGRAMACIÓN GRÁFICA CON SWING El objetivo de este tema es enseñar a diseñar pequeñas interfaces gráficas empleando para ello las librerías gráficas Swing. Una interfaz es lo que le permite a un usuario comunicarse con un programa, una interfaz es lo que nosotros vemos al arrancar, por ejemplo, navegador de internet: de menús, botones,a barras.... queweb, nos permiten un activar un código que es un el conjunto que realmente nos llevará una página salvará la imagen en el disco duro.... Las librerías gráficas que usaremos vienen a sustituir a las antiguas AWT. Las nuevas librerías a parte de tener una mayor cantidad de opciones sobre los componentes (como distintas apariencias, control sobre el focus, mayor número de campos que modifican su aspecto, mayor facilidad para pintar al hacer el buffering transparente al usuario....) se diferencian de las anteriores radicalmente en su implementación.

Ojo: En AWT cuando añadíamos un botón, por ejemplo, a nuestro diseño el compilador generaba código que le pedía al sistema operativo la creación de un botón en un determinado sitio con unas determinadas propiedades; en Swing ya no se pide al sistema operativo nada: se dibuja el botón sobre la ventana en la que lo queríamos. Con esto se eliminaron muchos problemas que existían antes con los códigos de las interfaces gráficas, que debido a depender del sistema operativo para obtener sus componentes gráficos, era necesario probar los programas en distintos sistemas operativos, pudiendo tener distintos bugs en cada uno de ellos. Esto evidentemente iba en contra de la filosofía de Java, supuestamente un lenguaje que no dependía de la plataforma. Con Swing se mejoró bastante este aspecto: lo único que se pide al sistema operativo es una ventana, una vez que tenemos la ventana dibujamos botones, listas, scroll-bars... y todo lo que necesitemos sobre ella. Evidentemente esta aproximación gana mucho en lo que a independencia de la plataforma se refiere. Además el hecho de que el botón no sea un botón del sistema operativo. sino un botón pintado por Java nos da un mayor control sobre su apariencia. Una estrategia para estudiar SWING es dividirlas en:  

Componentes.

   

Contenedores. Layouts (Administ (Administradores radores de diseño).   Eventos.

Componentes. Son clases o interfaces que permiten crear los objetos gráficos que componen una GUI (Graphics User Interface) tales como; botones, listas desplegables, cuadros de texto, casillas de verificación, botones de opción, campos de texto, etiquetas, menús, etc.

Contenedores. Son clases o interf interfaces aces que permi permiten ten crear obj objetos etos gráficos para contener a los componentes, tales como; paneles, cuadros de diálogo, marcos, ventanas, etc.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 Layouts. Son clases o interfaces que permiten crear objetos que administren el diseño, la distribución y colocación de los objetos componentes dentro de los objetos contenedores. Por ejemplo el FlowLayout  distribuye los componentes de izquierda a derecha y de arriba a abajo, el BorderLayout los distribuye en cinco áreas geográficas; norte, sur, este, oeste y centro, etc.

Eventos. Son las cl clases ases o interf interfaces aces que permi permiten ten crear obj objetos etos que captur capturen en y manejen los eventos. Un evento  es una acción sobre algún componente, componente, por ejemplo, clic a un botón, pulsar la tecla de enter en un botón, mover un elemento con las teclas de navegación, eventos ev entos especiales como los progr programados amados por ttiempo, iempo, etc. Sin los eventos las GUI serían interfaces gráficas sin vida, y por lo tanto no serían muy útiles que digamos.

CARACTERISTICAS CARACTERISTICA S DE SWING  

Se creo como una extensión de la AWT añadiendo las siguientes características:   Componentes Swing.   Soporte de Look& Feel. accesibilidad. dad.   API de accesibili   Java 2D API.   Soporte de Drag& Drop.

           

Habitualmente también se usa como término genérico para referirse a las JFC (Java Foundation Classes). Su diferencia más importante con la AWT es que los componentes son “lightweight”. Para diferenciar los componentes Swing de los AWT, sus nombres están precedidos por una ‘J’. Todas las clases Swing se encuentran en el paquete javax.swing.* Nunca debemos mezclar componentes Swing con componentes AWT en una misma aplicación: “Lightweight” vs. “Heavyweight”. Swing sigue trabajando con los conceptos de la AWT:   Contenedores.   Componentes.   LayoutManagers.   Eventos.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

JERARQUÍA DE COMPONENTES DEL SWING

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

COMPONENTES Como habíamos mencionado al principio de este capítulo, los componentes son clases o interfaces que permiten crear los objetos gráficos que componen una GUI. La tabla siguiente nos introduce brevemente a la amplia gama de los componentes deL SWING.

Tipo de Componente 

Descripción 

JButton Es un botón usado para recibir el clic del ratón. JCanvas Un lienzo o panel usado para dibujar. JCheckbox Cuadro de verificación. Es un componente que le permite seleccionar un elemento. JCheckboxMenuItem Es un cuadro de verificación dentro de un menú. JChoice Es una lista desplegable de elementos estáticos. JComponent JContainer JDialog JFrame JLabel JList JMenu JMenuItem JPanel JScroollbar JScroolPane JTextArea

Se trata de una clase abstracta que implementa toda la funcionalidad básica de las clases visuales. Es el padre de todos los contenedores. Es un cuadro de diálogo o una ventana de alto nivel con titulo y bordes. Es un marco o ventana y es la clase base de todas las ventanas ventanas GUI con controles para ventana. Etiqueta. Es una cadena de texto como componente. Un componente que contiene un conjunto dinámico de elementos. Es un elemento dentro de la barra de menú, el cual contiene un conjunto de elementos de tipo menú. Un elemento dentro de un menú. Una clase contenedora básica usado frecuentemente para crear diseños (layouts) complejos. Un componente que permite al usuario hacer una selección dentro de un rango de valores. Una clase contenedora que implementa un deslizador horizontal y vertical para un único componente hijo. Un componente que permite al usuario introducir texto en un bloque o rectángulo.

Tabla. Componentes básicos de SWING. SWING.

EVENTOS El sistema de gestión de eventos de Java 1.2 es el mismo que Java 1.1 y por lo tanto el mismo que para las librerías AWT. Aunque los desarrolladores de Java considerasen que para mejorar el lenguaje se necesitaba dejar a un lado las librerías AWT e introducir las Swing no sintieron lo mismo del sistema de gestión de eventos, consideraron que era lo suficientemente bueno. Realmente este sistema de gestión de eventos es bastante elegante y sencillo, sobre todo si se compara con el sistema de gestión de eventos de Java 1.0, mucho más engorroso de usar y menos elegante.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩 󰁧

¿Qué ¿Q ué es un even evento to Un evento  es una acción sobre algún componente. Todos los sistemas operativos tendie diend ndo o a llos os e eve vento ntos s ge gene nerad rados os por los usuarios. Estos están constantemente ten eventos p pu ueden s se er p pu ul ar una tecla, mover el ratón, hacer clic con el ratón, pulsar el (Jav (Java a disti distingu ngue e ent entre re simp simplemen lementt pulsar el ratón en un ratón sobre un botón o menú si siti tio oc cua ualq lqui uier era aoh hac acer erll , por ejemplo, en un botón). El sistemaeoperativo notifica a las curriend endo o esto estos s even eventos, tos, y e ellas llas d decid ecide e si han de responder o aplicaciones que están curri no de a algú lgún nm mod odo oae est st evento.

El modelo de deleg ción de eventos El modelo de Java se asa en la delegación de eventos : el evento se produce en un dete de term rmin ina ado co comp mpon onen ente, por ejemplo un botón. Dónde se produce el evento se denomina “fuente del e ento”. A continuación ión e ell e ev vento se ttrransmite a un ”manejador de eventos” (event liste er) que este asignado al componente n el que se produjo el evento. El objeto que escucha cucha los event eventos os e es s el q que ue s se e en enca carga rgará de responder a ellos adecuadamente. Esta separación de código entre generación el evento y actuación resp spe ecto cto a él ffa acili lita ta la labor d de el p prrograma mad dor y da una ma may yor c cla laridad a los códigos.

󰁍󰀮󰁃󰀮 󰁍󰀮󰁃󰀮 󰁅󰁭 󰁅󰁭󰁭󰁡 󰁭󰁡󰁮󰁵 󰁮󰁵󰁥󰁬 󰁥󰁬 󰁚󰁥 󰁚󰁥󰁮󰃩 󰁮󰃩󰁮 󰁮 󰁒󰁩 󰁒󰁩 󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱󰀰

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

Figura. Gestión de eventos en Java.

Explicación de la Figura: A la fuente del evento, en este caso un botón, le indicamos quién será su manejador de eventos (es el método que atenderá el evento), manejador que ha de extender la clase Adapter correspondiente o implementar la interfaz Listener  (interfaz ActionLitener en este caso). Cuando el usuario genere el evento deseado (en este caso pulse el botón), el objeto fuente empaqueta información a cerca del evento generando un objeto de tipo Event (ActionEvent  en este caso) e invoca el método correspondiente del manejador (actionPerformed(actionEvent)) pasándole como información objeto de altipo Eventpor generado. Es responsabilidad del manejador, no de la fuente,elresponder evento, ello se dice que la fuente delega la gestióny del evento en el manejador. Lo que la fuente de eventos le pasa al objeto encargado de escuchar los eventos es, como no, otro objeto. Es un objeto tipo Event. En este objeto va toda la información necesaria para la correcta gestión del evento por parte del objeto que escucha los eventos. El objeto que escucha los eventos ha de implementar para ello una

interface. El nombre de esta interface es siempre el nombre del evento más “Listener”. Para que un objeto escuche eventos de ratón ha de implementar la interface MouseListener, para que escuche eventos de teclado KeyListener.....

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱󰀱

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.FlowLayout; import java.awt.e java.awt.event.*; vent.*; import javax.swing.JButton; import javax.swing.JFrame;  { public public class  static JButtonTest1  void main(String[] args) { JFrame f=new JFrame(); f.setTitle("JButtonTest"); f.setTitle("JButtonTest" );  //(Largo,Alto)dimensió lto)dimensión n de la ventana ventana del frame frame   f.setSize(300,150); //(Largo,A f.setSize(300,150);  //Coloca los componentes componentes de forma consecutiva consecutiva   f.getContentPane().setLayout( new FlowLayout());  /*Manejador jador de Eventos Eventos para todos los botones Utiliza Clase Clase Anónima*/  /*Mane ActionListener actionListener = new ActionListener() { //Agrega { //Agregamos mos un oyente oyente al botón botón  public void actionPerformed(ActionEvent ev) {  //Tratamiento //Tratamiento del evento evento   out .println("Etiqueta .println("Etiqueta del botón: "" +  + ev.getActionCommand()); System.out  System. } }; JButton b1= new JButton(  JButton("Aceptar" "Aceptar"); ); //Crea  //Crea un Botón con con la Etiqueta Etiqueta Aceptar Aceptar   //se dispa dispara ra el evento evento   b1.addActionListener(actionListener); //se b1.addActionListener(actionListener); al Contenedor Contenedor   f.getContentPane().add(b1);  //Agrega //Agrega el botón al JButton b2= new JButton(  JButton("Cancelar" "Cancelar"); ); //Crea  //Crea un Botón con la Etiqueta Cancelar Cancelar    //se dispa dispara ra el evento evento   b2.addActionListener(actionListener); //se b2.addActionListener(actionListener); f.getContentPane().add(b2);  //Agrega //Agrega el botón al al Contenedor Contenedor    JButton("Reintentar" "Reintentar"); );  //Crea //Crea un Botón con con la Etiqueta Etiqueta Reintentar Reintentar   JButton b3= new JButton(  //se dispa dispara ra el evento evento   b3.addActionListener(actionListener); //se b3.addActionListener(actionListener); f.getContentPane().add(b3);  //Agrega //Agrega el botón al al Contenedor Contenedor    // jdk1.3+=> Cerrar una ventana  ventana   f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ));; //

f.setVisible( true); } //end  //end main() main()   }  ///:~  ///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱󰀲

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.FlowLayout; import java.awt.event.*; import javax.swing.JButton; import javax.swing.JFrame; public class JButtonTest2 { public static void main(String[] args) { JFrame f=new JFrame(); "JButtonTest"); ); f.setTitle("JButtonTest" f.setTitle( f.setSize(200,150);  //(Largo,Alto)dimensión de la ventana del frame f.setSize(200,150); //(Largo,Alto)dimensión frame    FlowLayout()); //Coloca  //Coloca los componentes de forma consecutiva  consecutiva  f.getContentPane().setLayout( new FlowLayout());  /*Manejador de Eventos en cada uno de los botones  botones  *Utiliza Clase Anónima*/   JButton b1= new JButton(  JButton("Aceptar" "Aceptar"); );  //Crea //Crea un Botón con la Etiqueta Aceptar  Aceptar    //Agregamos un oyente al botón  botón   b1.addActionListener(new ActionListener() { //Agregamos public void actionPerformed(ActionEvent ev) { //Tratamiento  //Tratamiento del evento  evento   out .println("Etiqueta .println("Etiqueta del botón: " + " + ev.getActionCommand()); System.out  System. } }); Contenedor ontenedor   f.getContentPane().add(b1);  //Agrega //Agrega el botón al C JButton b2= new JButton(  JButton("Cancelar" "Cancelar"); );  //Crea //Crea un Botón con la Etiqueta Cancelar  Cancelar   //Agregamos un oyente al botón  botón b2.addActionListener( new ActionListener() { //Agregamos public void actionPerformed(ActionEvent ev) { //Tratamiento  //Tratamiento del evento  evento     System.out  System. out .println("Etiqueta .println("Etiqueta del botón: " + " + ev.getActionCommand()); } }); f.getContentPane().add(b2);  //Agrega //Agrega el botón al C Contenedor ontenedor   f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ));;  // f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE  // jdk1.3+=> Cerrar una ventana ventana   f.setVisible(true); } }  ///:~ ///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱󰀳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

Tipos de Eventos Físicos:

ComponentEvent

Esconder, mover, redimensionar, mostrar un componente.

ContainerEvent

Añadir o eliminar un componente de un container.

FocusEvent

Obtener o perder el focus.

KeyEvent

Pulsar, soltar una tecla.

MouseEvent

Pulsar o soltar un botón del ratón; entrar o salir de un componente; mover o arrastrar el ratón (tener en cuenta que este evento tiene dos Listener). MouseListener y MouseMotionListener.

MouseMotionEvent Arrastrar o mover el mouse. WindowEvent

Maximizar, minimizar, abrir, cerrar, activar o desactivar una ventana.

Semánticos:

ActionEvent

Clic en el botón.

AdjustmentEvent

Cambiar el valor de un componente.

ItemEvent

Seleccionar o deseleccionar un Item.

TextEvent

Un texto ha cambiado.

Nuevos tipos de eventos AncestorEvent CaretEvent ChangeEvent DocumentEvent HyperlinkEvent InternalFrameEvent ListDataEvent

Un padre se ha añadido, movido o eliminado. El cursor en un texto ha cambiado. El estado ha cambiado. Los atributos de un Document han cambiado, se ha insertado o se ha eliminado contenido. Se ha activado, entrado o salido de un hyperlink. Se ha activado, cerrado, desactivado, minimizado, maximizado o abierto un internal frame. Ha cambiado el contenido.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱󰀴

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

Nuevos tipos de eventos ListSelectionEvent MenuDragMouseEvent

Ha cambiado la selección en una lista. El ratón se ha arrastrado, entrado, salido, soltado en un menú. Se ha seleccionado o deseleccionado un menú. MenuEvent MenuKeyEvent Se ha pulsado, soltado o tecleado sobre un menú. PopupMenuEvent Se ha mostrado, ocultado o seleccionado un menú emergente. TableColumnModelEvent Se ha añadido, eliminado, movido, redimensionada o seleccionada una columna. TableModelEvent El modelo de la tabla ha cambiado.

Nuevos tipos de eventos TreeExpansionEvent Se ha abierto o cerrado el árbol. TreeModelEvent TreeSelectionEvent UndoableEditEvent

Se ha cambiado, añadido o eliminado un elemento del árbol. Ha cambiado la selección en el árbol. Se ha realizado una operación que no se puede deshacer.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱󰀵

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

Origen de eventos Evento Listener interface Método que escucha el evento

Componente Swing  Swing 

ActionEvent ActionListener addActionListen er() AbstractButton

AdjustmenEvent AdjustmenListener addAdjustmenListe ner()

ComponentEvent ComponentListener addComponentListe ner()

ContainerEvent ContainerListener addContainerListen er()

FocusEvent FocusListener addFocusListen er()

ItemEvent ItemListener addItemListen er()

x

KeyEvent KeyListener addKeyListen er()

MouseEvent MouseListener addMouseListen er()

MouseMotionEvent MouseMotionListener addMouseMotionListe ner()

xx x x

xx x x

xx x x

x x x x

x x x x

x x x x

TextEvent TextListener addTextListen er()

WindowEvent WindowListener addWindowListen er()

x

JApplet JButton

xx x x

x

JCanvas JCheckBox JCheckBoxMenuI tem JChoice

x

JComboBox

x

x x x x

JComponent JContainer DefaultButtonMod el JDialog

x

JFileChooser

x

JFrame JLabel JList

x x x

JPanel JPopupMenu

xx x x

x x x x

x x

x x x

JFileDialog

JMenu JMenuItem

x

x

x

x

x

x

x

x

x

x x x x

x x

x x x x

x x x x

x x x x

x x x x

x x

x x

x

x

x

x

x

x

x x x x x

x x x x x

x x x x x

x x x x x

x x x

x

x

x

JScrollBar

x

x x x x x

JScrollPane JTextArea JTextField

x

Window

x x

Tabla. Listeners de los componentes básicos de Swing.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱󰀶

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 Componente Swing   Swing

AncestorEvent

CaretEvent

CellEditorEvent

ChangeEvent

ColumnModelEvent

DocumentEvent

AncestorListener addAncestorListener()

CaretListener addCaretListener()

CellEditorListener addCellEditorListener()

ChangeListener addChangeListener()

ColumnModelListener addColumnModelListener()

DocumentListener addDocumentListener()

AbstractBut ton AbstractButton AbstractDocument DefaultBoundedRangeModel DefaultButtonModel DefaultCaret DefaultCellEditor DefaultColorSelectionModel DefaultSingleSelectionModel DefaulStyledDocument DefaultTableColumnModel DefaultTreeCellEditor JComponent MenuSelectionManager JProgressBar JTabbedPane JTextComponent JSlider

x

x

x x x x x x x x x x x x x x x

JViewport StyleContext StyleContext.NamedStyle

xx x

Tabla. Listeners de los componentes avanzados de Swing. Componente Swing AbstractListModel DefaultListSelectionModel JEditorPane JInternalFrame JMenuItem JList

HyperlinkEvent HyperlinkListener addHyperlinkListener()

InternalFrameEvent InternalFrameListener addInternalFrameListener()

ListDataEvent ListDataListener addListDataListener()

ListSelectionEvent ListSelectionListener addListSelectionListener()

MenuDragMouseEvent MenuDragMouseListener add MenuDragMouseListener()

MenuKeyEvent MenuKeyListener addMenuKeyListener()

x x x x x

x

x

Tabla. Listeners de los componentes avanzados de Swing.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱󰀷

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

Componente Swing 

MenuEvent MenuListener addMenuListener()

AbstractAction AbstractTableModel DefaultTreeModel DefaultTreeSelectionModel JComponent JMenu JPopupMenu JTree SwingPropertyChangeSupport TableColumn UIDefaults UIManager

PopupMenuEvent PopupMenuListener addPopupMenuListener()

PropertyChangeEvent PropertyChangeListener addPropertyChangeListener() x

TableModelEvent TableModelListener addTableModelListener() x

x x x

x x x x x

Tabla. Listeners de los componentes avanzados de Swing. 

Componente Swing

TreeExpansionEvent TreeExpansionListener addTreeExpansionListener()

AbstractDocument DefaultTreeModel DefaultTreeSelectionModel JComponent JTree UndoableEditSupport

TreeModelEvent TreeModelListener addTreeModelListener()

TreeSelectionEvent TreeSelectionListener addTreeSelectionListener()

UndoableEditEvent UndoableEditListener add UndoableEditListener() x

VetoableChangeEvent VetoableChangeListener add VetoableChangeListener()

x x X

x

x x

Tabla. Listeners de los componentes avanzados de Swing. 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱󰀸

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

Adapters Cabe preguntarse ahora qué métodos tiene cada interface, ya que hemos de implementar todos ellos, incluso aunque no los usemos, usemos, sino la clase que se encargaría de escuchar los eventos sería abstracta y no podríamos crear ningún objeto de ella. Parece un poco estúpido implementar métodos que no hagan nada sólo porque la interface de la que heredamos los tenga. Así por ejemplo si estamos interesados en escuchar cerrar la ventana de un JFrame hemos de crear una clase que implemente WindowListener, pero nosotros sólo estaremos interesados en un método de dicha interfase: windowClosing(WindowEvent ev). ev). Los creadores de Java también pensaron en esto y por ello para cada interface que tiene más de un método crearon una clase llamada [nombre_evento]Adapter (WindowAdapter), (WindowAdapter), que lo que hace es implementar todos los métodos de la interface sin hacer nada en ellos. Nosotros lo único que tendremos que hacer es que nuestra clase que escuche eventos extienda esta clase y sobrescriba los métodos que nos interesen. import java.awt.event.*; import java.awt.event.*; import javax.swing.JFrame; import javax.swing.JFrame; public  public class class  WindowListenerTest WindowListenerTest{{ public public  static  static void main(String[] void main(String[] args) {  JFrame(); JFrame f=new f=new JFrame();

Listener"); ); f.setTitle("Probando cerrar Window con Listener" f.setTitle("Probando f.setSize(300,150); //(Largo,Alto)dimensión f.setSize(300,150); frame   //(Largo,Alto)dimensión de la ventana del frame   /*Como es una Interface se deben de implementar *todos sus métodos de WindowListener*/   f.addWindowListener(new f.addWindowListener( new WindowListener()  WindowListener() { public  void void windowClosing(WindowEvent  windowClosing(WindowEvent ev) { System. exit (0); (0); } public  windowActivated(WindowEvent ev) {} public  void windowActivated(WindowEvent public void  windowClosed(WindowEvent ev) {} public void public  void windowClosed(WindowEvent public void public  void windowDeactivated(WindowEvent  windowDeactivated(WindowEvent ev) {} public  void windowDeiconified(WindowEvent  windowDeiconified(WindowEvent ev) {} public void public void public  void windowIconified(WindowEvent  windowIconified(WindowEvent ev) {} public  void windowOpened(WindowEvent  windowOpened(WindowEvent ev) {} public void });  //f.setDefaultCloseOperation(JFrame.  //f.setDefaultCloseOpera tion(JFrame.EXIT_ON_CL EXIT_ON_CLOSE);//jdk1 OSE);//jdk1.3+=>Cerrar .3+=>Cerrar una una ventana ventana  

); f.setVisible(true); f.setVisible(true

} }  ///:~ ///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀱󰀹

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.event.*; import java.awt.event.*; import javax.swing.JFrame; import javax.swing.JFrame; public class public  class  WindowAdapterTest WindowAdapterTest {  { public  static  static void main(String[] void main(String[] args) { public  JFrame(); JFrame f=new f=new JFrame(); "Probando Cerrar Window con Adpaters" Adpaters"); ); f.setTitle("Probando f.setTitle(  //(Largo,Alto)dimensión de la ventana del frame  f.setSize(300,150); //(Largo,Alto)dimensión f.setSize(300,150); frame  Java   /* Código obsoleto para cerrar ventanas en Java  *Como es una clase Adapter solo se implementa el método método   *que se requiere para cerra la ventana*/   new WindowAdapter()  WindowAdapter() f.addWindowListener( f.addWindowListener(new { public  void void windowClosing(WindowEvent  windowClosing(WindowEvent ev) { public System.exit (0); (0); } });  //f.setDefaultCloseOperation(JFrame.E  //f.setDefaultCloseOperat ion(JFrame.EXIT_ON_CLO XIT_ON_CLOSE);// SE);// jdk1.3+=> jdk1.3+=> Cerrar una una ventana ventana  

f.setVisible(true f.setVisible( true); );

}

}  ///:~  ///:~  A continuación en la siguiente tabla damos un listado de las principales interfaces junto a sus respectivas clases clases “Adapter” y los métodos que poseen:

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲󰀰

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 Evento Listener interface Y Adapter ActionEvent ActionListener AdjustmentEvent AdjustmentListener ComponentEvent ComponentListener ComponentAdapter ContainerEvent ContainerList ContainerAdapter FocusEvent FocusListener FocusAdapter ItemEvent ItemListener KeyEvent KeyListener KeyAdapter

Métodos con su evento (ev ev es  es una instancia del objeto event, puede ser cualquier otro nombre).  nombre).  actionPerformed(ActionEvent ev) adjustmentValueChanged(AdjustmentEvent ev) componentHidden(ComponentEvent ev) componentShown(ComponentEvent ev) componentMoved(ComponentEvent ev) componentResized(ComponentEvent ev) componentAdded(ContainerEvent ev) componentRemoved(ContainerEvent ev) focusGained(FocusEvent ev) focusLost(FocusEvent ev) itemStateChanged(ItemEvent ev) keyPressed(KeyEvent ev) keyReleased(KeyEvent ev) keyTyped(KeyEvent ev)

MouseEvent MouseListener MouseAdapter MouseEvent MouseMotionListener MouseMotionAdapter TextEvent TextListener WindowEvent WindowListener WindowAdapter

mouseClicked(MouseEvent ev) mouseEntered(MouseEvent ev) mouseExited(MouseEvent ev) mousePressed(MouseEvent ev) mouseReleased(MouseEvent ev) mouseDragged(MouseEvent ev) mouseMoved(MouseEvent ev) textValueChanged(TextEvent ev) windowActivated(WindowEvent ev) windowClosed(WindowEvent ev) windowClosing(WindowEvent ev) windowDeactivated(WindowEvent ev) windowDeiconified(WindowEvent ev) windowIconified(WindowEvent ev) windowOpened(WindowEvent ev)

Tabla. Interfaces y Adapters con sus respectivos métodos.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲󰀱

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 Evento Listener interface AncestorEvent AncestorListener CaretEvent CaretListener CellEditorEvent CellEditorListener ChangeEvent ChangeListener DocumentEvent DocumentListener HyperlinkEvent HyperlinkListener InternalFrameEvent InternalFrameListener

Métodos con su evento (ev ev es  es una instancia del objeto event, puede ser cualquier otro nombre).  nombre).   ancestorAdded(AncestorEvent ev) ancestorMoved(AncestorEvent ev) ancestorRemoved(AncestorEvent ev) caretUpdate(CareEvent ev) editingCanceled(CellEditorEvent ev) editingStopped(CellEditorEvent ev) stateChanged(ChangedEvent ev) changedUpdate(DocumentEvent ev) insertUpdate(DocumentEvent ev)ev) removeUpdate(DocumentEvent hyperlinkUpdate(HyperlinkEvent ev) internalFrameActivated(InternalFrameEvent ev) internalFrameClosed(InternalFrameEvent ev) internalFrameClosing(InternalFrameEvent ev) internalFrameDeactivated(InternalFrameEvent ev) internalFrameDeiconified(InternalFrameEvent ev) internalFrameIconified(InternalFrameEvent ev)

internalFrameOpened(InternalFrameEvent ev) contentsChanged(ListDataEvent ev) intervalAdded(ListDataEvent ev) intervalRemoved(ListDataEvent ev) valueChanged(ListSelectionEvent ev)

ListDataEvent ListDataListener

ListSelectionEvent ListSelectionListener MenuDragMouseEvent menuDragMouseDragged(MenuDragMouseEvent ev) MenuDragMouseListener menuDragMouseEntered(MenuDragMouseEvent ev) menuDragMouseExited(MenuDragMouseEvent ev) menuDragMouseReleased(MenuDragMouseEvent ev) MenuKeyEvent menuKeyPressed(MenuKeyEvent ev) MenuKeyListener menuKeyReleased(MenuKeyEvent ev) menuKeyTyped(MenuKeyEvent ev) MenuEvent menuCanceled(MenuEvent ev) MenuListener menuDeselected(MenuEvent ev) menuSelected(MenuEvent ev) Tabla. Interfaces y Adapters nuevos con sus respectivos métodos.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲󰀲

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 Evento Listener interface MouseInputEvent MouseInputListener

PopupMenuEvent PopupMenuListener

Métodos con su evento (ev ev es  es una instancia del objeto event, puede ser cualquier otro nombre).  nombre).   mouseClicked(MouseInputEvent ev) mouseDragged(MouseInputEvent ev) mouseEntered(MouseInputEvent ev) mouseExited(MouseInputEvent ev) mouseMoved(MouseInputEvent ev) mousePressed(MouseInputEvent ev) mouseReleased(MouseInputEvent ev) popupmenuCanceled(PopupMenuEvent ev) popupMenuWillBecomeInvisible(PopupMenuEvent ev) popupMenuWillBecomeVisible(PopupMenuEvent ev)

TableColumnModelEvent ev) TableColumnModelListener columnAdded(TableColumnModelEvent columnMarginChanged(TableColumnModelEvent ev) columnMoved(TableColumnModelEvent ev) columnRemoved(TableColumnModelEvent ev) columnSelectionChanged(TableColumnModelEvent ev) TableModelEvent tableChanged(TableModelEvent ev) TableModelListener TreeExpansionEvent treeCollapsed(TreeExpansionEvent ev) TreeExpansionListener treeExpanded(TreeExpansionEvent ev) TreeModelEvent treeNodesChanged(TreeModelEvent ev)

TreeModelListener TreeSelectionEvent TreeSelectionListener UndoableEditEvent UndoableEditListener

treeNodesInserted(TreeModelEvent ev) treeNodesRemoved(TreeModelEvent ev) treeStructureChanged(TreeModelEvent ev) valueChanged(TreeSelectionEvent ev) undoableEditHappened(UndoableEditEvent ev)

Tabla. Interfaces y Adapters nuevos con sus respectivos métodos.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲󰀳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

COMPONENTES ATÓMICOS DEL SWING En esta sección veremos ejemplos que hacen uso de los componentes, del paquete  los cuales puede escoger esc oger para crear su GUI.  java.x.swing los java.x.swing

JButton Ya nos es familiar que un objeto de la clase JButton  sea un componente. El manejo de JButton sea botones ya se abordo en la sección de El modelo de delegación de eventos, eventos, por tal motivo se dará por visto este tema. Evento: if(ev.getStateChan if(ev.getStateChange()== ge()== ItemEvent.SELECT ItemEvent.SELECTED ED

JCheckBox El componente JCheckBox JCheckBox   nos provee de un simple dispositivo de encendido/apagado con una etiqueta de texto a un lado. Veamos el siguiente ejemplo: Si se selecciona el JCheckBox JCheckBox   correspondiente desplegará el sabor del helado correspondiente, si se quita la marca de verificación o la palomita escribirá que se

deselecciono ese sabor correspondiente. import javax.swing.JFrame; import javax.swing.JCheckBox; import java.awt.FlowLayout; import import java.awt.Color;  java.awt.event.Item java.awt.event.ItemListener; Listener; import java.awt.event.Item java.awt.event.ItemEvent; Event; public class JCheckBoxTest{ public static void main(String args[]){ JFrame f = new JFrame(); f.setTitle("Ricos f.setTitle( "Ricos Helados" Helados"); ); //  // titulo del JFrame Establece el titulo de la ventana f.setSize(370,145); Establece el tamaño de la ventana f.getContentPane().setLayout(new FlowLayout());

JCheckBox ckBox     // se crean los componentes JChe new  JCheckBox("FRESA"  JCheckBox( "FRESA"); ); //Se  //Se inicializa con FRESA JCheckBox fresa = JCheckBox mango = new JCheckBox(); JCheckBox limon = new JCheckBox(); ; // color del fondo, hereda de la clase JComponent JComponent   fresa.setBackground(Color.pink )); //  ItemListener() //  // se agrega un oyente fresa.addItemListener(new ItemListener() { public void it  itemStateChanged(Item emStateChanged(ItemEvent Event ev){  //se implementa un método por clar claridad idad del código fresita (ev); evento   (ev);  //// se delega el evento } });

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 mango.setText("MANGO"); mango.setText("MANGO" ); mango.setBackground(Color.yellow ));; mango.addItemListener(new ItemListener() { public void it  itemStateChanged(Item emStateChanged(ItemEvent Event ev){  //se hace la implementación aqui mismo mismo   if (ev.getStateChange (ev.getStateChange()== ()== ItemEvent.SELECTED ) System.out .println("Rico .println("Rico helado de mango"); mango"); else  System.out .println("Deselecciono .println("Deselecciono mango" mango"); ); } }); ); limon.setText("LIMON"); limon.setText("LIMON" limon.setBackground(Color.green ); limon.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent ev){ if(ev.getStateChange() == ItemEvent.SELECTED ) System.out .println("Rico .println("Rico helado de limón"); limón"); else  System.out .println("Deselecciono .println("Deselecciono Limón"); Limón"); } });

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲󰀴

f.getContentPane().add(fresa);  //Agrega //Agrega el componente al Contenedor Contenedor f.getContentPane().add(mango);  //Agrega //Agrega el componente al Contenedor Contenedor f.getContentPane().add(limon);  //Agrega //Agrega el componente al Contenedor f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ));; //  // jdk1.3+=> Cerrar una ventana la ventana f.setVisible( ); Hace    //el método true setVisible se hereda de la visible super superclase clase Component }  //end //end main()

private static void fresita(ItemEvent ev){ if (ev.getStateChang (ev.getStateChange() e() == ItemEvent.SELECTED ) System.out .println("Rico .println("Rico helado de Fresa"); Fresa"); else  System.out .println("Deselecciono .println("Deselecciono Fresa"); Fresa"); SELECTED ECTED =>This state-change value indicates that an item was selected.  //static int SEL  //int getStateChange()=>Returns getStateChange()=>Returns the type of state change change (selected or deselected). } }  ///:~ ///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲󰀵

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 La selección o deselección de un JCheckBox JCheckBox   es enviada a la interface  es enviado conteniendo el método getStatedChange() ItemListener.. El ItemEvent ItemListener ItemEvent es getStatedChange(),, el cual regresa ItemEvent.DESELECTED ItemEvent.DESELECTED   o un ItemEvent.SELECTED ItemEvent.SELECTED,, según sea el caso. Es posible usar otro tipo de eventos como el clic o el action, pero el itemEvent se ejecuta antes

JRadioButton Si se quieren botones de selección única, los conocidos como botones radio, que tienen la particularidad de que solamente puede haber uno seleccionado. Cuando añadimos estos componentes (JRadioButtons) a nuestro diseño se añaden por grupos (ButtonGroup ButtonGroup), ), añadiendo botones a ese grupo uno a uno; la selección de uno distinto dentro de unSegrupo provoca la inmediata estaba seleccionado. emplean para darle a elegir aldeselección usuario entredelun que grupoantes de opciones mutuamente excluyentes. Swing permite que cualquier AbstractButton AbstractButton   pueda ser añadido a un ButtonGroup ButtonGroup.. En este ejemplo se utiliza un solo manejador de eventos para cada pulsación del JRadioButton y se crea una clase interna. import java.awt.*; import java.awt.event.*;

import javax.swing.*; javax.swing.*; public class JRadioButtonTest{  /*static y g global lobal por k se utilizan en la clase ManejadorBotonOpcion clase ManejadorBotonOpcion Se crea un cuadro de texto inicializado con 30 columnas*/ columnas */ = new JTextField( "cambia el estilo del tipo de letra" letra",, 30); private static JTextField campo   =

public static void main(String args[]){ JFrame f = new JFrame(); f.setTitle("JRadioButton f.setTitle("JRadioButto n Tipos Ti pos de Letras" Letras"); ); //  // titulo del del JFrame f.setSize(350,100); f.getContentPane().setLayout( new FlowLayout()); FlowLayout()); componentes JCheckBox JCheckBox     // // se crean los componentes JRadioButton botonSimple = new JRadioButton(  JRadioButton("Simple" "Simple",,true); JRadioButton botonNegrita = new JRadioButton(  JRadioButton("Negrita" "Negrita",,false); JRadioButton botonCursiva = new JRadioButton(  JRadioButton("Cursiva" "Cursiva",,false);  // crear relación lógica entre objetos objetos JRadioButton JRadioButton para para que sean sean exclusivos  exclusivos  ButtonGroup grupoBotonesOpcion = new ButtonGroup(); grupoBotonesOpcion.add(botonSimple); Tambien es posible añadir los botones al grupo a trves de la interfaz grafica de grupoBotonesOpcion.add(botonNegrita); netbeans, que lo hará en el metodo init grupoBotonesOpcion.add(botonCursiva);

components. objetos de tipo de letra   // crear objetos letra   Font("Serif" "Serif",, Font.PLAIN  Font.PLAIN , 14); Font tipoLetraSimple = new Font( Font tipoLetraNegrita = new Font(  Font("Serif" "Serif",, Font.BOLD  Font.BOLD , 14);

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲󰀶

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 Font tipoLetraCursiva = new Font(  Font("Serif" "Serif",, Font.ITALIC  Font.ITALIC , 14); tipoLetraNegritaCursiva  //Font tipoLetraNegritaCu rsiva = new Font("Serif" Font("Serif",, Font.BOLD + Font.ITALIC, Font.ITALIC, 14);  14);   // registrar eventos para para objetos JRadioBu JRadioButton tton   botonSimple.addItemListener( new  ManejadorBotonOpcion(tipoLetraSimple)); botonNegrita.addItemListener( new  ManejadorBotonOpcion(tipoLetraNegrita)); botonCursiva.addItemListener( new  ManejadorBotonOpcion(tipoLetraCursiva)); f.getContentPane().add( campo ); )  //Agrega ;//Agrega el componente componente al Contenedor Contenedor f.getContentPane().add(botonSimple); //Agrega f.getContentPane().add(botonSimple);  //Agrega el el componente componente al Contenedor Contenedor f.getContentPane().add(botonNegrita); //Agrega f.getContentPane().add(botonNegrita);  //Agrega el el componente componente al Contenedor Contenedor f.getContentPane().add(botonCursiva); //Agrega f.getContentPane().add(botonCursiva);  //Agrega el componente componente al Contenedor Contenedor f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ));;  // // jdk1.3 jdk1.3+=> +=> Cerrar una ventana f.setVisible(true);  } //end  //end main() main()  //clase static static pork se utilizan utilizan componentes componentes que que estan en el main()y es static  static  private static class ManejadorBotonOpcion implements  ItemListener { tipoDeLetra ; private Font tipoDeLetra;

public ManejadorBotonOpcion(Font f) { tipoDeLetra = f; tipoDeLetra =

} manejarr eventos de de botn de de opcin  opcin   // maneja public void itemStateChanged(ItemEvent ev) { campo .setFont(tipoDeLetra .setFont( tipoDeLetra); ); } interna privada ManejadorB ManejadorBotonOpcion otonOpcion   } //~  //~ fin de la clase interna } ///:~   ///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲󰀷

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 En este otro ejemplo se utilizan diferentes manejadores de eventos, es decir, uno para cada pulsación de JRadioButton. Estos ejemplos se programaron de diferente manera para aprender a crear o manipular diversos códigos con interfaces graficas del swing. import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JRadioButtonTest2{ public static void main(String args[]){ JFrame f = new JFrame(); f.setTitle("JRadioButton f.setTitle( "JRadioButton Tipos de Letras" Letras"); ); //  // titulo del JFrame f.setSize(350,120); f.getContentPane().setLayout(new FlowLayout());

  //Se //Se crea un cuadro de ttexto exto inicializado con 30 columnas es final ya k utiliza clases internas  internas  final JTextField campo = new JTextField( "cambia el estilo del tipo de letra", letra" , 30); componentes JCheckBox   // se crean los componentes JCheckBox  JRadioButton botonSimple = new JRadioButton(  JRadioButton("Simple" "Simple",,true); JRadioButton botonNegrita = new JRadioButton(  JRadioButton("Negrita" "Negrita",,false); JRadioButton botonCursiva = new JRadioButton(  JRadioButton("Cursiva" "Cursiva",,false); objetos tos JRadioButton para que sean exclusivos  exclusivos   // crear relación lógica entre obje

ButtonGroup grupoBotonesOpcion = new ButtonGroup(); grupoBotonesOpcion.add(botonSimple); grupoBotonesOpcion.add(botonNegrita); grupoBotonesOpcion.add(botonCursiva); JRadioButton JRadioButton     //botonSimple.addItemListener( registrar eventos para objetos new  ItemListener(){ public void itemStateChanged(ItemEvent ev) { Font tipoLetraSimple = new Font(  Font("Serif" "Serif",, Font.PLAIN , 14); campo.setFont(tipoLetraSimple); } });  // registrar eventos para objetos JRadioButton  JRadioButton  botonNegrita.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent ev) {  Font("Serif" "Serif",, Font.BOLD , 14); Font tipoLetraNegrita = new Font( campo.setFont(tipoLetraNegrita); } });  // registrar eventos para objetos JRadioButton  JRadioButton  botonCursiva.addItemListener(new ItemListener(){ public void itemS  itemStateChanged(ItemEvent tateChanged(ItemEvent ev) {  Font("Serif" "Serif",, Font.ITALIC , 14); Font tipoLetraCursiva = new Font( campo.setFont(tipoLetraCursiva); } });

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲󰀸

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 f.getContentPane().add(campo);  //Agrega //Agrega el componente al Contenedor Contenedor f.getContentPane().add(botonSimple);  //Agrega //Agrega el componente al Contenedor Contenedor f.getContentPane().add(botonNegrita);  //Agrega //Agrega el componente al Contenedo Contenedorr f.getContentPane().add(botonCursiva);  //Agrega //Agrega el componente al Contenedor Contenedor f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ));;  //// jdk1.3+=> Cerrar una ventana f.setVisible(true);   }  //end //end main() }  ///:~ ///:~

JList Se trata de un componente función similar a los anteriores JRadioButton), sólo que aquícon lasuna posibles selecciones se dos encuentran en (JCheckBox una lista, quey normalmente lleva un scroll incorporado, y se seleccionan haciendo clic directamente sobre ellas. Se emplea cuando el número de opciones entre las que ha de escoger el usuario es demasiado grande para presentársela en forma de radiobuttons o checkboxes. Posee métodos para permitir simple o múltiple selección, seleccionar o deseleccionar un componente, averiguar que componente está seleccionado... import java.awt.FlowLayout; import javax.swing.JFrame;

import javax.swing.JList;  public class JListTest1 {  main(String[] args) {  main(String[]  public static void 

JFrame f=new JFrame(); ); f.setTitle("JListTest"); f.setTitle("JListTest" f.setSize(200,180); f.getContentPane().setLayout( new FlowLayout()); Crea un array de strings y se  String[] labels={"Primero" ,"Segundo", "Segundo","Tercero", "Tercero", labels={"Primero", los pasa al JList para que "Cuarto","Quinto" "Cuarto", "Quinto", ,"Sexto" "Sexto", , cree la lista. "Septimo", ,"Octavo", "Octavo","Noveno" "Noveno"}; }; "Septimo" JList list=new JList(labels); f.getContentPane().add(list); ); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); f.setVisible(true); }// end main()  main()  }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀲󰀹

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JScrollPane;

de swing //nuevos eventos de swing import  javax.swing.event.ListSelectionEvent; import  javax.swing.event.ListSelectionListener;  public class JListTest2 {  public static void   main(String[] args) {  main(String[] JFrame f=new JFrame();

f.setTitle( "JListTest"); f.setTitle("JListTest" ); f.setSize(200,230); f.getContentPane().setLayout( new FlowLayout());  String labels[] = { "OPCION_1", "OPCION_1", "OPCION_2" "OPCION_2", , "OPCION_3" "OPCION_3", , "OPCION_4" "OPCION_4", , "OPCION_5", "OPCION_6" "OPCION_5", "OPCION_6", , "OPCION_7" "OPCION_7", , "OPCION_8" "OPCION_8", , "OPCION_9", "OPCION_10"  }; "OPCION_9", "OPCION_10" }; JList lista = new JList(labels); f.getContentPane().add(lista);  JScrollPane scrollPane = new JScrollPane(lista); f.getContentPane().add(scrollPane);  ListSelectionListener listSelectionListener = new ListSelectionListener() { public void valueChanged(ListSelectionEvent ev) {

  valueChanged(ListSelectionEvent ev) {  valueChanged(ListSelectionEvent  public void  JList list = (JList) ev.getSource(); int indice = list.getSelectedIndex(); Object valor = list.getSelectedValue(); .println("Indice=> "Indice=> " " +  + indice + "valor=> " " +  + valor); System.out.println( } }; lista.addListSelectionListener(listSelectionListener); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ) ); ; f.setVisible( true);   }// end main()  main()  }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳󰀰

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

JComboBox Su filosofía es idéntica a la de JList JList,, pero en esta ocasión las opciones no se ven en un principio. El usuario ha de hacer un clic sobre una pestaña que desplegará una lista de opciones sobre las cuales escoge el usuario una mediante un clic. import java.awt.FlowLayout; import java.awt.event.ActionE java.awt.event.ActionEvent; vent; import java.awt.event.ActionListene java.awt.event.ActionListener; r; import javax.swing.JComboBox; import javax.swing.JFrame; public class JComboBoxTest { public static void main(final String args[]) { final String labels[]= {"OPCION_A" {"OPCION_A",, "OPCION_B", "OPCION_B", "OPCION_C", "OPCION_C" , "OPCION_D" "OPCION_D",, "OPCION_E"}; "OPCION_E" }; JFrame f = new JFrame(  JFrame("JComboBox" "JComboBox"); ); f.setSize(350,100);  FlowLayout()); //Coloca  //Coloca los componentes de form formaa consecutiva f.getContentPane().setLayout(new FlowLayout());

 JComboBox comboBox = new JComboBox(labels); comboBox.setSelectedIndex(0); Contenedor edor f.getContentPane().add(comboBox);  //Agrega //Agrega el el combo al Conten   /*Forma /*Forma 1*/   {   /*comboBox.addActionListener(new ActionListener() { 

public void acti actionPerformed(A onPerformed(ActionEvent ctionEvent ev){  ev){  (JComboBox)ev.getSource(); ource();   JComboBox cb = (JComboBox)ev.getS String opcionSelec = (String)cb.getSelectedItem() (String)cb.getSelectedItem();;  System.out.println("Selected: " + opcionSelec); opcionSelec);   */  

}   }); }); 

 /*Forma 2*/   ActionListener actionListener = new ActionListener() { public void actionPerformed(ActionEvent ev){ JComboBox cb = (JComboBox)ev.getS (JComboBox)ev.getSource(); ource(); String opcionSelec = (String)cb.getSelectedItem() (String)cb.getSelectedItem();; System.out .println("Selected: .println("Selected: " + " + opcionSelec);

} }; comboBox.addActionListener(actionListener);

; //Cierra la ventana f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE )); //Cierra f.setVisible(true);   }  //// end main() main()   }  ///:~  ///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳󰀱

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

JLabel No es más que una etiqueta de texto que podemos colocar al lado de cualquier componente para darle una indicación al usuario de cual es la función de dicho componente. import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel;  public class JLabelTest {  main(String[] args) {  main(String[]  public static void  JFrame f=new JFrame();

f.setTitle("JLabelTest"); f.setTitle("JLabelTest" ); f.setSize(200,100); f.getContentPane().setLayout( new FlowLayout());  JLabel("Una "Una etiqueta" etiqueta"); ); JLabel l1=new JLabel( JLabel l2=new JLabel(); "Otra etiqueta"); l2.setText("Otra l2.setText( etiqueta"); f.getContentPane().add(l1); f.getContentPane().add(l2); f.setVisible(true); ); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); }// end main()  main()  }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳󰀲

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

JTextField y JPasswordField JTextField: Está pensado para obtener texto del usuario, este tecleará en él y cuando JTextField: pulse intro podremos disponer del texto que tecleó. Únicamente se puede recoger una línea de texto. Tiene métodos para recoger el texto del usuario, poner un texto en él, recoger solo el texto seleccionado, seleccionar una parte del texto, insertar texto, cortar texto, pegar texto, etc. JPasswordField: No es más que un JTextField JPasswordField: JTextField en  en el cual al escribir no se ve lo que se escribe, sino un carácter (*, por ejemplo). Se emplea para pedirle passwords al usuario y evitar que puedan ser leídas por alguien.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JTextFieldTest extends JFrame { private JTextField campoTexto1 campoTexto1,, campoTexto2 campoTexto2,, campoTexto3 campoTexto3;; private JPasswordField campoContrasenia campoContrasenia;; public JTextFieldTest() { super("JTextField y JPasswordField" JPasswordField" );  );

Container contenedor = getContentPane(); contenedor.setLayout( new FlowLayout() );  //f.getContentPane().setLayout(new FlowLayout());   //f.getContentPane().setLayout(new FlowLayout());  JLabel etiqueta= new JLabel(  JLabel("" "" +  + componente"); "Introducir texto y dar enter en cada componente"); contenedor.add(etiqueta);  // crear campo de texto con tamaño predeterminado  predeterminado  campoTexto1 = campoTexto1 = new JTextField(10); contenedor.add(campoTexto1 contenedor.add( campoTexto1); );  // crear campo de texto con texto predeterminado  predeterminado  campoTexto2 =  JTextField("Escriba "Escriba el texto aquí" aquí"); ); campoTexto2 = new JTextField(

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳󰀳

contenedor.add(campoTexto2); contenedor.add(campoTexto2 ); predeterminado,   // crear campo de texto con texto predeterminado,  eventos   // 20 elementos visibles y sin manejador de eventos  campoTexto3 =  = new JTextField( "Campo de texto no editable" editable",, 20); campoTexto3 false ); campoTexto3.setEditable( campoTexto3.setEditable( ); contenedor.add( campoTexto3 campoTexto3 );

 // crear campo de contraseña predeterminado  contraseña con texto predeterminado  campoContrasenia = new JPasswordField( campoContrasenia =  JPasswordField("Texto "Texto oculto"); oculto"); contenedor.add( campoContrasenia campoContrasenia );  ); eventos    // registrar manejadores de eventos campoTexto1.addActionListener(new ManejadorCampoTexto()); campoTexto1.addActionListener( campoTexto2.addActionListener( campoTexto2.addActionListener(new ManejadorCampoTexto()); campoTexto3.addActionListener( campoTexto3.addActionListener(new ManejadorCampoTexto()); campoContrasenia.addActionListener( campoContrasenia.addActionListener(new ManejadorCampoTexto()); setSize(325,150); setVisible(true);  ); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  ); } // fin del constructor de JTextFieldTest() JTextFieldTest()  

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 manejo de eventos   // clase interna privada para el manejo eventos  private class ManejadorCampoTexto implements ActionListener {  // procesar eventos de camp campoo de texto  texto  public void actionPerformed(ActionEvent ev) { "";; String cadena = ""  // el usuario oprimió Intro en objeto objeto JTextField campoTexto1  campoTexto1  if (ev.getSource() == campoTexto1 campoTexto1)) cadena = "campoTexto1: "" +  + ev.getActionCommand();  //getActionComma  //getActionCommand()=> nd()=> Returns the command string string associated with this action  action   // el usuario oprimió Intro en objeto campoTexto2  objeto JTextField campoTexto2  else if (ev.getSource() == campoTexto2 campoTexto2)) cadena = "campoTexto2: "" +  + ev.getActionCommand();  // el usuario oprimió Intro en objeto campoTexto3  objeto JTextField campoTexto3  else if (ev.getSource() == campoTexto3 campoTexto3)) cadena = "campoTexto3: "" +  + ev.getActionCommand(); objeto JTextField campoContrasenia   // el usuario oprimió Intro en objeto campoContrasenia  else if (ev.getSource() == campoContrasenia campoContrasenia)) { cadena = "campoContrasenia: "" +  + ev.getActionCommand ev.getActionCommand(); ();  // new String(campoContrasenia.getPassword()); String(campoContrasenia.getPassword());   }

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳󰀴

JOptionPane.showMessageDialog ( null, cadena,"Resultados" cadena,"Resultados",JOptionPane. ,JOptionPane.CANCEL_OPTION ));; } // fin del método actionPerformed() actionPerformed()   } // fin de la clase interna privada ManejadorCampoTexto ManejadorCampoTexto   {public static void main( String args[] ) JTextFieldTest aplicacion = new JTextFieldTest(); } } ///:~  ///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳󰀵

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

JTextArea Todo lo dicho para JTextField JTextField es  es válido aquí también; la diferencia entre ambos es que  permite al usuario introducir más de una línea l ínea de texto. JTextArea permite JTextArea En este ejemplo primero se selecciona el texto y después se pulsa el botón Copiar para pegar el texto en el cuadro vacío.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JTextAreaTest extends JFrame { private JTextArea areaTexto1 areaTexto1,, areaTexto2 areaTexto2;; private JButton botonCopiar botonCopiar;; public JTextAreaTest() { super("JTextArea" "JTextArea"); ); setSize(450,150); getContentPane().setLayout(new FlowLayout());

String cadena = "Ésta es una cadena de\ndemostración para\n" + para\n" + "ilustrar cómo copiar texto\nde un área de texto a \n" + \n" + "otra, utilizando un\nevento externo" externo";;  // establecer areaTexto1  areaTexto1  areaTexto1 = areaTexto1 = new JTextArea(cadena,5,10); JScrollPane jsp1= new JScrollPane(  JScrollPane(areaTexto1 areaTexto1); ); getContentPane().add(jsp1);  // establecer botonCopiar  botonCopiar  botonCopiar = >>>" );  ); botonCopiar = new JButton( "Copiar >>>"

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳󰀶

); getContentPane().add(botonCopiar); getContentPane().add(botonCopiar botonCopiar.addActionListener(new ActionListener() botonCopiar.addActionListener( { // clase interna anónima  // establecer en areaTexto2 el texto seleccionado seleccionado de areaTexto1  areaTexto1  public void actionPerformed(ActionEvent ev)

});

{ areaTexto2.append( areaTexto2.append(areaTexto1 areaTexto1.getSelectedText()); .getSelectedText()); }

 // establecer areaTexto2  areaTexto2  areaTexto2 = areaTexto2 = new JTextArea(5,10); areaTexto2.setEditable( areaTexto2.setEditable(false); JScrollPane jsp2= new JScrollPane(  JScrollPane(areaTexto2 areaTexto2); ); getContentPane().add(jsp2); ; // jdk1.3+=> Cerrar una ventana  ventana  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE )); // setVisible(true); constructor   }  //// fin del constructor public static void main( String args[] ) { JTextAreaTest aplicacion = new JTextAreaTest(); } } ///:~  ///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳󰀷

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

CUADROS DE DIALOGO ESTÁNDAR JOptionPane Muchas clases Swing soportan diálogos -- ventanas que son más limitadas que los JFrame.. Para crear un diálogo, simple y estándar se utiliza JOptionPane JFrame JOptionPane.. Para crear diálogos personalizados, se utiliza directamente la clase JDialog JDialog.. JOptionPane JOptionPane   proporciona soporte para mostrar diálogos standards, proporcionando iconos, especificando el título y el texto del diálogo diálog o y personalizando el texto del botón. Para la mayoría de los diálogos modales sencillos, se crea y se muestra el diálogo utilizando uno de los métodos showXxxDialog showXxxDialog de  de JOptionsPane JOptionsPane.. showMessageDialog Muestra un diálogo modal con un botón, etiquetado "OK". Se puede especificar fácilmente el mensaje, el icono y el título que mostrará el diálogo. showConfirmDialog Muestra un diálogo modal con dos botones, etiquetados "Yes" y "No". Estas etiquetas no son siempre terriblemente descriptivas con las acciones específicas del programa que causan.

showInputDialog Muestra un diálogo modal que obtiene una cadena del usuario. Un diálogo de entrada muestra un campo de texto para que el usuario teclee en él, o un JComboBox no editable, desde el que el usuario puede pue de elegir una de entre varias cadenas. showOptionDialog Muestra un diálogo modal con los botones, los iconos, el mensaje y el título especificado, etc. Con este método, podemos cambiar el texto que aparece en los botones de los diálogos estándar. También podemos realizar cualquier tipo de personalización. El soporte de iconos de JOptionPane JOptionPane   permite especificar qué icono mostrará el diálogo. Podemos utilizar un icono personalizado, no utilizar ninguno, o utilizar uno de los cuatro iconos estándard de JOptionPane (question (question,, information information,, warning warning,, y error error). ). Cada aspecto y comportamiento tiene sus propias versiones de los cuatro iconos estándard. Por defecto,unundiálogo diálogo creado showMessageDialog  showMessageDialog   muestra el icono de información, creado con con showConfirmDialog  showConfirmDialog   o showInputDialog showInputDialog muestra  muestra un icono question. Para especificar qué un diálogo estándard no tenga icono o tenga otro icono estándard, se añade un parámetro que especifica el tipo de mensaje. El valor del tipo de mensaje puede ser una de las siguientes constantes: PLAIN_MESSAGE PLAIN_MESSAGE (sin  (sin icono), QUESTION_MESSAGE QUESTION_MESSAGE,, INFORMATION_MESSAGE INFORMATION_MESSAGE,, WARNING_MESSAGE WARNING_MESSAGE,,

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳󰀸

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 o ERROR_MESSAGE ERROR_MESSAGE.. Si especificamos un objeto Icon Icon   distinto de null, el diálogo muestra ese icono, no importa el tipo de mensaje m ensaje que sea. import  javax.swing.*;  public class JOptionPaneTest {  public static void    main(String args[]) throws  Exception {  main(String

opciones  //Menú de opciones  guardará    int opcion; //La opción que se guardará //Este string contiene los labels de todos los botones  botones   , "Opcion2" "Opcion2", ,"Mensaje Simple" Simple", , String[] menu = {"Opcion1" {"Opcion1", "HTML","PideCadena" "PideCadena", , "Otro Menú", Menú","HTML", "PideEntero" "PideEntero", ,"Salir" "Salir"}; }; //Inicia el Menu de botones  botones  do{

opcion= JOptionPane.showOptionDialog ( //sin parentesco puede ser Frame f  f  null, opción", "Selecciona una opción", //texto que sale  sale  "Ejemplos con JOptionPane", caja    JOptionPane", //titulo de la caja JOptionPane. YES_NO_CANCEL_OPTION ,//tipo de caja  caja  mensaje  JOptionPane. QUESTION_MESSAGE , //tipo de mensaje  null, //icono de la caja  caja  menu, arreglo   //lista de botones, este es el arreglo  menu[0]); //boton por default  default  switch (opcion) { case 0: //Instrucciones aqui Opcion 1 1    System.out.println( .println("Seleccionó "Seleccionó la Opción 1"); 1");  break;

2    case 1: //Instrucciones aqui Opcion 2

case

System.out.println( .println("Seleccionó "Seleccionó la Opción 2"); 2");  break;

Simple    case 2: //Mensaje Simple JOptionPane. showMessageDialog (null,"Hola Mundo" Mundo"); );  break; case 3: //Otro menu dentro de esta opción opción   

//Menú de opciones  opciones 

int opcion2;

//Este string contiene los labels de todos los botones   String[] menu2 = {"Opción { "Opción 1" 1", ,"Opción 2", 2","Salir"}; "Salir" }; //Inicia el Menu de botones  botones   do{ opcion2 = JOptionPane.showOptionDialog ( null, "Selecciona una opción" opción", , "JOptionPane.showOptionDialog" , JOptionPane. YES_NO_CANCEL_OPTION , JOptionPane. INFORMATION_MESSAGE , null, menu2, menu2[0]); switch(opcion2) { .println("Seleccionó "Seleccionó la Opción 1"); 1"); case 0: System. out.println(  break; .println("Seleccionó "Seleccionó la Opción 2"); 2"); case 1: System. out.println(  break; do-while   case 2: //Para que se salga del do-while 

opcion2 = -1;  break;

}//end switch(opcion2) switch(opcion2)    (-1));// fin del do-while  do-while  }while(opcion2 != (-1));//  break;

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀳󰀹

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 //HTML    case 4: //HTML /* Puedes usar tags de HTML dentro de la string del  del  */  * message dialog */  String htmlTags = "" + "" + "" + ""+ "" + Centrado" +  + "Mensaje Centrado" //Tambien se pueden hacer Tablas Tablas    BGCOLOR=WHITE>"+ + "" "unoDosTres"  + "celda1celda2celda3" + ""  + "" ""; ; JOptionPane. showMessageDialog (null, htmlTags);  break; case 5: //PideCadena //PideCadena   

""; ; String input = "" //Se entiende por si solo solo    try { input = JOptionPane.showInputDialog ("Escribe algo"); algo"); }catch (Exception e) { //en caso de algún error muestra mensaje mensaje    JOptionPane. showMessageDialog (null, "Error"); "Error");  break; //sale de esta opción  opción   }//end try try    " +  + input); JOptionPane. showMessageDialog (null, "Cadena: "  break; case 6: //PideEntero //PideEntero    int entero = 0;

//se inicializa  inicializa 

try { //Hacemos parse para convertir a entero entero    entero = Integer. parseInt ( JOptionPane. showInputDialog ("Escribe un entero")); entero")); } catch (Exception e) {

/* en caso de algun error muestra mensaje por ejemplo  ejemplo   * si se introduce algo diferente de un entero */  */  JOptionPane. showMessageDialog (null, "Error"); "Error");  break;

} JOptionPane. showMessageDialog (null, "Número: " + " + entero);

//Se pueden hacer operaciones como siempre siempre    if(entero < 5) { JOptionPane. showMessageDialog ( null, "El Núumero: " + " + entero + " es menor a 5" 5"); ); }  break; case 7: //Salir del programa

opcion = -1;  break;

switch    }// fin del switch } while(opcion != (- 1) );// );// fin del do-while  do-while  } //end main()  main()  }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴󰀰

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 Menu Principal

Opcion1

Opcion2

Mensaje Simple

Otro Menú

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴󰀱

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 HTML

Pide Cadena

PideEntero

Salir Sale del Menú principal

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴󰀲

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

JFileChooser La ventana que permite la selección de archivos, suele ser una ventana modal, ya que los cambios que se produzcan en ella, o la selección que se haga, repercutirán en el funcionamiento de la aplicación general. Normalmente, la ventana de selección de archivos se utiliza para presentar una lista de archivos y permitir al usuario seleccionar cuál de ellos debe abrir la aplicación; o, por el contrario, permitir al usuario la introducción de un nombre o selección del archivo con que se quieren salvar datos. El objeto JFileChooser JFileChooser no  no realiza ninguna de estas acciones, es decir, no abre ni salva nada, sino que se limita a sleccionar el nombre del archivo con el que se desea realizar la acción; es responsabilidad del programa el llevar a cabo la apertura del archivo o la grabación de datos. import javax.swing.JFileChooser; import javax.swing.JFrame;  public class JFileChooserTest  {  public static void   main(String[] args) {  main(String[] JFrame f=new JFrame();

f.setTitle("JFileChooserTest"); f.setTitle("JFileChooserTest" ); f.setSize(200,150);

JFileChooser fc=new JFileChooser(); int op=fc.showOpenDialog(f); if(op==JFileChooser.APPROVE_OPTION ) System.out.println(fc.getSelectedFile()); f.setVisible(true); ); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); }//end main()  main()  }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴󰀳

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴󰀴

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

JColorChooser Panel de controles que permite al usuario seleccionar un color. import java.awt.*; import java.awt.event.*; import javax.swing.*;  public class JColorChooserTest  extends JFrame

{  private JButton cambiarColorBoton; cambiarColorBoton ; color =  = Color.LIGHT_GRAY ;  private Color color contenedor; ;  private Container contenedor

GUI  // configurar GUI   public JColorChooserTest() { super( "JColorChooserTest" ); "JColorChooserTest"  ); contenedor contenedor =  = getContentPane(); contenedor.setLayout( contenedor .setLayout(new FlowLayout()); // configurar cambiarColorBoton y registrar su manejador de eventos  eventos  cambiarColorBoton = cambiarColorBoton  = new JButton( "Cambiar color" ); color" );

cambiarColorBoton.addActionListener( cambiarColorBoton .addActionListener( new ActionListener(){ // mostrar JColorChooser cuando el usuario haga clic en el botón    public void   actionPerformed( ActionEvent evento )  actionPerformed( { color = color = JColorChooser.showDialog ( JColorChooserTest. this, "Seleccione un color" color", , color color );  ); color   // establecer color predeterminado, si no se devuelve un color  // Si se dá clic en el botón Cancelar  Cancelar  if ( color == color == null ) color = color = Color.RED; // cambiar color de fondo del panel de contenido  contenido   contenedor contenedor.setBackground( .setBackground( color color );  ); } }); contenedor .add( cambiarColorBoton contenedor.add( cambiarColorBoton );  ); setSize( 400, 130 ); setVisible( true ); } // fin del constructor  constructor   main( String args[] )  main(  public static void  {

JColorChooserTest aplicacion = new JColorChooserTest();  ); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  ); }//end main() main()    }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴󰀵

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴󰀶

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

LAYOUTS La distribución de los componentes en un contenedor usualmente esta controlada con un administrador de diseño (layout manager). Cada contenedor (como un Panel o un Frame) tiene por omisión un administrador de diseño asociado con este, el cual puede ser cambiado invocando al método setLayout() setLayout().. Cada administrador de diseño es responsable de definir el tamaño de cada componente en sus contenedores. Los siguientes administradores de diseño son incluidos en el lenguaje de programación Java:   FlowLayout  FlowLayout  : Es el administrador de diseño por default en el JPanel JPanel   y en el hacia JApplet.. Coloca los componentes de izquierda a derecha y de arriba hacia JApplet abajo. Les modifica la posición pero no les l es modifica el tamaño.



  BorderLayout: BorderLayout: Es el administrador de diseño por default de JWindow JWindow,, JDialog JDialog   y JFrame Sur, r, Este, Oeste y JFrame.. Coloca los componentes en 5 regiones, Norte, Su Centro. Modifica tanto la posición como el tamaño de los componentes.



  CardLayout: CardLayout: Es raramente usado y coloca los componentes en capas, donde cada capa es como una carta de naipes, de ahí su nombre. Modifica tanto la posición como el tamaño de los componentes.



  GridLayout GridLayout:: Es un administrador de diseño que provee flexibilidad para colocar



componentes a manera todas las celdas es igualde celdillas de una hoja de cálculo (Matriz). El tamaño de   GridBagLayout  GridBagLayout  : Es parecido al GridLayout, pero no fuerza a que todos los componentes tengan el mismo tamaño.



La siguiente figura muestra los administradores de diseño di seño (Layout managers).

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴󰀷

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

FlowLayout Es el administrador de diseño por default para la clase JPanel  y los componentes son JPanel y agregados de izquierda a derecha. Su alineación por omisión es centrada y permite colocar los componentes a sus tamaños preferidos. Con los argumentos del constructor de FlowLayout FlowLayout   se permite definir los componentes para que fluyan de izquierda a derecha o de derecha a izquierda. También es posible especificar los espacios mínimos de separación entr entree cada componente. Aquí tenemos tenemos los constructores: FlowLayout() FlowLayout(int align) FlowLayout(int align, int hgap, int vgap)  vgap)  Los valores para la alineación deben ser FlowLayout.LEFT FlowLayout.LEFT,, FlowLayout.RIGHT FlowLayout.RIGHT,, o FlowLayout.CENTER , así por ejemplo: setLayot( new FlowLayout( FlowLayout.RIGHT, FlowLayout.RIGHT, 20, 40 ) ); Crea un administrador de diseño diseño de tipo FlowLayout con una alineación centrada y con

las unidades de espacios mínimos especificados, por default da 5 unidades para espacio horizontal y 5 unidades para el vertical. import java.awt.*; import javax.swing.JButton; import javax.swing.JFrame;  public class FlowLayoutTest  

{  main(String[] args){  main(String[]  public static void  JFrame f = new JFrame(); ); f.setTitle("FlowLayoutTest"); f.setTitle("FlowLayoutTest" f.setSize(300,100); f.setLayout(new FlowLayout()); JButton b1 = new JButton(  JButton("Button "Button 1" 1"); );  JButton("Button "Button 2" 2"); ); JButton b2 = new JButton( JButton b3 = new JButton(  JButton("Button "Button 3" 3"); ); f.add(b1); f.add(b2); f.add(b3); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); f.setVisible(true); }//end main()  main()  }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import javax.swing.JButton; import javax.swing.JFrame;  public class FlowLayoutTest2 

{  public static void   main(String[] args){  main(String[] JFrame f = new JFrame();

); f.setTitle("FlowLayoutTest2"); f.setTitle("FlowLayoutTest2" f.setSize(500,150); f.setLayout(new FlowLayout(FlowLayout.RIGHT ,20,40)); ,20,40));  JButton("Button "Button 1" 1"); ); JButton b1 = new JButton( JButton b2 = new JButton(  JButton("Button "Button 2" 2"); );  JButton("Button "Button 3" 3"); ); JButton b3 = new JButton( f.add(b1); f.add(b2); f.add(b3); ); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); f.setVisible(true); }//end main()  main()  }///:~ 

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴󰀸

BorderLayout Es el administrador de diseño por default de la clase JFrame JFrame.. Los componentes son agregados a 5 regiones específicas dentro de la ventana o frame:           

NORTH ocupa la parte de arriba. NORTH ocupa SOUTH ocupa SOUTH  ocupa la parte inferior. EAST ocupa EAST  ocupa el lado derecho. WEST ocupa WEST  ocupa la parte izquierda. CENTER ocupa CENTER  ocupa la parte central.

Cuando ajustamos verticalmente el tamaño de la ventana o frame, las regiones EAST, WEST y CENTER son ajustadas.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀴󰀹

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 Cuando ajustamos horizontalmente el tamaño de la ventana o frame, las regiones NORT, SOUTH y CENTER son ajustadas. Cuando añadimos botones a las posiciones relativas los botones no cambian si la ventana es cambiada de tamaño, pero los tamaños de los botones si cambian. El siguiente constructor crea un administrador de diseño de tipo BorderLayout sin espacios entre sus componentes: setLayout(new BorderLayout() ); Usando el siguiente constructor podemos indicarle los espacios entre los componentes especificados por hgap y vgap: BorderLayout( int hgap, int vgap ); Se deben agregar los componentes en las regiones específicas respetando mayúsculas y minúsculas ya que no es lo mismo add( boton, BorderLayout.CENTER )  )  que add( boton, BorderLayout.center )  )  en el administrador de diseño , o de otra forma no serán visibles. Si se quiere evitar esto se puede usar add (boton, "center"). "center").

Si se deja una región sin utilizar, esta se comportará como si se hubiera preferido un tamaño de 0 x 0. La región CENTER CENTER   seguirá apareciendo como fondo cuando incluso si no tiene componentes. Ojo: Solo se puede agregar un solo componente por cada una de las cinco regiones. Si Ojo: se trata de agregar más de una, solo la última agregada será la visible. Cuando deseamos agregar más componentes por región usaremos la clase JPanel, lo cual veremos después.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵󰀰

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import javax.swing.JButton; import javax.swing.JFrame;  public class BorderLayoutTest  {   main(String[] args){  main(String[]  public static void  JFrame f = new JFrame();

); f.setTitle( "BorderLayoutTest"); f.setTitle("BorderLayoutTest" f.setLayout( new BorderLayout()); JButton b1 = new JButton(  JButton("Button "Button 1 (NORTH)"); (NORTH)"); ); ; f.add(b1,BorderLayout. NORTH )  JButton("Button "Button 2 (WEST)"); (WEST)"); JButton b2 = new JButton( ); ; f.add(b2,BorderLayout. WEST ) JButton b3 = new JButton(  JButton("Button "Button 3 (CENTER)"); (CENTER)"); f.add(b3,BorderLayout. CENTER);  JButton("Button "Button 4 (EAST)"); (EAST)"); JButton b4 = new JButton( f.add(b4,BorderLayout. EAST ) ); ;  JButton("Button "Button 5 (SOUTH)"); (SOUTH)"); JButton b5 = new JButton( f.add(b5,BorderLayout. SOUTH ) ); ; f.pack(); // El método pack, hace que el contenedor pregunte a su su   

f.setVisible( true); // LayoutManager el tamaño mínimo para que todos sus  sus  tamaño.  // componentes se puedan ver. Y se ajusten a ese tamaño. 

); ; f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ) }// end main() main()    }///:~

GridLayout Este administrador de diseño proporciona flexibilidad flexibilidad para colocar componentes en celdillas de izquierda a derecha y de arriba a abajo en una rejilla al estilo de una hoja electrónica de cálculo con filas y columnas. Por ejemplo un GridLayout GridLayout   con tres renglones y dos columnas puede ser creado mediante la sentencia new  lo que se traduce en 6 celdas. GridLayout(3,2) lo GridLayout(3,2)

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵󰀱

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 Con un administrador de tipo GridLayout GridLayout   siempre se ignoran los tamaños preferidos para cada componente. c omponente. El ancho de todas celdas es idéntico y es determinado mediante la división del ancho disponible sobre el número de columnas, así como el alto de todas las celdas es también determinado mediante el alto disponible entre el número de renglones. El orden en el cual los componentes son agregados a la rejilla es determina la celda que ocupa. Los renglones de celdas son llenados de izquierda a derecha, como un texto de una página que es llenada con líneas de arriba abajo.

Contenedor Layout Manager JPanel FlowLayout JApplet FlowLayout Júrame BorderLayout JDialog BorderLayout JScrollPane FlowLayout Tabla. Layuts por defecto de los contenedores Swing

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import  java.awt.*; import   java.awt.event.*; import  javax.swing.*;  public class GridLayoutTest  extends  JFrame implements   ActionListener

{ botones [];  private JButton botones[]; nombres[] =  private final String nombres[] "dos", "tres", "tres", "cuatro" "cuatro", , "cinco" "cinco", , "seis" }; "seis" }; { "uno", "uno", "dos", alternar  = true;  private boolean  boolean alternar = contenedor ;  private Container contenedor;  private GridLayout cuadricula1, cuadricula1 , cuadricula2; cuadricula2 ; // configurar GUI GUI     public  GridLayoutTest()

{ super( "GridLayoutTest"  );

esquemas  // establecer esquemas  /*GridLayout() Creates a grid layout with a default of one column per component, in a single row.  row.  GridLayout(int rows, int cols) Creates a grid layout with the specified number of rows and columns. GridLayout(int rows, int cols, int hgap, int vgap) Creates a grid layout with the specified number of rows and columns. */  */   cuadricula1 =  = new GridLayout( 2, 3, 10, 10 ); cuadricula1 cuadricula2 = cuadricula2  = new GridLayout( 3, 2 ); // obtener panel de contenido y establecer su esquema  esquema   contenedor  = getContentPane(); contenedor =

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵󰀲

contenedor.setLayout( cuadricula1  ); contenedor .setLayout( cuadricula1 ); // crear y agregar botones  botones  botones = new JButton[ nombres. botones = nombres.length length ];  ]; nombres.length length; ; cuenta++ ) { for ( int cuenta = 0; cuenta < nombres. botones botones[ [ cuenta ] = new JButton( nombres[ nombres[ cuenta ] ); botones botones[ [ cuenta ].addActionListener( this ); botones botones[ [ cuenta ].setToolTipText("Cambia ].setToolTipText("Cambia el esquema de GridLayout"); GridLayout"); contenedor.add( botones[ cuenta ] ); contenedor .add( botones[ } setSize( 300, 150 ); setVisible( true ); } // fin del constructor de DemoGridLayout DemoGridLayout    // manejar eventos de botn, alternando entre los esquemas    public void    actionPerformed( ActionEvent evento )  actionPerformed(

{ alternar )  ) if ( alternar contenedor.setLayout( .setLayout( cuadricula2 cuadricula2 );  ); contenedor else 

contenedor .setLayout( cuadricula1 contenedor.setLayout( cuadricula1 );  ); alternar = !alternar; ; // establecer alternar en el valor opuesto  opuesto   alternar  = !alternar contenedor.validate(); // Validates this container and all of its subcomponents.   contenedor .validate();// componentes   // Se realiza en cambio físico de los componentes  }  public static  void   main( String args[] )  main(

{ GridLayoutTest aplicacion = new  GridLayoutTest(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  ); }//end main() }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵󰀳

CONTENEDORES DE ALTO NIVEL Los Componentes no se encuentran aislados, sino agrupados dentro de Contenedores . Los Contenedores contienen y organizan la situación de los Componentes; además, los Contenedores son en sí mismos Componentes y como tales pueden ser situados dentro de otros Contenedores. También contienen el código necesario para el control de eventos, cambiar la forma del cursor o modificar el icono de la aplicación. Hay dos tipos principales de contenedores: la clase JWindow JWindow y  y JPanel JPanel.. Una ventana (JWindow (JWindow)) es un rectángulo que flota libremente en la pantalla. Hay dos tipos de ventanas. El JFrame JFrame y  y el JDialog JDialog.. Un JFrame JFrame es  es una ventana con una barra de titulo y esquinas que pueden ser cambiadas de tamaño. Un JDialog  es una simple JDialog es ventana que no puede tener una barra de menú y aunque se puede mover no puede ser cambiada de tamaño. El JPanel JPanel debe  debe estar contenido dentro de otro contenedor, o dentro de una ventana de un navegador Web. El JPanel es un área rectangular dentro de la cual se puede colocar otros componentes.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵󰀴

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

JDialog Un JDialog JDialog   es una ventana que depende de otra ventana (de una JFrame). Si un JFrame se cierra, se cierran también los JDialog que dependen de ella; si se restablece, sus JDialog aparecen de nuevo. Este comportamiento se obtiene de forma automática. Las Applets estándar no soportan JDialogs porque no son Frames de Java. Las Applets que abren JFrames sí pueden soportar JDialogs. Un JDialog modal require la atención inmediata del usuario: no se puede hacer ninguna otra cosa hasta no haber cerrado el JDialog. Por defecto, los JDialogs son no modales. m odales. import  java.awt.*; import   java.awt.event.*; import  javax.swing.*;  public class JDialogTest {  private static JFrame ventanaPrincipal ;  private static JDialog ventanaSecundaria ;  public static void    main(String[] args) {  main(String[] JButton boton = new JButton(  JButton("Abre "Abre secundaria" secundaria"); );

// Construcción de ventana principal  principal    JFrame("Ventana "Ventana principal"); principal"); ventanaPrincipal  = new JFrame( ventanaPrincipal .setSize(300,100); ventanaPrincipal .getContentPane().setLayout( new FlowLayout()); ventanaPrincipal .getContentPane().add(boton); //ventanaPrincipal.pack();  

JButton boton2 = new JButton(  JButton("Abre "Abre principal"); principal"); secundaria   // Construcción de ventana secundaria  ventanaSecundaria  = new JDialog(ventanaPrincipal ,"Ventana secundaria" secundaria"); ); //ventanaSecundaria  = new JDialog(ventanaPrincipal ,"Ventana secundaria",true secundaria",true);//modal );//modal ventanaSecundaria .getContentPane().setLayout( new FlowLayout()); ventanaSecundaria .getContentPane().add(boton2); ventanaSecundaria .setSize(300,100); //ventanaSecundaria.pack();   secundaria   // Hacer que el botón abra la ventana secundaria  boton.addActionListener( new ActionListener() {  public void    actionPerformed(ActionEvent e) {  actionPerformed(ActionEvent ventanaSecundaria .setVisible( true); } }); principal   // Hacer que el botón abra la ventana principal  boton2.addActionListener( new ActionListener() {   actionPerformed(ActionEvent e) {  actionPerformed(ActionEvent  public void  ventanaPrincipal .setVisible( true); ventanaSecundaria .setVisible( false); } }); // Hacer que al cerrarse la secundaria con la x de arriba a la   // derecha, se muestre la primaria primaria    ventanaSecundaria .addWindowListener( new WindowAdapter() {   windowClosing(WindowEvent e) {  windowClosing(WindowEvent  public void  ventanaPrincipal .setVisible( true); }

ventanaSecundaria .setVisible( true);

}); ventanaPrincipal .setDefaultCloseOperation( ventanaPrincipal .setVisible( true);

JFrame.EXIT_ON_CLOSE  );

main()    }// end main() }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵󰀵

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

CONTENEDORES DE NIVEL INTERMEDIO JScrollPane Un JScrollPane JScrollPane   provee de un contenedor general que no puede ser usado como un componente libre. Siempre esta asociado con un contenedor c ontenedor (por ejemplo, un ). Provee un área de visualización dentro de una región grande y con barras de JFrame). JFrame deslizamiento para manipularla.

El JScrollPane JScrollPane crea  crea y maneja las barras de desplazamiento y las contiene en un solo componente. No es posible controlar el administrador de diseño que usa, en lugar de esto se puede agregar a un JPanel JPanel para  para que el JScrollPane configure el administrador

de diseño y coloque los componentes en dicho panel. Ojo: Generalmente, no es posible manejar eventos en un JScrollPane Ojo: JScrollPane;; los eventos son manejados a través de los componentes que se contengan. Se presentan dos y versiones diferentes de ver código fuente deformas la misma aplicación JScrollPaneTest1 y JScrollPaneTest1 JScrollPaneTest2, JScrollPaneTest2 , para las diferentes de programar el mismo código pero con diversa estructura y así poder enriquecer más la comprensión de códigos de Java ya sea para programar nuevas aplicaciones desde cero o entender y extraer fragmentos de código de otros programadores y adaptarlos a nuestras necesidades.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵󰀶

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import java.awt.event.*; import javax.swing.*;  public class JScrollPaneTest1  extends JFrame { listaColores, , listaCopia; listaCopia;  private JList listaColores  private JButton botonCopiar; botonCopiar ; jsp1, , jsp2 jsp2; ;  private JScrollPane jsp1 nombresColores[] [] = { "Negro" "Negro", , "Azul" "Azul", , "Cyan", "Cyan",  private final String nombresColores

oscuro", "Gris" "Gris oscuro", "Gris", , "Verde" "Verde", , "Gris claro", claro", "Magenta", "Magenta" , "Naranja", "Naranja", "Rosa" "Rosa", , "Rojo" "Rojo", , "Blanco" "Blanco", , "Amarillo" "Amarillo" };  };  public JScrollPaneTest1()

{ //Pasa el mensaje al constructor del JFrame  JFrame   múltiple"); super("Listas de selección múltiple"); getContentPane().setLayout( new FlowLayout()); // establecer objeto JList listaColores listaColores = listaColores  = new JList(  JList(nombresColores nombresColores); ); listaColores.setVisibleRowCount(5); listaColores .setVisibleRowCount(5);//Mostrados //Mostrados en el JScrollPane listaColores.setSelectionMode( listaColores .setSelectionMode( ListSelectionModel. MULTIPLE_INTERVAL_SELECTION ); jsp1= jsp1= new JScrollPane(  JScrollPane(listaColores listaColores); ); jsp1); ); getContentPane().add(jsp1 getContentPane().add(

//getContentPane().add(new JScrollPane(listaColores)); // crear botón copiar y registrar su componente de escucha botonCopiar = botonCopiar  = new JButton(  JButton("Copiar "Copiar >>>"); >>>"); botonCopiar );  ); getContentPane().add( botonCopiar botonCopiar.addActionListener( new ActionListener() { botonCopiar.addActionListener( // manejador del evento del botón  public void   actionPerformed( ActionEvent evento )  actionPerformed( { // colocar valores seleccionados en listaCopia listaCopia.setListData( listaCopia .setListData(listaColores listaColores.getSelectedValues()); .getSelectedValues()); } } // fin de clase interna anónima ); // fin de la llamada a addActionListener // establecer objeto JList listaCopia listaCopia = listaCopia  = new JList(); listaCopia.setVisibleRowCount(5); .setVisibleRowCount(5); listaCopia listaCopia .setFixedCellWidth(100); listaCopia.setFixedCellWidth(100); listaCopia.setFixedCellHeight(15); listaCopia .setFixedCellHeight(15); listaCopia .setSelectionMode( listaCopia.setSelectionMode( ListSelectionModel. SINGLE_INTERVAL_SELECTION  );  ); jsp2=  JScrollPane(listaCopia listaCopia); ); jsp2= new JScrollPane( ); getContentPane().add( jsp2); getContentPane().add(jsp2 //getContentPane().add(new JScrollPane(listaCopia)); setSize(325,130); setVisible( true ); }// fin constructor JScrollPaneTest1

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵󰀷

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧  main(String args[]){  main(String  public static void  JScrollPaneTest1 aplicacion = new JScrollPaneTest1();  ); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  ); }// end main() }///:~ ///:~    import java.awt.*; import java.awt.event.*; import javax.swing.*;  public class JScrollPaneTest2 {  private static JList listaColores , listaCopia ;  private static JButton botonCopiar ;  private static JScrollPane jsp1, jsp2;  private final static String nombresColores [] = { "Negro", "Negro", "Azul" "Azul", , "Cyan" "Cyan", ,

"Gris oscuro", "Gris", , "Verde" "Verde", , "Gris claro", claro", "Magenta", "Magenta" , "Naranja", "Naranja", oscuro", "Gris" "Rosa" "Rosa", , "Rojo" "Rojo", , "Blanco" "Blanco", , "Amarillo" "Amarillo" };  };  main(String args[])  main(String  public static void  {  JFrame("Listas "Listas de selección múltiple" múltiple"); ); JFrame f= new JFrame( f.setSize(325,130); f.getContentPane().setLayout( new FlowLayout());

// establecer objeto JList listaColores listaColores  = new JList(nombresColores ); .setVisibleRowCount(5);//Mostrados //Mostrados en el JScrollPane listaColores .setVisibleRowCount(5); listaColores .setSelectionMode( ListSelectionModel. MULTIPLE_INTERVAL_SELECTION ); jsp1= new JScrollPane(listaColores ); f.getContentPane().add( jsp1);

//f.getContentPane().add(new JScrollPane(listaColores)); // crear botón copiar y registrar su componente de escucha botonCopiar    = = new JButton(  JButton("Copiar "Copiar >>>" >>>"); );  ); f.getContentPane().add( botonCopiar  ); .addActionListener( new ActionListener() { botonCopiar .addActionListener(   actionPerformed(ActionEvent evento)  actionPerformed(ActionEvent  public void  { // colocar valores seleccionados en listaCopia listaCopia .setListData( listaColores .getSelectedValues()); } }); // establecer objeto JList listaCopia listaCopia = new JList(); listaCopia.setVisibleRowCount(5); listaCopia listaCopia.setFixedCellWidth(100); .setFixedCellHeight(15); listaCopia.setSelectionMode(  ); ListSelectionModel. SINGLE_INTERVAL_SELECTION  ); jsp2= new JScrollPane(listaCopia ); f.getContentPane().add( jsp2);

//f.getContentPane().add(new JScrollPane(listaCopia));

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵󰀸

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 f.setVisible( true ); ); ; f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ) }// end main() }///:~ 

JPanel Los Paneles Paneles  son los contenedores de propósito general más frecuentemente utilizados. Implementados con la clase JPanel JPanel,, los paneles no añaden casi ninguna funcionalidad más allá de las que tienen los objetos JComponent JComponent.. Normalmente se usan para agrupar componentes , porque los componentes están relacionados o sólo porque agruparlos hace que la distribución Un fácilmente. panel puede usar cualquier controlador de distribución, y se les puede pusea edemás dotarsencilla. de bordes Un Panel Panel   es como un Frame Frame   y provee del espacio para que el programador coloque cualquier componente GUI, incluyendo también otros paneles. Cada panel hereda de la clase Container todos sus métodos y atributos, y puede tener su propio administrador de diseño. Ojo: Una de las ventajas de añadir paneles sobre nuestro frame es que los paneles al

derivar de JComponent JComponent   poseen el método paintComponent() paintComponent()   que permite dibujar y escribir texto sobre el panel de modo sencillo. Además cuando deseamos agregar más componentes en los Layouts por p or región (BorderLayout ) usaremos la clase JPanel JPanel.. import java.awt.*; import javax.swing.*;

GRAFICAS*/   /*JPANEL PARA PINTAR GRAFICAS*/   public class PanelPersonalizado  extends JPanel {

/*los miembros y métodos son public * para ser llamados por la otra clase*/  clase*/    public final static int CIRCULO  =  = 1, CUADRADO  =  = 2;  private int figura; figura; rectángulo   // usar figura para dibujar un óvalo o rectángulo   public void   paintComponent( Graphics g ){  paintComponent( super.paintComponent( g ); if ( figura == figura == CIRCULO    ) )

g.fillOval( 50, 10, 60, 60 ); figura ==  == CUADRADO    ) ) else if ( figura g.fillRect( 50, 10, 60, 60 ); } // establecer valor de figura y repintar PanelPersonalizado PanelPersonalizado     dibujar( int figuraADibujar )  dibujar(  public void  { figura = figura = figuraADibujar; repaint();//llama repaint(); paintComponent  //llama a paintComponent  } }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀵󰀹

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import java.awt.event.*; import javax.swing.*;  public class JPanelTest extends  JFrame

{  private JPanel panelBotones; panelBotones ;  private PanelPersonalizado miPanel; miPanel ; botonCirculo, , botonCuadrado; botonCuadrado ;  private JButton botonCirculo

GUI  // configurar GUI   public JPanelTest() { super( "JPanelTest" "JPanelTest" );  ); // crear área personalizada de dibujo  dibujo  miPanel miPanel =  = new PanelPersonalizado(); miPanel.setBackground( Color.GREEN  ); miPanel.setBackground(  ); // establecer botonCuadrado  botonCuadrado  botonCuadrado =  = new JButton( "Cuadrado" ); "Cuadrado" ); botonCuadrado botonCuadrado.addActionListener( .addActionListener( new ActionListener(){ botonCuadrado  actionPerformed( ActionEvent evento ){  actionPerformed(  public void  miPanel.dibujar( .dibujar( PanelPersonalizado.CUADRADO  );  ); miPanel } });

botonCirculo  = new JButton( "Círculo" botonCirculo = "Círculo" );  ); botonCirculo.addActionListener( .addActionListener( new ActionListener(){ botonCirculo  actionPerformed( ActionEvent evento ){  actionPerformed(  public void  miPanel.dibujar( .dibujar( PanelPersonalizado.CIRCULO  );  ); miPanel } }); COMPONENTES*/  /*JPANEL PARA AGRUPAR COMPONENTES*/  // establecer panel con botones botones    panelBotones =  = new JPanel(); panelBotones panelBotones.setLayout( panelBotones .setLayout( new GridLayout( 1, 2 ) ); panelBotones.add( .add( botonCirculo botonCirculo );  ); panelBotones panelBotones.add( .add( botonCuadrado botonCuadrado );  ); panelBotones /* adjuntar panel de botones y área personalizada  personalizada   de dibujo al panel de contenido*/  contenido*/   Container contenedor = getContentPane(); contenedor.add( miPanel, miPanel, BorderLayout.CENTER ); panelBotones, , BorderLayout.SOUTH  );  ); contenedor.add( panelBotones setSize(300,150); setVisible( true); } // fin del constructor JPanelTest JPanelTest     main( String args[] )  main(  public static void  {

JPanelTest aplicacion = new JPanelTest(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  );  ); }//end main()  main()  }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶󰀰

JtabbedPane Con la clase JTabbedPane JTabbedPane,, podemos tener varios componentes (normalmente objetos JPanel)) compartiendo el mismo espacio. El usuario puede elegir qué componente ver JPanel seleccionando la pestaña del componente deseado. Para crear un TabbedPane, simplemente se ejemplariza un JTabbedPane JTabbedPane,, se crean los componentes que deseemos mostrar, y luego los añadimos al JTabbedPane utilizando el método addTab addTab..

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶󰀱

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import javax.swing.*;  public class JTabbedPaneTest  extends JFrame  public JTabbedPaneTest() "JTabbedPane"); ); { super("JTabbedPane"

{

/*SwingConstants:=> A collection of constants generally used for  for   screen.  positioning and orienting components on the screen.  horizontalAlignment)  JLabel(String text, int horizontalAlignment)  Creates a JLabel instance with the specified text and horizontal alignment.*/  alignment.*/    JLabel("panel "panel uno", uno", SwingConstants.CENTER); JLabel etiqueta1 = new JLabel( JLabel etiqueta2 = new JLabel(  JLabel("panel "panel dos", dos", SwingConstants.CENTER);  JLabel("panel "panel tres"); tres"); JLabel etiqueta3 = new JLabel( JTabbedPane  // crear objeto JTabbedPane  JTabbedPane panelConFichas = new JTabbedPane(); /* establecer pane11 y agregarlo al objeto JTabbedPane*/  JTabbedPane*/  JPanel panel1 = new JPanel(); panel1.add(etiqueta1); /*addTab(String title, Icon icon, Component component, String tip)*/  tip)*/   panelConFichas.addTab("Ficha panelConFichas.addTab( "Ficha uno" uno", , null, panel1, "Primer panel" panel"); );

JTabbedPane  // establecer panel2 y agregarlo al objeto JTabbedPane  JPanel panel2 = new JPanel(); ); ; panel2.setBackground(Color. PINK ) panel2.add(etiqueta2); "Ficha dos" dos", , null, panel2, "Segundo panel" panel"); ); panelConFichas.addTab("Ficha panelConFichas.addTab( // establecer panel3 y agregarlo al objeto JTabbedPane  JTabbedPane  JPanel panel3 = new JPanel(); panel3.setLayout( new BorderLayout()); panel3.add( new JButton(  JButton("Norte" "Norte"), ), BorderLayout.NORTH  );  );  JButton("Sur" "Sur"), ), BorderLayout.SOUTH  );  ); panel3.add( new JButton( panel3.add( new JButton(  JButton("Oeste" "Oeste"), ), BorderLayout.WEST  );  ); panel3.add( new JButton(  JButton("Este" "Este"), ), BorderLayout.EAST  );  ); panel3.add( etiqueta3, BorderLayout.CENTER ); panelConFichas.addTab("Ficha panelConFichas.addTab( tres", null, panel3, "Tercer panel"); "Ficha tres", panel"); contenedor  // agregar objeto JTabbedPane al contenedor  getContentPane().add(panelConFichas); setSize(300, 200); setVisible( true ); } // fin del constructor  constructor   public  static void   main(String args[])  main(String {

JTabbedPaneTest demoPanelConFichas = new JTabbedPaneTest();  ); demoPanelConFichas.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  ); }// end main() main()    }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶󰀲

JSplitPane JSplitPane se usa para dividir con una barrita divisoria dos y solo dos componentes, JSplitPane se mismos que pueden ser alineados de izquierda a derecha o de arriba hacia abajo. Arrastrando el divisor, el usuario puede especificar qué cantidad de área pertenece a cada componente. Un yJSplitPane JSplitPane  cuando doscambiar componentes contienen información relacionada queremos  se que utiliza el usuario pueda el tamaño de los componentes en relación a uno o a otro. Un uso común de un JSplitPane JSplitPane   es para contener listas de elecciones y una visión de la elección actual.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶󰀳

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶󰀴

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.lang.*; import java.awt.*; import java.awt.event.*; import javax.swing.*;  public class JSplitPaneTest1  { static JFrame f = new JFrame(); ); ; static JSplitPane jsplitPane  = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT )  JLabel("en "en split1 label1"); label1"); static JLabel etiqueta1  = new JLabel( static JLabel etiqueta2  = new JLabel(  JLabel("en "en split2 label2"); label2");

 main(String[] args){  main(String[]  public static void  f .setTitle("JSplitPane" .setTitle( "JSplitPane"); ); .setSize(300,200); f .setSize(300,200); //cargando jsplitpane con sus dos componentes componentes    jsplitPane .add(etiqueta1 ); jsplitPane .add(etiqueta2 ); //cargando la ventana con splitpanel  splitpanel  f .getContentPane().add( .getContentPane().add( jsplitPane,BorderLayout. CENTER); .setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE  );  ); f .setDefaultCloseOperation(JFrame. f .setVisible( .setVisible( true); }; //end main()  main() 

}///:~

JToolBar Un objeto JToolBar JToolBar crea  crea una barra de herramientas con iconos dentro de una fila o una columna. Normalmente las barras de herramientas proporcionan acceso a funcionalidades que también se encuentran en ítems de menús.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import java.awt.event.*; import javax.swing.*;  public class JToolBarTest  { static JLabel etiqueta = new JLabel();

 main(String[] args) {  main(String[]  public static void  JFrame f= new JFrame(); ); f.setTitle( "JToolBarTest"); f.setTitle("JToolBarTest" f.setSize(400,150); f.getContentPane().add( etiqueta,BorderLayout. EAST ) ); ; JToolBar toolbar=new JToolBar();  ImageIcon("open.gif" "open.gif")); )); final JButton b1= new JButton(new ImageIcon(  ImageIcon("save.gif" "save.gif")); )); final JButton b2= new JButton(new ImageIcon( JButton b3= new JButton(new ImageIcon(  ImageIcon("copy.gif" "copy.gif")); ));  ImageIcon("cut.gif" "cut.gif")); )); JButton b4= new JButton(new ImageIcon( JButton b5= new JButton(new ImageIcon(  ImageIcon("paste.gif" "paste.gif")); )); toolbar.add(b1); toolbar.add(b2);toolbar.addSeparator(); toolbar.add(b3); toolbar.add(b4); toolbar.add(b5);

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶󰀵

//Forma1: se utiliza la etiqueta dentro del manejador de eventos   {//Agregamos un oyente al botón  botón  b1.addActionListener( new ActionListener() {//Agregamos   actionPerformed(ActionEvent ev) {//Tratamiento  actionPerformed(ActionEvent {//Tratamiento del evento evento     public void  //Si se elige el boton de Open en el JToolBar  JToolBar   if (ev.getSource() == b1) { etiqueta

}

.setText("Seleccionaste .setText( "Seleccionaste el botón OPEN"); OPEN");

} }); //Forma2: mandamos a llamar a un método openFile() para tratar la etiqueta   b2.addActionListener( new ActionListener() {//Agregamos {//Agregamos un oyente al botón  botón    actionPerformed(ActionEvent ev) {//Tratamiento  actionPerformed(ActionEvent {//Tratamiento del evento evento     public void  //Si se elige el botón de Save en el JToolBar  JToolBar   if (ev.getSource() == b2) { openFile(); } } }); f.getContentPane().add(toolbar,BorderLayout. NORTH ) ); ; f.setVisible( true); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ) ); ; main()    }//end main()   openFile(){  openFile(){  public static void  etiqueta.setText( .setText("Seleccionaste "Seleccionaste el botón SAVE" SAVE"); ); } }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

MENUS

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶󰀶

Un Menu Menu   es un componente diferente a otros componentes porque no se puede agregar a un Menu a los contenedores comunes. Solo se puede agregar menús a un "menu container".

JMenuBar Un componente JMenuBar JMenuBar   es un menú horizontal. Puede solamente agregarse a un objeto JFrame JFrame,, y forma la raíz de todos los árboles menú. Un JFrame JFrame   despliega un JMenuBar   a la vez. Se puede comenzar un árbol de menú poniendo un JMenuBar JMenuBar JMenuBar   "una barra barra de menú" en un JFrame JFrame,, usando el método setJMenuBar() setJMenuBar().. Desde este punto, se pueden agregar menús a la barra de menú y menús o elementos de menú dentro del menú. El JMenuBar JMenuBar no  no soporta oyentes. Como parte normal del comportamiento de un menú, los eventos anticipados que ocurran en la región de la barra de menú son procesados automáticamente.

JMenu Es posible crear entradas a una barra de menú agregando objetos de la clase  proveen al JMenuBar  elementos de tipo menú pullJMenu.. Los componentes JMenu JMenu JMenu proveen JMenuBar elementos down "menús desplegables".

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶󰀷

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

JMenuItem Un componente JMenuItem JMenuItem son  son los nodos hoja de un árbol de menú. Son agregados a un menú para completarlo. Swing también soporta JCheckBox JCheckBox   y JRadioButton JRadioButton   en menus, utilizando las clases correspondientes JCheckBoxMenuItem,, JCheckBoxMenuItem JRadioButtonMenuItem.. JRadioButtonMenuItem

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶󰀸

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 Si a una aplicación le quisieramos añadir un menú tendríamos hacer las siguientes cosas siguiendo un órden cualquiera:   Crear los objetos JMenuItem JMenuItem..   Crear los objetos JMenu JMenu y  y pegarles los JMenuItem: JMenuItem:   JRadioButtonMenuItem)    (JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem)    Crear una JMenuBar JMenuBar y  y pegarles los JMenu JMenu.. 

Es decir: JMenuBar => contiene JMenu JCheckBoxMenuItem, JRadioButtonMenuItem.

=>

contiene

import javax.swing.*;  public class JMenuBarTest  {  main(String[] args) {  main(String[]  public static void  JFrame f=new JFrame();

"JMenuBarTest"); ); f.setTitle("JMenuBarTest" f.setTitle( f.setSize(250,150); JMenuBar menuBar=new JMenuBar(); f.setJMenuBar(menuBar); //Sets the menuBar for this frame.

JMenuItem,

MENUS*/    /*NOMBRE DE LOS MENUS*/ // establecer menú Archivo y sus elementos de menú menú    JMenu menu1=new JMenu(  JMenu("Menu1" "Menu1"); ); menu1.setMnemonic('1' menu1.setMnemonic('1'); ); JMenu menu2=new JMenu(  JMenu("Menu2" "Menu2"); ); menu2.setMnemonic('e' menu2.setMnemonic('e'); ); /*ELEMENTOS DEL MENU1*/  MENU1*/  JMenuItem menuItem1= new JMenuItem(  JMenuItem("Opcion1" "Opcion1"); ); new JMenuItem("Opcion2" "Opcion2"); ); JMenuItem menuItem2= menu1  JMenuItem( //SE AGREGAN AL menu1  menu1.add(menuItem1); menu1.add(menuItem2);

/*ELEMENTOS DEL MENU2*/ MENU2*/     JCheckBoxMenuItem("Opcion1" "Opcion1"); ); JCheckBoxMenuItem jcbmenuItem1= new JCheckBoxMenuItem( JCheckBoxMenuItem jcbmenuItem2= new JCheckBoxMenuItem(  JCheckBoxMenuItem("Opcion2" "Opcion2", ,true); JRadioButtonMenuItem jcbmenuItem3= new  JRadioButtonMenuItem("Opcion3" JRadioButtonMenuItem( "Opcion3", ,true); menu2    //SE AGREGAN AL menu2 menu2.add(jcbmenuItem1); menu2.add(jcbmenuItem2); menu2.addSeparator(); //Agrega un separador menu2.add(jcbmenuItem3); /*MENU 1 Y MENU2 SE AGREGAN AL MENUBAR*/  MENUBAR*/   menuBar.add(menu1); menuBar.add(menu2); f.setVisible( true); ); ; f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ) }//end main() main()    ///:~    }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁐󰃡󰁧󰁩󰁮󰁡 󰀶󰀹

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

import  java.awt.*; import   java.awt.event.*; import  javax.swing.*;  public class JMenuBarTest2  extends JFrame {  private final Color valoresColor[]={Color. valoresColor []={Color. black,Color.blue,Color.red ,Color. ,Color.green }; elementosColor [], tiposLetra[]; tiposLetra [];  private  JRadioButtonMenuItem elementosColor[], elementosEstilo [];  private  JCheckBoxMenuItem elementosEstilo[];  private JLabel pantallaEtiqueta; pantallaEtiqueta ; grupoTiposLetra , grupoColores grupoColores; ;  private ButtonGroup grupoTiposLetra, estilo;  private int estilo;  public  JMenuBarTest2(){

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷󰀰

super("JMenuBarTest2" );

// establecer etiqueta para mostrar texto  texto   JLabel("Texto "Texto de ejemplo" ejemplo", , SwingConstants.CENTER ); pantallaEtiqueta  = new JLabel( .setForeground(valoresColor valoresColor[0]); [0]); pantallaEtiqueta .setForeground( pantallaEtiqueta .setFont( new Font(  Font("Serif" "Serif", , Font.PLAIN , 72)); getContentPane().add( pantallaEtiqueta, pantallaEtiqueta , BorderLayout.CENTER); // crear barra de menús y adjuntarla a la ventana del Frame Frame    JMenuBar barra = new JMenuBar(); setJMenuBar(barra); // establecer menú Archivo y sus elementos de menú menú    JMenu menuArchivo = new JMenu(  JMenu("Archivo" "Archivo"); ); 'A'); ); menuArchivo.setMnemonic( 'A' de...   // establecer elemento de menú Acerca de...  de..." ); JMenuItem elementoAcerca = new JMenuItem( "Acerca de..." ); elementoAcerca.setMnemonic( 'c'); 'c'); menuArchivo.add(elementoAcerca); elementoAcerca.addActionListener( new  ActionListener(){ // mostrar cuadro de diálogo de mensaje cuando se seleccione Acerca de...     actionPerformed( ActionEvent evento ){  actionPerformed(  public void  JOptionPane.showMessageDialog (JMenuBarTest2.this, "Éste es un ejemplo\ndel uso de menús", menús" , "Acerca de..." de...", , JOptionPane. JOptionPane.PLAIN_MESSAGE  ); } }); // establecer elemento de menú Salir  Salir   JMenuItem elementoSalir = new  JMenuItem("Salir" "Salir"); ); 'S'); ); elementoSalir.setMnemonic( 'S' JMenuItem( menuArchivo.add(elementoSalir); elementoSalir.addActionListener( new  ActionListener(){ // terminar la aplicación cuando el usuario haga clic en elementoSalir    public void    actionPerformed(ActionEvent evento) { System.exit(0); } });

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 MENUARCHIVO*/   /*AGREGA LOS MENUITEMS A MENUARCHIVO*/  barra.add(menuArchivo); // crear menú Formato, con sus submenús y elementos de menú  menú   JMenu menuFormato = new JMenu(  JMenu("Formato" "Formato"); ); menuFormato.setMnemonic( 'F'); 'F'); // crear submenú Color  Color   String colores[] = {"Negro" {"Negro", , "Azul", "Azul", "Rojo", "Rojo" , "Verde"}; "Verde"};  JMenu("Color" "Color"); ); JMenu menuColor = new JMenu( menuColor.setMnemonic( 'C'); 'C'); elementosColor  = new  JRadioButtonMenuItem[colores.length elementosColor = JRadioButtonMenuItem[colores.length]; ]; grupoColores =  ButtonGroup();// // Se agrupa para k sean exclusivos  exclusivos  grupoColores  = new ButtonGroup(); ManejadorEventos manejadorEventos = new  ManejadorEventos(); // crear elementos de menú tipo botones de opción para el menú Color  Color   for(int cuenta= 0; cuenta < colores.length colores. length; ; cuenta++) { elementosColor[cuenta]= [cuenta]= new   JRadioButtonMenuItem(colores[cuenta]); elementosColor

menuColor.add(elementosColor menuColor.add( elementosColor[cuenta]); [cuenta]); grupoColores.add( .add(elementosColor elementosColor[cuenta]); [cuenta]); grupoColores elementosColor elementosColor[cuenta].addActionListener(manejadorEventos); [cuenta].addActionListener(manejadorEventos); } // seleccionar primer elemento del menú Color  Color  elementosColor[0].setSelected( elementosColor [0].setSelected( true); // agregar el Menu Color al Menu Formato de la barra de menús  menús  menuFormato.add(menuColor);

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷󰀱

menuFormato.addSeparator(); letra  // crear submenú Tipo de letra  String nombresTiposLetra[] = {"Serif" {"Serif", , "Monospaced", "Monospaced" , "SansSerif"}; "SansSerif"};  JMenu("Tipo "Tipo de letra"); letra"); JMenu menuTiposLetra = new JMenu( menuTiposLetra.setMnemonic( 'T'); 'T'); tiposLetra = JRadioButtonMenuItem[nombresTiposLetra.length]; ]; tiposLetra  = new  JRadioButtonMenuItem[nombresTiposLetra.length grupoTiposLetra =  = new ButtonGroup(); grupoTiposLetra // crear elementos de menú tipo botones de opción para el menú Tipos de letra letra    for ( int cuenta = 0; cuenta < tiposLetra. tiposLetra .length; length ; cuenta++ ) { tiposLetra[cuenta] tiposLetra [cuenta] = new  JRadioButtonMenuItem(nombresTiposLetra[cuenta]); menuTiposLetra.add( tiposLetra[cuenta]); tiposLetra [cuenta]); grupoTiposLetra .add( .add(tiposLetra tiposLetra[cuenta]); [cuenta]); tiposLetra [cuenta].addActionListener(manejadorEventos); tiposLetra[cuenta].addActionListener(manejadorEventos); } // seleccionar el primer elemento del menú Tipo de letra  letra   tiposLetra [0].setSelected( true); tiposLetra[0].setSelected( menuTiposLetra.addSeparator(); // establecer elementos del menú Estilo  Estilo  String nombresEstilo[]= {"Negrita" {"Negrita", , "Cursiva"}; "Cursiva"}; elementosEstilo  = new  JCheckBoxMenuItem[nombresEstilo.length elementosEstilo = JCheckBoxMenuItem[nombresEstilo.length]; ]; ManejadorEstilo manejadorEstilo = new  ManejadorEstilo(); // crear elementos de menú tipo casilla de verificación para el menú Estilo   nombresEstilo. length; ; cuenta++ ) { for ( int cuenta = 0; cuenta < nombresEstilo.length elementosEstilo [cuenta]= new  JCheckBoxMenuItem(nombresEstilo[cuenta]); menuTiposLetra.add( elementosEstilo[cuenta]); elementosEstilo [cuenta]); elementosEstilo [cuenta].addItemListener(manejadorEstilo); } Formato  // colocar menú Tipo de letra en el menú Formato  menuFormato.add(menuTiposLetra); // agregar menú Formato a la barra de menús  menús  barra.add(menuFormato);

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷󰀲

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 setSize(550, 200); setVisible( true); } // fin del constructor constructor    /* clase interna para manejar eventos de acción de los elementos de menú menú    Ambos son JRadioButtonItem */  */    private class  ManejadorEventos implements  ActionListener { letra    // procesar selecciones de color y tipo de letra   actionPerformed(ActionEvent evento)  public void  // procesar selección de color  { color  elementosColor. .length length; ; cuenta++) for (int cuenta = 0; cuenta < elementosColor  (elementosColor elementosColor[cuenta].isSelected()){ [cuenta].isSelected()){ if ( pantallaEtiqueta .setForeground( .setForeground(valoresColor valoresColor[cuenta]); [cuenta]);  break; } //  ( procesar selección de tipo letra  letra   .length; int cuenta = 0; cuenta < de tiposLetra tiposLetra. length; cuenta++) for mismo  //if (evento.getSource() == tiposLetra[cuenta]) { //lo mismo   (tiposLetra tiposLetra[cuenta].isSelected()) [cuenta].isSelected()) { if ( pantallaEtiqueta .setFont( new Font(  Font(tiposLetra tiposLetra[cuenta].getText(), [cuenta].getText(), estilo estilo, , 72));  break; } repaint(); //Repaints this component. } // fin del método actionPerformed  actionPerformed  ManejadorEventos    } // fin de la clase ManejadorEventos // clase interna para manejar eventos de los elementos de menú tipo casilla de verificación  

 private class ManejadorEstilo implements  ItemListener {

letra   // procesar selecciones de estilo de tipo de letra    itemStateChanged(ItemEvent ev){  public void  estilo estilo =  = 0; negrita    // checar selección de negrita  (elementosEstilo elementosEstilo [0].isSelected()) if ( estilo +=  += Font.BOLD; estilo // checar selección de cursiva  cursiva  if (  (elementosEstilo elementosEstilo [1].isSelected()) estilo +=  += Font.ITALIC  ; estilo

pantallaEtiqueta .setFont( pantallaEtiqueta.setFont(  Font(pantallaEtiqueta pantallaEtiqueta .getFont().getName(), estilo, estilo, 72)); new Font( repaint();//Repaints repaint(); //Repaints this component.  component.  } } // fin de la clase ManejadorEstilo  ManejadorEstilo    main( String args[] )  main(  public static  void  { JMenuBarTest2 aplicacion = new  JMenuBarTest2(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  ); }// end main()  main()  }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷󰀳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

OTRAS CLASES BÁSICAS Evento con Teclado En este apartado se mostrara un ejemplo del manejo de pulsación de teclas y el mismo código se mostrará en otras dos clases diferentes para recalcar aún más lo aprendido en swing y las diversas maneras de programar código Java.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷󰀴

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import   java.awt.event.*; import  javax.swing.*;  public class KeyListenerTest1  extends JFrame implements  KeyListener { linea1  = "", "", linea2 linea2 =  = "", "", linea3 = linea3 = "" ""; ;  private String linea1 = areaTexto ;  private JTextArea areaTexto;  public  KeyListenerTest1()

{ tecla"); ); super("Demostración de eventos de pulsación de tecla" // establecer objeto JTextArea  JTextArea  areaTexto  = new  JTextArea(10,15); areaTexto = areaTexto.setText( "Oprima cualquier tecla en el teclado..."); teclado..."); areaTexto .setText("Oprima areaTexto .setEnabled( false); areaTexto.setEnabled( areaTexto.setDisabledTextColor(Color. areaTexto .setDisabledTextColor(Color. blue); getContentPane().add( areaTexto); areaTexto); JTextArea    addKeyListener( this); // eventos de teclas para el JTextArea setSize(400, 100); setVisible( true); } // fin del constructor constructor    // manejar evento de pulsación de cualquier tecla tecla      keyPressed(KeyEvent evento)  keyPressed(KeyEvent  public void  { /*getKeyText(int keyCode)=>Returns a String describing the keyCode,  keyCode,   * such as "HOME", "F1" or "A". "A".    * getKeyCode()=> getKeyCode()=>Returns Returns the integer (ASCII)keyCode ( ASCII)keyCode associated as sociated with the key in this th is event.

*getKeyChar()=> Returns the character associated with the key in this event.*/  event.*/  //System.out.println(evento.getKeyChar());*/   linea1 = "Se oprimió tecla: " + linea1 = " + evento.getKeyText (evento.getKeyCode()); establecerLineas2y3(evento); } // manejar evento de liberación de cualquier tecla  tecla     keyReleased(KeyEvent evento)  keyReleased(KeyEvent  public void  { linea1 linea1 =  = "Se soltó tecla: " + "  + evento.getKeyText (evento.getKeyCode()); establecerLineas2y3(evento); } acción   // manejar evento de pulsación de una tecla de acción    keyTyped(KeyEvent evento)  keyTyped(KeyEvent  public void  { nada  // no hay nada  } // establecer segunda y tercera líneas de salida  salida    private void    establecerLineas2y3(KeyEvent evento)

{

//F1-F12, ImpPant, Inicio, Supr, etc..  etc..   linea2 = "Esta tecla " + linea2 = " + (evento.isActionKey() ? "" : "" : "no " ") ) + "es una tecla de acción"; acción"; String temp = evento.getKeyModifiersText (evento.getModifiers()); Ctrl+Alt  //Ctrl, Shift, Alt, Ctrl+Alt  linea3 = "Teclas modificadoras oprimidas: " + linea3 = "  + "") ) ? "ninguna" : "ninguna"  : temp); (temp.equals("" (temp.equals( areaTexto.setText( .setText(linea1 linea1 +  + "\n" "\n" +  + linea2 + linea2 + "\n" "\n" +  + linea3 linea3 +  + "\n"); "\n"); areaTexto

}  public static  void    main(String args[])  main(String

{ KeyListenerTest1 aplicacion = new  KeyListenerTest1(); aplicacion.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); }//end main()  main()  }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷󰀵

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import  java.awt.*; import   java.awt.event.*; import  javax.swing.*;

// Se elimino public class KeyListenerTest1 extends JFrame implements KeyListener {    public class KeyListenerTest2  extends JFrame { linea1  = "", "", linea2 linea2 =  = "", "", linea3 = linea3 = "" ""; ;  private String linea1 = areaTexto ;  private JTextArea areaTexto;

// configurar GUI  GUI   public  KeyListenerTest2()

{ tecla"); ); super("Demostración de eventos de pulsación de tecla" // establecer objeto JTextArea  JTextArea  areaTexto  = new JTextArea(10, 15); areaTexto = areaTexto.setText( teclado..."  ); areaTexto .setText( "Oprima cualquier tecla en el teclado..." ); //areaTexto.setEnabled( false );  );  areaTexto.setDisabledTextColor( Color.blue ); areaTexto .setDisabledTextColor( areaTexto );  ); getContentPane().add( areaTexto ManejadorTeclas teclas = new  ManejadorTeclas(); //addKeyListener(this); // eventos de teclas para el JTextArea  JTextArea   areaTexto areaTexto.addKeyListener(teclas); .addKeyListener(teclas); // eventos de teclas para el JTextArea  JTextArea   setSize(400,100); setVisible( true ); } // fin del constructor constructor    {// manejar evento de pulsación de  private class  ManejadorTeclas implements  KeyListener {//

cualquier tecla  tecla  tecla    // manejar evento de pulsación de cualquier tecla   keyPressed(KeyEvent evento)  keyPressed(KeyEvent  public void  { /*getKeyText(int keyCode)=>Returns a String describing the keyCode,  keyCode,   such as "HOME", "F1" or "A". "A".    * * getKeyCode() getKeyCode()=>Returns =>Returns the integer intege r (ASCII)keyCode associated as sociated with the key in this th is *event. *getKeyChar()=> Returns the character associated with the key in this event.*/  event.*/  //System.out.println(evento.getKeyChar());*/   linea1 = "Se oprimió tecla: " linea1 = " +  + evento.getKeyText (evento.getKeyCode()); establecerLineas2y3(evento); } // manejar evento de liberación de cualquier tecla     keyReleased(KeyEvent evento)  keyReleased(KeyEvent  public void  { linea1 linea1 =  = "Se soltó tecla: " " +  + evento.getKeyText (evento.getKeyCode()); establecerLineas2y3(evento); } acción    // manejar evento de pulsación de una tecla de acción   keyTyped(KeyEvent evento)  keyTyped(KeyEvent  public void  { // no hay nada nada    } salida   // establecer segunda y tercera líneas de salida    establecerLineas2y3(KeyEvent evento)  private void  {

//F1-F12, ImpPant, Inicio, Supr, etc..  etc..   linea2 =  = "Esta tecla " " +  + (evento.isActionKey() ? "" : "" : "no ") ") + linea2 "es una tecla de acción"; acción"; String temp = evento.getKeyModifiersText (evento.getModifiers()); //Ctrl, Shift, Alt, Ctrl+Alt Ctrl+Alt    linea3 = " +  + linea3 = "Teclas modificadoras oprimidas: " (temp.equals("" (temp.equals( "") ) ? "ninguna" : "ninguna"  : temp);

areaTexto areaTexto.setText( .setText(linea1 linea1 +  + "\n" + "\n" + linea2 + linea2 + "\n" "\n" +  + linea3 + linea3 + "\n" "\n"); ); } }//end manejador  manejador 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧  main( String args[] )  main(  public static  void  { KeyListenerTest2 aplicacion = new  KeyListenerTest2(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  ); }// end main()  main()  }///:~

import  java.awt.*; import   java.awt.event.*; import  javax.swing.*;

//Se elimino public class KeyListenerTest1 extends JFrame implements KeyListener {    public class KeyListenerTest3  extends JFrame { linea1  = "", "", linea2 linea2 =  = "", "", linea3 = linea3 = "" ""; ;  private String linea1 = areaTexto ;  private JTextArea areaTexto;  public  KeyListenerTest3()

{ tecla"); ); super("Demostración de eventos de pulsación de tecla" // establecer objeto JTextArea  JTextArea  areaTexto = areaTexto  = new  JTextArea(10,15); areaTexto.setText( areaTexto .setText( "Oprima cualquier tecla en el teclado..." ); teclado..."  ); areaTexto areaTexto.setDisabledTextColor(Color. .setDisabledTextColor(Color. blue); getContentPane().add( areaTexto); areaTexto); //ManejadorTeclas teclas = new ManejadorTeclas();  ManejadorTeclas(); 

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷󰀶

//addKeyListener(this); // eventos de teclas para el JTextArea  JTextArea   areaTexto areaTexto.addKeyListener( .addKeyListener( new KeyListener() { // manejar evento de pulsación de cualquier tecla  tecla     keyPressed(KeyEvent evento)  keyPressed(KeyEvent  public void  { /*getKeyText(int keyCode)=>Returns a String describing the keyCode,  keyCode,   * such as "HOME", "F1" or "A". "A".    * getKeyCode() getKeyCode()=>Returns =>Returns the integer intege r (ASCII)keyCode associated as sociated with the key in this th is * event. *getKeyChar()=> Returns the character associated with the key in this event.*/  event.*/  //System.out.println(evento.getKeyChar());*/   linea1 = "Se oprimió tecla: " linea1 = " +  + evento.getKeyText (evento.getKeyCode()); establecerLineas2y3(evento); } // manejar evento de liberación de cualquier tecla    public void    keyReleased(KeyEvent evento)  keyReleased(KeyEvent

{ linea1 linea1 =  = "Se soltó tecla: " " +  + evento.getKeyText (evento.getKeyCode()); establecerLineas2y3(evento); } // manejar evento de pulsación de una tecla de acción acción      keyTyped(KeyEvent evento)  keyTyped(KeyEvent  public void  { nada    // no hay nada } // establecer segunda y tercera líneas de salida  salida     establecerLineas2y3(KeyEvent evento)  private void  {

//F1-F12, ImpPant, Inicio, Supr, etc..  etc..   linea2 linea2 =  = "Esta tecla " " +  + (evento.isActionKey() ? "" : "" : "no ") ") + "es una tecla de acción"; acción"; String temp = evento.getKeyModifiersText (evento.getModifiers()); //Ctrl, Shift, Alt, Ctrl+Alt Ctrl+Alt    linea3 = " +  + linea3 = "Teclas modificadoras oprimidas: " (temp.equals("" (temp.equals( "") ) ? "ninguna" : "ninguna"  : temp); areaTexto areaTexto.setText( .setText(linea1 linea1 +  + "\n" + "\n" + linea2 + linea2 + "\n" "\n" +  + linea3 + linea3 + "\n" "\n"); );

}

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷󰀷

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 }); setSize(400, 100 ); setVisible( true ); constructor    } // fin del constructor  main( String args[] )  main(  public static void  { KeyListenerTest3 aplicacion = new  KeyListenerTest3(); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  ); }// end main()  main()  } ///:~

CLASE Color Red,, Green, Green, La clase  java.awt.Color encapsula colores utilizando el formato RGB  (Red Blue). Las componentes de cada color primario en el color resultante se expresan con Blue). números enteros entre 0 y 255, siendo 0 la intensidad mínima de ese color y 255 la máxima. En la clase Color existen constantes para colores predeterminados de uso frecuente: black , white , green , blue , red , yellow , magenta , cyan , orange , pink , gray , darkGray , lightGray .

Se puede construir mediante un valor RGB: Color amarillo = new Color(255,255,0); O utilizar colores predefinidos mediante constantes: Color amarillo = Color.YELLOW; Soporta transparencias (alpha) mediante un valor entre 0.0 y 1.0 La Tabla muestra algunos métodos de la clase Color .

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷󰀸

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import javax.swing.*;  public class ColorTest {  main(String[] args) {  main(String[]  public static void  JFrame f=new JFrame();

); f.setTitle( "Colores"); f.setTitle("Colores" f.setSize(200,150); f.getContentPane().setLayout( new FlowLayout()); JLabel JLabel JLabel JLabel

 JLabel("Hola "Hola etiqueta1=new JLabel(  JLabel("Hola "Hola etiqueta2=new JLabel( etiqueta3=new JLabel(  JLabel("Hola "Hola etiqueta4=new JLabel(  JLabel("Hola "Hola

JLabel JLabel JLabel JLabel JLabel JLabel

 JLabel("Hola "Hola "); etiqueta5= etiqueta6=new new JLabel(  JLabel("Hola  JLabel( "Hola a a Todos Todos"); Todos"| );"); etiqueta7=new JLabel(  JLabel("Hola "Hola a Todos | "); ");  JLabel("Hola "Hola a Todos"); Todos"); etiqueta8=new JLabel( etiqueta9=new JLabel(  JLabel("Hola "Hola a Todos | "); "); etiqueta10=new JLabel(  JLabel("Hola "Hola a Todos" Todos"); );

f.getContentPane().add(etiqueta1); f.getContentPane().add(etiqueta2); f.getContentPane().add(etiqueta3);

a a a a

Todos | "); "); Todos"); Todos"); Todos | "); "); Todos"); Todos");

f.getContentPane().add(etiqueta4); f.getContentPane().add(etiqueta5); f.getContentPane().add(etiqueta6); f.getContentPane().add(etiqueta7); f.getContentPane().add(etiqueta8); f.getContentPane().add(etiqueta9); f.getContentPane().add(etiqueta10); etiqueta1.setForeground( new Color(255,255,0)); ); ; etiqueta2.setForeground(Color. YELLOW ) etiqueta3.setForeground( new Color(255,255,255)); ); ; etiqueta4.setForeground(Color. WHITE ) etiqueta5.setForeground( new Color(0,0,0)); etiqueta6.setForeground(Color. BLACK ) ); ; etiqueta7.setForeground(Color. RED); etiqueta8.setForeground(Color. BLUE ) ); ; ); ; etiqueta9.setForeground(Color. GREEN ) etiqueta10.setForeground(Color. GRAY ) ); ; f.setVisible( true); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ) ); ; main()    }// end main() }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀷󰀹

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

CLASE Font  Cada tipo de letra está representado por un objeto de la clase Font Font.. Las clases  y Graphics  disponen de métodos setFont()  y getFont() Component y Component Graphics disponen setFont() y getFont().. El constructor de Font tiene la forma: Font(String name, int style, int size) Donde el style style se  se puede definir con las constantes: Font.PLAIN,, Font.BOLD y Font.ITALIC Font.PLAIN Estas constantes se pueden combinar en la forma: Font.BOLD | Font.ITALIC. Font.ITALIC. La clase Font   tiene tres variables protected , llamadas name Font name,, style style   y size size.. Además tiene tres constantes enteras: PLAIN  e ITALIC PLAIN,, BOLD BOLD e ITALIC.. Esta clase dispone de los métodos: String getName(), int getStyle(), int getSize(), boolean isPlain(), boolean isBold()  isBold()   y boolean isItalic(), isItalic(), cuyo significado es inmediato. Para mayor portabilidad se recomienda utilizar nombres lógicos de fonts, tales como Serif Serif   (Times New Roman), SansSerif (Arial) y Monospaced Monospaced (Courier).  (Courier). import java.awt.*; import javax.swing.*;  public class FontTest {

 public static void   main(String[] args){  main(String[] JFrame f = new JFrame();

); f.setTitle("FontTest"); f.setTitle("FontTest" f.setSize(180,200); f.setLayout(new FlowLayout()); JLabel l1 = new JLabel(  JLabel("Serif" "Serif"); );  Font("Serif" "Serif", , Font.PLAIN , 20)); l1.setFont(new Font(  JLabel("SansSerif" "SansSerif"); ); JLabel l2 = new JLabel( l2.setFont(new Font(  Font("SansSerif" "SansSerif", , Font.PLAIN , 20));  JLabel("Monospaced" "Monospaced"); ); JLabel l3 = new JLabel( l3.setFont(new Font(  Font("Monospaced" "Monospaced", , Font.ITALIC , 20));  JLabel("Dialog" "Dialog"); ); JLabel l4 = new JLabel( l4.setFont(new Font(  Font("Dialog" "Dialog", , Font.BOLD,20));  JLabel("DialogInput" "DialogInput"); ); JLabel l5 = new JLabel( l5.setFont(new Font(  Font("DialogInput" "DialogInput", , Font.BOLD | Font.ITALIC , 20)); f.add(l1); f.add(l2); f.add(l3); f.add(l4); f.add(l5); f.setVisible(true); ); ; f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ) }// end main() main()    }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸󰀰

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

CLASE MouseAdapter Los eventos de Mouse nos cuentan cuando el usuario usa el ratón (o un dispositivo de entrada similar) para interactuar con un componente. Los eventos Mouse ocurren cuando el cursor entra o sale del área de pantalla de un componente, o cuando el usuario pulsa o libera el botón del ratón. Como seguir la pista del movimiento del ratón

significa mas sobrecarga del sistema que seguir la pista de los eventos de ratón, los eventos MouseMotion MouseMotion   se han separado en otro tipo de oyente (MouseMotionListener MouseMotionListener). ). El interface MouseListener MouseListener   y su correspondiente clase adaptadora, MouseAdapter MouseAdapter,, contienen estos métodos: void mouseClicked(MouseEvent): mouseClicked(MouseEvent): Llamado justo después de que el usario pulse sobre el componente escuchado. void mouseEntered(MouseEvent): mouseEntered(MouseEvent): Llamado justo después de que el cursor entre en los límites del componente escuchado. void mouseExited(MouseEvent): mouseExited(MouseEvent): Llamado justo después de que el cursor salga de los límites del componente escuchado. void mousePressed(MouseEvent): mousePressed(MouseEvent): Llamado justo después de que el usuario pulse un botón del ratón mientras el cursor está sobre el componente escuchado. void mouseReleased(MouseEvent): mouseReleased(MouseEvent): Llamado justo después de que el usuario libere un botón del ratón después de una pulsación sobre el componente esuchado.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸󰀱

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import java.awt.event.*; import javax.swing.*;  public class   MouseAdapterTest MouseAdapterTest  extends JFrame { xPos, yPos yPos; ;  private int xPos,  private JLabel etiqueta; etiqueta;  public MouseAdapterTest(){ ratón"  ); super( "Clics y botones del ratón" );

Container contenedor= getContentPane(); addMouseListener( new ManejadorClicsRaton()); etiqueta etiqueta= = new JLabel(  JLabel("" ""); ); etiqueta); ); contenedor.add(etiqueta contenedor.add( setSize(450,300); setVisible(true); constructor    }// fin del constructor // clase interna para manejar eventos de ratón ratón     private class ManejadorClicsRaton extends MouseAdapter {

// manejar evento de clic del ratón y determinar cuál botón se oprimió  oprimió     mouseClicked(MouseEvent evento){  mouseClicked(MouseEvent  public void  xPos = xPos = evento.getX(); yPos yPos =  = evento.getY();

String titulo = "Se hizo clic " " +  + evento.getClickCount() + " Veces" Veces" ;  ; [" +  + xPos + xPos + ", " " +  + yPos + yPos + "]" "]"; ; String titulo2 = "Se hizo clic en: [" if (evento.isMetaDown())  (evento.isMetaDown())// // botón derecho del ratón

titulo += " con el botón derecho del ratón" ratón"; ;  (evento.isAltDown())// // botón de en medio del ratón ratón    else if (evento.isAltDown()) ratón"; ; titulo += "izquierdo con el botón central del ratón" else  // botón del ratón titulo += " con el botón izquierdo del ratón";  ratón";   etiqueta etiqueta.setText(titulo2); .setText(titulo2); setTitle( titulo ); // establecer barra de título de la ventana  ventana   } // fin del método mouseClicked mouseClicked    } // fin de la clase interna privada ManejadorClicsRaton  ManejadorClicsRaton   main(String args[])  main(String  public static void  { MouseAdapterTest aplicacion = new MouseAdapterTest();  ); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  ); }// end main() main()    }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸󰀲

CLASE ImageIcon Java permite incorporar imágenes de tipo gif gif,, jpg jpg   y png png   definidas en archivos. Se

dispone para ello de la clase javax.swing.ImageIcon javax.swing.ImageIcon.. Algunos componentes Swing, como JLabel y JLabel  y JButton JButton, , pueden decorados un icono al-- una imagenIcon de .tamaño fijo. En Swing, un icono es unserobjeto que con se adhiere interface Icon. Swing proporciona una implementación particularmente útil del interface Icon Icon..

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import javax.swing.*;  public class ImageIconTest  {  public static void   main(String[] args) {  main(String[] JFrame f=new JFrame();

); f.setTitle("ImageIconTest"); f.setTitle("ImageIconTest" f.setSize(250,100); f.getContentPane().setLayout( new FlowLayout()); JLabel etiqueta1=new JLabel(); PNG    // soporta formatos GIF, JPG y PNG  ImageIcon("save.gif" "save.gif")); )); etiqueta1.setIcon(new ImageIcon( JLabel etiqueta2=new JLabel(); etiqueta2.setIcon(new ImageIcon(  ImageIcon("open.gif" "open.gif")); )); JButton boton1=new JButton(  JButton("Copiar" "Copiar"); ); boton1.setIcon(new ImageIcon(  ImageIcon("copy.gif" "copy.gif")); ));

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸󰀳

 JButton("Pegar" "Pegar"); ); JButton boton2=new JButton( boton2.setIcon(new ImageIcon(  ImageIcon("paste.gif" "paste.gif")); )); f.getContentPane().add(etiqueta1); f.getContentPane().add(etiqueta2); f.getContentPane().add(boton1); f.getContentPane().add(boton2); f.setVisible(true); ); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); }// end main()  main()  }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸󰀴

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

CLASE Graphics La clase Graphics:   Sirve para dibujar (se suele u usar sar con los canvas).   Todos los componentes AWT son dibujados en pantalla a través del método de la clase java.awt.Component java.awt.Component::   public void paint(Graphics g);   La clase Graphics permite:   Trabajar con primitivas gráficas: figuras, colores, textos, …   Trabajar con imágenes: GIF y JPEG. que ue sea repint repintado ado mediante el el método:   Un componente puede pedir q 

  public void repaint();   Dibujando figuras:  Líneas: drawLine().   Rectángulos: drawRect(), fillRect(), clearRect().   Rectángulos 3D: draw3DRect(), fill3DRect().   Rectáng. redondeados: drawRoundRect(), fillRoundRect().   Óvalos: drawOval(), fillOval(). drawArc, rawArc, fifillArc(). llArc().   Arcos: d



  Polígonos:

ddrawPolygon(), rawPolygon(), fil fillPolygon(). lPolygon().

  Escribiendo texto:   drawBytes(), drawChars(), drawString().



En esta parte final del AWT se van a describir, también muy sucintamente, algunas clases y métodos para realizar dibujos y añadir texto e imágenes a la interface gráfica Component de usuario. La clase tiene. Cuando tres métodos muy importantes relacionados gráficos: paint()  , repaint() y update()  el usuario llama al método repaint()con de un componente, el AWT llama al método update() de ese componente, que por defecto llama al método paint() . Método paint(Graphics g)

El método paint() está definido en la clase Component , pero ese método no hace nada y hay que redefinirlo en una de sus clases derivadas. El programador no tiene que preocuparse de llamar a este método: el sistema operativo lo llama al dibujar por primera vez una ventana, y luego lo vuelve a llamar cada vez que entiende que la ventana o una parte de la ventana debe ser redibujada (por ejemplo, por haber estado tapada por otra ventana y quedar que dar de nuevo a la vista). Método update(Graphics g)

El método update() hace dos cosas: primero re-dibuja la ventana con el color de fondo y luego llama al método paint() . Este método también es llamado por p or el AWT, y también puede ser llamado por el programador, quizás porque ha realizado algún cambio en la ventana y necesita que se dibuje de nuevo.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸󰀵

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 La propia estructura de este método -el comenzar pintando de nuevo con el color de fondohace que se produzca parpadeo (flicker ) en las animaciones. Una de las formas de evitar este efecto es redefinir este método de una forma diferente, cambiando de una imagen a otra sólo lo que haya que cambiar, en vez de re-dibujar todo otra vez desde el principio. Este método no siempre proporciona los resultados buscados y hay que recurrrir al método del doble buffer . Método repaint()

Este es el método que con más frecuencia es llamado por el programador. El método repaint() llama “lo antes posible” al método update() del componente. Se puede también especificar un número de milisegundos para que el método update() se llame transcurrido ese tiempo. El método repaint() tiene las cuatro formas siguientes: repaint() repaint(long time) repaint(int x, int y, int w, int h) repaint(long time, int x, int y, int w, int h)

Las formas tercera y cuarta permiten definir una zona rectangular de la ventana a la

que aplicar el método.  El único argumento de los métodos update() y paint() es un objeto de esta clase. La clase Graphics dispone de métodos para soportar dos tipos de gráficos: 1. Dibujo de primitivas gráficas (texto , líneas , círculos , rectángulos , polígonos , …). 2. Presentación de imágenes en formatos *.gif y *.jpeg . Además, la clase Graphics mantiene un contexto gráfico : un área de dibujo actual, un color de dibujo del background y otro del foreground, un font con todas sus propiedades, etc. La siguiente Figura muestra el sistema de coordenadas utilizado en Java . Como es habitual en Informática, los ejes están situados en la esquina superior izquierda, con la orientación indicada en la Figura (eje de coordenadas descendente). Las coordenadas se miden siempre en pixels . 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸󰀶

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

Ejemplo: g.fillRect(25,25,100,20);

Java dispone de métodos para realizar dibujos sencillos, llamados a veces “primitivas” gráficas. Como se ha dicho, las coordenadas se miden en pixels , empezando a contar

desde cero. La clase Graphics dispone de los métodos para primitivas gráficas reseñados en la siguiente Tabla. Excepto los polígonos y las líneas, todas las formas geométricas se determinan por el rectángulo que las comprende, cuyas dimensiones son w y h . Los polígonos admiten un argumento de la clase java.awt.Polygon .

La clase Graphics permite “dibujar” texto, como alternativa al texto mostrado en los componentes JLabel , JTextField y JTextArea . Los métodos de esta clase para dibujar texto son los siguientes: drawBytes(byte data[], int offset, int length, int x, int y); 󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸󰀷

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 drawChars(char data[], int offset, int length, int x, int y); drawString(String str, int x, int y); En estos métodos, los argumentos x e y representan las coordenadas de la línea base .  import java.awt.*; import javax.swing.*;  public class GraphicsTest1  extends JFrame {  public GraphicsTest1()

{ super( "Uso de los colores" ); colores" );

setSize(400,130); setVisible(true); } // dibujar rectángulos y objetos String en distintos colores    paint(Graphics g)  paint(Graphics  public void  { // llamar al método paint de la superclase  superclase   super.paint( g );

// establecer nuevo color de dibujo utilizando enteros  enteros  g.setColor(new Color(255,0,0)); g.fillRect(25,25,100,20); //(columna,Renglón,ancho,alto);   g.drawString("RGB g.drawString( " + g.getColor(),130,40); "RGB actual: " + //(String,columna,renglon)   //(String,columna,renglon)  // establecer nuevo color de dibujo utilizando valores float   new Color(0.0f,1.0f,0.0f)); g.setColor( g.fillRect(25,50,100,20); "RGB actual: " + g.drawString("RGB g.drawString( " + g.getColor(),130,65);

estáticos  // establecer nuevo color de dibujo utilizando objetos Color estáticos  ); ; g.setColor(Color. BLUE ) g.fillRect(25,75,100,20); "RGB actual: " + g.drawString("RGB g.drawString( " + g.getColor(),130,90); individuales  // mostrar valores RGB individuales  Color color = Color.MAGENTA; g.setColor(color); g.fillRect(25,100,100,20); g.drawString("Valores g.drawString( " + color.getRed() + ", " + "Valores RGB: " + " + " +  + color.getBlue(),130,115); color.getGreen() + ", " } // fin del método paint  paint    public static void   main( String args[] )  main( {

GraphicsTest1 aplicacion = new GraphicsTest1();  ); aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE  ); }// end main() main()    }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

import java.awt.*; import java.awt.event.*; import javax.swing.*;  public class   MouseAdapterTest2 MouseAdapterTest2  extends JFrame { xPos, yPos yPos; ;  private int xPos,

//private JLabel etiqueta; etiqueta;  public MouseAdapterTest2(){ ratón"); ); super("Clics y botones del ratón"

//Container contenedor= contenedor= getContentPane(); addMouseListener( new ManejadorClicsRaton()); //etiqueta = new JLabel(""); //etiqueta= //contenedor.add(etiqueta ); //contenedor.add(etiqueta);

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸󰀸

setSize(450,150); setVisible(true); constructor    }// fin del constructor // dibujar objeto String en la ubicación donde se hizo clic con el ratón  ratón    paint(Graphics g){  paint(Graphics  public void  // llamar al método paint de la superclase  superclase   super.paint(g); "Se hizo clic en: [" + xPos + ", " + " + yPos yPos +  + "]", "]",xPos, xPos,yPos yPos); ); g.drawString("Se g.drawString( [" + xPos + } ratón   // clase interna para manejar eventos de ratón   private class ManejadorClicsRaton extends MouseAdapter { // manejar evento de clic del ratón y determinar cuál botón se oprimió  oprimió     mouseClicked(MouseEvent evento){  mouseClicked(MouseEvent  public void  xPos = xPos = evento.getX(); yPos =  = evento.getY(); yPos String titulo = "Se hizo clic " " +  + evento.getClickCount() + " Veces" Veces" ;  ; //String titulo2 = "Se hizo clic en: [" + xPos + ", " + yPos + "]"; "]";     (evento.isMetaDown())// // botón derecho del ratón if (evento.isMetaDown()) titulo += " con el botón derecho del ratón" ratón"; ;  (evento.isAltDown())// // botón de en medio del ratón ratón    else if (evento.isAltDown()) titulo += " con el botón central del ratón" ratón"; ; else // botón izquierdo del ratón

titulo += " con el botón izquierdo del ratón" ratón"; ; //etiqueta.setText(titulo2);  //etiqueta.setText(titulo2);   ventana    setTitle(titulo); // establecer barra de título de la ventana actual    repaint(); //repinta el componente actual } // fin del método mouseClicked mouseClicked    } // fin de la clase interna privada ManejadorClicsRaton  ManejadorClicsRaton 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀸󰀹

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧  main(String args[])  main(String  public static void  { MouseAdapterTest2 aplicacion = new MouseAdapterTest2(); ); ; aplicacion.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ) main()    }// end main() }///:~

Observar que cada vez que se dá clic en un a nueva posición del JFrame JFrame se  se repinta el mensaje de las coordenadas.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.*; import javax.swing.*;  public class GraphicsTest2  extends JFrame{  public GraphicsTest2(){

setTitle( "GraphicsTest"); setTitle("GraphicsTest" ); //setBackground(Color.LIGHT_GRAY); setSize(300,150); setVisible( true); }  paint(Graphics g) {  paint(Graphics  public void  superclase   // llamar al método paint de la superclase  super.paint(g); //TODOS SOBRE EL RENGLON 35 g.setColor(Color. BLUE ) ); ; g.drawLine(15,35,65,65); g.drawRect(70,35,50,30); g.drawRoundRect(125,35,50,30,10,10); g.drawOval(180,35,50,30); g.drawArc(235,35,50,30,25,200);

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹󰀰

int[] x = {15,65,15,65}; int[] y = {90,90,120,120};

//TODOS SOBRE EL RENGLON 90 length); ); g.drawPolygon(x,y,x.length g.drawPolygon(x,y,x. g.setColor(Color. RED); g.fillRect(70,90,50,30); g.fillRoundRect(125,90,50,30,10,10); g.fillOval(180,90,50,30); g.fillArc(235,90,50,30,25,200); ); ; g.setColor(Color. BLACK ) g.setFont( new Font(  Font("SansSerif" "SansSerif",Font. ,Font.PLAIN ,9)); ,9)); //TODOS LOS MENSAJES EL RENGLON 80 g.drawString("Línea" g.drawString( "Línea",30,80); ,30,80); "Rectángulos",95,80); ,95,80); g.drawString("Rectángulos" g.drawString( g.drawString("Óvalo" g.drawString( "Óvalo",192,80); ,192,80); "Arco",250,80); ,250,80); g.drawString("Arco" g.drawString( //TODOS LOS MENSAJES EL RENGLON 135 "Polígono",22,135); ,22,135); g.drawString("Polígono" g.drawString( g.drawString("Rectángulos" g.drawString( "Rectángulos",95,135); ,95,135); "Óvalo",192,135); ,192,135); g.drawString("Óvalo" g.drawString( "Arco",250,135); ,250,135); g.drawString("Arco" g.drawString( }// end paint() paint()     main(String[] args){  main(String[]  public static void  GraphicsTest2 aplicacion= new GraphicsTest2(); ); ; aplicacion.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ) }// end main() main()    }///:~ 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹󰀱

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

CONFIGURANDO EL "Look & Feel"  DE  DE UNA APLICACIÓN

Swing permite cambiar dinámicamente el aspecto y la forma de interacción de una aplicación, por ejemplo el siguiente código modifica mo difica el Look & Feel al estilo Java: J ava: visual   // cambiar la apariencia visual  try {

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel" "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); ); //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");  //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 

//UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");  //UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");  SwingUtilities.updateComponentTreeUI(f); } // procesar problemas al cambiar la apariencia visual  visual  catch ( Exception excepcion ) { excepcion.printStackTrace(); }

Existen los siguientes look look & feelLook & Feel:   Java   CDE/Motif look & feel look & feel   Windows look UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.Windows LookAndFeel"); LookAndFeel" ); 

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹󰀲

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel "); 

UIManager.setLookAndFeel ("com.sun.java.swing.plaf.motif.MotifLookAndFeel" "com.sun.java.swing.plaf.motif.MotifLookAndFeel"); );

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹󰀳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import javax.swing.*;  public class LookAndFeelJMenuBarTest  {  main(String[] args) {  main(String[]  public static void  JFrame f=new JFrame();

f.setTitle("JMenuBarTest" f.setTitle( "JMenuBarTest"); ); f.setSize(250,150); visual    // cambiar la apariencia visual try { "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); ); UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"

//UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");   //UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");   } SwingUtilities. updateComponentTreeUI (f); // procesar problemas al cambiar la apariencia visual visual    catch ( Exception excepcion ) { excepcion.printStackTrace(); } JMenuBar menuBar=new JMenuBar(); f.setJMenuBar(menuBar); //Sets the menuBar for this frame.

/*NOMBRE DE LOS MENUS*/ MENUS*/    menú    // establecer menú Archivo y sus elementos de menú JMenu menu1=new JMenu(  JMenu("Menu1" "Menu1"); ); menu1.setMnemonic('1' menu1.setMnemonic('1'); ); JMenu menu2=new JMenu(  JMenu("Menu2" "Menu2"); ); menu2.setMnemonic('e' menu2.setMnemonic('e'); ); /*ELEMENTOS DEL MENU1*/  MENU1*/  JMenuItem menuItem1= new JMenuItem(  JMenuItem("Opcion1" "Opcion1"); ); new JMenuItem("Opcion2" JMenuItem menuItem2= "Opcion2"); ); menu1  JMenuItem( //SE AGREGAN AL menu1  menu1.add(menuItem1); menu1.add(menuItem2);

MENU2*/    /*ELEMENTOS DEL MENU2*/ JCheckBoxMenuItem jcbmenuItem1= new JCheckBoxMenuItem(  JCheckBoxMenuItem("Opcion1" "Opcion1"); );  JCheckBoxMenuItem("Opcion2" "Opcion2", ,true); JCheckBoxMenuItem jcbmenuItem2= new JCheckBoxMenuItem( JRadioButtonMenuItem jcbmenuItem3= new JRadioButtonMenuItem(  JRadioButtonMenuItem("Opcion3" "Opcion3", ,true);

//SE AGREGAN AL menu2  menu2  menu2.add(jcbmenuItem1); menu2.add(jcbmenuItem2); menu2.addSeparator(); //Agrega un separador menu2.add(jcbmenuItem3); MENUBAR*/   /*MENU 1 Y MENU2 SE AGREGAN AL MENUBAR*/  menuBar.add(menu1); menuBar.add(menu2); f.setVisible( true); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ) ); ; main()    }//end main() }///:~ ///:~   

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹󰀴

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import javax.swing.*;  public class LookAndFeelJMenuBarTest2  {  main(String[] args) {  main(String[]  public static void 

visual    // cambiar la apariencia visual try { //se debe de declarar antes de crear una instancia del contenedor   JFrame.setDefaultLookAndFeelDecorated (true); } // procesar problemas al cambiar la apariencia visual visual    catch ( Exception excepcion ) { excepcion.printStackTrace(); } JFrame f=new  JFrame(); f.setTitle("JMenuBarTest" f.setTitle( "JMenuBarTest"); ); f.setSize(250,150); JMenuBar menuBar=new JMenuBar(); f.setJMenuBar(menuBar); //Sets the menuBar for this frame. /*NOMBRE DE LOS MENUS*/ MENUS*/    menú    // establecer menú Archivo y sus elementos de menú

 JMenu("Menu1" "Menu1"); ); menu1.setMnemonic( menu1.setMnemonic('1' '1'); ); JMenu menu1=new JMenu(  JMenu("Menu2" "Menu2"); ); menu2.setMnemonic('e' menu2.setMnemonic('e'); ); JMenu menu2=new JMenu( MENU1*/  /*ELEMENTOS DEL MENU1*/   JMenuItem("Opcion1" "Opcion1"); ); JMenuItem menuItem1= new JMenuItem(  JMenuItem("Opcion2" "Opcion2"); ); JMenuItem menuItem2= new JMenuItem( menu1  //SE AGREGAN AL menu1  menu1.add(menuItem1); menu1.add(menuItem2); /*ELEMENTOS DEL MENU2*/ MENU2*/     JCheckBoxMenuItem("Opcion1" "Opcion1"); ); JCheckBoxMenuItem jcbmenuItem1= new JCheckBoxMenuItem( JCheckBoxMenuItem jcbmenuItem2= new JCheckBoxMenuItem(  JCheckBoxMenuItem("Opcion2" "Opcion2", ,true);  JRadioButtonMenuItem("Opcion3" "Opcion3", ,true); JRadioButtonMenuItem jcbmenuItem3= new JRadioButtonMenuItem(

menu2  //SE AGREGAN AL menu2  menu2.add(jcbmenuItem1); menu2.add(jcbmenuItem2); menu2.addSeparator(); //Agrega un separador menu2.add(jcbmenuItem3); MENUBAR*/   /*MENU 1 Y MENU2 SE AGREGAN AL MENUBAR*/  menuBar.add(menu1); menuBar.add(menu2); f.setVisible( true); f.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ); main()    }//end main() }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹󰀵

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import javax.swing.*; import java.awt.event.*; import java.awt.*;  public class LookAndFeelJMenuBarTest3  extends JFrame

{  public LookAndFeelJMenuBarTest3()

{ 1"); ); super("Ejemplo 1"  JButton("Mostrar "Mostrar dialogo" dialogo"); ); JButton boton = new JButton( boton.addActionListener( new ActionListener(){   actionPerformed(ActionEvent e){  actionPerformed(ActionEvent  public void  JOptionPane. showMessageDialog (null, "Y así- se ve un cuadro de dialogo de error", error" , "Mensaje" "Mensaje",JOptionPane. ,JOptionPane. ERROR_MESSAGE ) ); ; } }); getContentPane().add( new JLabel(  JLabel("Asi "Asi se ve un Frame"), Frame"), BorderLayout. NORTH ) ); ; getContentPane().add(boton); setSize(200,80); setVisible(true); }  main(String args[])  main(String  public static void 

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹󰀶

{ JFrame.setDefaultLookAndFeelDecorated (true); JDialog.setDefaultLookAndFeelDecorated (true); LookAndFeelJMenuBarTest3 ventana = new LookAndFeelJMenuBarTest3(); ); ; ventana.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE ) }// end main() main()    }///:~

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹󰀷

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧

APPLETS Un applet es un programa que se ejecuta mediante un navegador de Internet o con el programa herramienta del SDK appletviewer.exe . La clase Applet Applet   y JApplet JApplet   son contenedores visuales de estilo de los Frame Frame   y Panel Panel o  o los JFrame JFrame   y JPanel JPanel.. Existen dos implementaciones: Awt Awt y  y Swing Swing.. AWT: Se encuentra en el paquete java.applet.* AWT: java.applet.*,, por tanto, siempre que deseemos desarrollar un applet deberemos importar este paquete, se encuentra en el paquete java.applet.*.. Hereda de java.awt.Panel java.applet.* java.awt.Panel.. Se le aplican LayoutManagers y se le añaden componentes como ya hicierámos con los contenedores estándar AWT. Ocurre lo mismo con la gestión de eventos. Swing:: Se encuentra en el paquete javax.swing.* Swing javax.swing.*,, por tanto, siempre que deseemos desarrollar un applet deberemos importar este paquete. Hereda de java.applet.Applet java.applet.Applet.. Se le aplican LayoutManagers y se le añaden componentes como ya hicierámos con los contenedores estándar AWT. Ocurre lo mismo con la gestión de eventos.

Los applet tienen la ventaja de ejecutarse en Internet sobre el navegador en el equipo del cliente, pero los diseñadores de Java les colocaron algunas restricciones para evitar que estos dañen, roben información del sistema o inserten virus en las máquinas donde se ejecutan, entre ellas están:   No pueden leer o escribir en el sistema de archivos desde un navegador.   Solo tienen a acceso cceso al servidor definido dentro del applet en un programa que use



sockets.   Impedimento para ejecutar progr programas amas en el cliente. cliente.   Impedimento para cargar programas nativos incluidas las DLL. 

Ciclo de vida de un applet A diferencia de las aplicaciones Java convencionales, los Applets no tienen un método: public static void main(String[] args)  args)  para ejecutarse. Por el contrario tiene cinco métodos que el usuario puede sobreescribir para darle la funcionalidad requerida. Estos métodos siguen un ciclo de vida que se explica en el diagrama de abajo, estos métodos son: public void init(); public void start(); public void paint(Graphics g); public void stop(); public void destroy();

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹󰀸

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 public void init(): init(): Es el primer método que se ejecuta al cargar el applet y sólo se ejecuta una vez. Se debe utilizar para inicializar las variables. public void start(): start(): Se ejecuta después del init(). Permite reinicializar un applet después de que se haya parado, es decir, arranca el applet (reload, maximizar, etc…). El método start() start() se  se ejecuta cada vez que se muestra en pantalla el documento HTML que contiene el applet. Se suele usar us ar para arrancar procesos. public void paint(Graphics g):  g):  Se ejecuta cada vez que se debe volver a pintar o escribir la salida de un applet, es decir, d ecir, se refresca el applet. public void stop():Se stop(): se utiliza ejecutapara cuando abandona página se HTML contiene el applet. pararelelnavegador applet; para volverlo laa iniciar llamaque el método start() start().. Se suele usar para parar procesos. public void destroy(): se destroy(): se ejecuta cuando el entorno determina que el applet debe ser borrado completamente de la memoria o cerrar el navegador web. El método stop() stop()   siempre se ejecuta antes que el destroy. Solo se ejecuta una ve vezz en la vida del applet.

inic ial para ejecutar un applet es init() Ojo: En esta clase el método inicial Ojo: init()   cuando se omite se usa el método start() start(),, si también se omite se usa el método paint() paint()   (esto significa que no requiere de un método main() main()). ). En el ejemplo siguiente se muestra un applet llamado CicloVida CicloVida   que despliega una serie de mensajes en la consola y en el visualizador del appletviewer, el cual demuestra el ciclo de vida del applet. Ejecutarlo con AppletViewer par aver los llamados a la consola de salida. Eclpise los ejecuta automáticamente con dicho ejecutable.

󰁍󰀮󰁃󰀮 󰁅󰁭󰁭󰁡󰁮󰁵󰁥󰁬 󰁚󰁥󰁮󰃩󰁮 󰁒󰁩󰁶󰁥󰁲󰁡 󰁂󰁬󰁡󰁳

󰁐󰃡󰁧󰁩󰁮󰁡 󰀹󰀹

 

󰀱󰀲󰀮 󰁐󰁲󰁯󰁧󰁲󰁡󰁭󰁡󰁣󰁩󰃳󰁮 󰁇󰁲󰃡󰁦󰁩󰁣󰁡 󰁃󰁯󰁮 󰁓󰁷󰁩󰁮󰁧 import java.awt.Graphics; import javax.swing.JApplet;  public class   AppletCicloVida AppletCicloVida   extends  JApplet {  public AppletCicloVida(){ .println("El "El constructor se esta ejecutando...." ejecutando...."); ); System.out.println(

} /** /**   Método  Método init  init del  del applet.  applet.  Inicializa  Inicializa el  el applet. applet.   */ */     public void   init(){  init(){ System.out.println( .println("Este "Este es el método init().\n" init().\n"); ); } /**   Método  Método start.  start.  /**

Arranca Arranca   o comienza comienza   el el   applet  applet */  */ 

 public void   start(){  start(){ .println("Este "Este es el método start(). \n" \n"); ); System.out.println(

} /** Método  /**  Método paint.  paint. Dibuja  Dibuja o pinta  pinta el el   applet.  applet. */ */     public void   paint(Graphics g){  paint(Graphics "¡Hola , a todos mis pupilos!", g.drawString("¡Hola g.drawString( pupilos!" , 10,50); System.out.println( .println("El "El applet acaba de ser dibujado con paint() \n" \n"); ); }

/** Método  /**  Método stop. stop.    Para Para   el el   applet.  applet. */  */   stop(){  stop(){  public void  System.out.println( .println("Este "Este es el método stop(), para el applet. \n" \n"); ); } /**   Método  Método destroy. destroy.   Destructor Destructor   del  del applet.  applet. */ */    /**   destroy(){  destroy(){  public void  .println("Este "Este es el método destroy(), destruye el applet.\n" applet.\n"); ); System.out.println( } }///:~ AppletCicloVida.html CHECA EL CICLO EL CICLO DE VIDA DEL APPLET CODE= = "AppletCicloVida.class" "AppletCicloVida.class"    WIDTH="200" WIDTH="200"    HEIGHT="150" HEIGHT="150"> >
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF