Está en la página 1de 14

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I]

La Geb de Joaqun Programacin JAVA INTERFAZ GRFICO DE USUARIO

1 - Creacion de interfaces con JFC/Swing [I]


Referencia Bibliogrfica Autor Adolfo Aladr Garcia Publicado en la revista Solo Programadores num 117 Ejemplos copiados del libro Java 2 - Curso de Programacion Fco. Javier Ceballos. RA-MA

Sumario JFC/Swing representa el API de Java orientado a disear interfaces de usuario multiplataforma de forma rpida. Con JFC/Swing las aplicaciones y Applets Java pueden presentar un aspecto profesional y estndar, compitiendo as con las aplicaciones tradicionales que se ejecutan en entornas grficos. Indice de Contenidos 1 - Creacion de interfaces con JFC/Swing [I] 1.1 Introduccin a JFC/SWING 1.1.1 Componentes 1.1.2 Contenedores 1.1.3 Administradores de diseo 1.1.4 Eventos 1.2 Primera aplicacin completa 1.2.1 Esqueleto tpico de una aplicacin JFC/Swing 1.3 Segunda aplicacin completa 1.4 Conclusiones

1.1 Introduccin a JFC/SWING


La coleccin de utilidades que proporciona la plataforma Java para desarrollar interfaces de usuario es lo que se conoce como Swing. El paquete javax.swing contiene clases que se corresponden con elementos de interfaz tpicos tales como etiquetas, botones, barras de desplazamiento, reas de dibujo, etc. Al mismo tiempo Swing forma parte de otro software llamado JFC (Java Foundation Classes) que est formado por los siguientes elementos:

La Geb de Joaqun

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I] AWT (Abstract Window Toolkit), la coleccin primigenia para desarrollar interfaces de usuario. En la actualidad incluye tambin el API que proporciona soporte para operaciones del tipo "arrastrar y soltar". Java 2D, el conjunto de clases para realizar dibujos de alta calidad. Swing, la nueva coleccin de herramientas para desarrollar interfaces de usuario. Accesibility, los API que garantizan que una aplicacin Java es utilizable por personas con discapacidades. Internationalization, el soporte para crear aplicaciones vlidas para cualquier usuario del mundo, adaptndose a las particularidades del idioma y las convenciones culturales. Todos estos API permiten crear aplicaciones y Applets Java de forma estndar y que adems pueden ejecutarse en cualquier plataforma que disponga de la mquina virtual Java (Windows, Mac, Unix, Linux, etc.). Si bien JFC/Swing es una de las partes ms complicadas de Java, crear interfaces avanzadas es una tarea relativamente sencilla ya que se trabaja con componentes ya desarrollados (reas de texto, botones, etc.). La distribucin de los componentes dentro de los contenedores, as como su tamao y colocacin, es responsabilidad de los administradores de diseo. stos definen una estrategia de forma que garantizan que una interfaz se mostrar de forma correcta con independencia de la plataforma o incluso cuando el usuario modifique el tamao de la ventana.

1.1.1 Componentes
En Java un componente es el elemento ms importante de la interfaz de usuario. Todos los elementos que aparecen en una aplicacin Java son componentes. Por lo general a cada componente le corresponde una clase y todas estas clases se obtienen a partir de la clase abstracta javax.swing.JComponent. El listado 1 muestra la jerarqua de clases de la que depende la clase javax.swing.JLabel, que representa a una etiqueta, uno de los componentes ms tpicos y fundamentales. Listado 1
java.lang.Object I +--java.awt.Component I +--java.awt.Container I +--javax.swing.Jcomponent I +--javax.swing.Jlabel

Como se puede observar si se asciende por el rbol de clases llegamos hasta los paquetes de AWT, la coleccin de clases originaria para desarrollar interfaces. En cierto sentido se puede afirmar que JFC/Swing no es ms que una extensin de AWT Los mtodos y propiedades de un componente controlan la apariencia general de un objeto (visibilidad, tamao, ubicacin, colores, etc.). En el siguiente ejemplo se define un botn y posteriormente se modifica el tipo de letra y el color de la misma con los mtodos setFont y setForeground respectivamente: 2 La Geb de Joaqun

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I]
JButton btnAceptar = new JButton("Aceptar"); btnAceptar.setFont(new Font("Courrier New", Font.BOLD, 24)); btnAceptar.setForeground(new Color(255, 0, 0));

En realidad estos dos mtodos, as como muchos otros, se definen en la clase javax.swing.JComponent y todos los componentes los heredan. Los componentes tambin cuentan con mtodos y propiedades que sirven para gestionar el comportamiento del componente, o lo que es lo mismo, la interaccin con el usuario. Cuando un usuario realiza una accin se genera un evento que el componente recibe. Existen objetos que se encargan de gestionar esos eventos y que se han configurado como tales gestores desde el propio componente. El fragmento de cdigo del listado 2 define un botn, un componente de tipo JButton, y emplea el mtodo addActionListerner de la clase javax.swing.AbstractButton para registrar un objeto que implementa la interfaz java.awt.event.ActionListener y que es en ltima instancia el responsable de gestionar el evento que se produce cuando un usuario hace clic en el botn. Listado 2
// Crear un botn Jbutton botn = new JButton("Haga clic aqu"); // Establecer como tecla aceleradora la C. Entonces, pulsar Alt+C // ser equivalente ha hacer clic, sobre el botn. botn.setMnemonic(KeyEvent.VK_C); // Asignar al botn una descripcin abreviada botn.setToolTipText("botn de pulsacin"); // Permitir que el botn responda a los eventos de accin ActionListener al = new ActionListener() { // Este mtodo se ejecutar cuando se haga clic en "botn" public void actionPerformed(ActionEvent evento) { Object obj = evento.getSource(); if (obj == botn) mostrarMensaje(); } }; botn.addActionListener(al);

El objeto perteneciente a la clase java.awt.event.ActionEvent representa al evento. El mtodo getSource, que a su vez hereda de la clase java.util.EventObject, devuelve el objeto al que le lleg el evento, o si se prefiere, que desencaden el evento. Ms adelante se estudiarn los eventos dentro de la aplicacin y Applets JFC/Swing ya que se trata de un tema tan importante como confuso, al menos al principio, cuando se empiezan a desarrollar interfaces por primera vez.

1.1.2 Contenedores
Un contenedor es un tipo especial de componente que sirve para agrupar a otros componentes. Todo objeto perteneciente a la clase JComponent puede ser un contenedor tal y como muestra la herencia de clases del listado 3. La Geb de Joaqun 3

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I] Listado 3
java.lang.Object I +--java.awt.Component I +--java.awt.Container I +--javax.swing.Jcomponent

Los contenedores clsicos se corresponden con las clases javax.swing.Jframe, javax.swing.JPanel y javax.swing.JApplet. Un JFrame es una ventana de alto nivel. Un JPanel es un contenedor genrico que sirve para agrupar componentes. Una interfaz puede tener varios contenedores de tipo JPanel que a su vez pueden agrupar contenedores JPanel, todo dentro de una ventana, tpicamente un contenedor JFrame. Por ltimo. un contenedor JApplet se emplea para crear Applets Java. La clase java.awt.Container contiene varios mtodos add. Todo ellos sirven para aadir elementos al contenedor. De esta forma los contenedores mantienen una lista de los componentes que agrupan. En el ejemplo del listado 4 se define un contenedor de tipo JPane que agrupa una coleccin de botones Listado 4
// Crear un panel para colocar los controles JPanel panel = new JPanel(); // Introducimos un borde sin pintar alrededor de los controles: // createEmptyBorder(top, left, bottom, right) panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); // Establecer un administrador de diseo de cuadrcula panel.setLayout(new GridLayout(0, 1)); // Los controles se aaden en columna (filas = 0) // Se aaden na etiqueta y un boton definidos previamente panel.add(etiqueta); panel.add(botn); // Aadir los componentes al contenedor de la aplicacin // ------------------------------------------------// Ayuda sobre getContentPane // public Container getContentPane() // Returns the contentPane object for this frame. // ------------------------------------------------getContentPane().add(panel, BorderLayout.CENTER); // Permitir que la ventana de la aplicacin responda a los // eventos de ventana (p.e. cerrar la ventana) addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent evento) { cerrarVentana(); // funcion que se encarga de cerrar la ventana // Puedes verla en el ejmplo completo } } );

La Geb de Joaqun

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I]

1.1.3 Administradores de diseo


Los administradores de diseo son los responsables de la presentacin (tamao y ubicacin) de los componentes que se agrupan dentro de un mismo contenedor. Todos los contenedores tienen un administrador de diseo por defecto. El mtodo getLayout definido en la clase java.awt.Container devuelve el objeto correspondiente con el administrador de diseo. Asimismo el mtodo setLayout permite asignar un nuevo administrador de diseo.
FlowLayout

Por ejemplo, el administrador de diseo que emplea el componente JPanel por defecto es el que se corresponde con la clase java.awt.FlowLayout ste intenta colocar los objetos de izquierda a derecha y de arriba abajo dentro del contenedor, tratando adems de respetar para todos ellos el tamao preferido. Por lo tanto, en el ejemplo del apartado anterior los botones se presentan uno seguido detrs de otro, de izquierda a derecha y de arriba abajo, y el tamao de los mismos trata de ser simplemente el que ocupa el texto de su etiqueta, es decir, el preferido o el natural, si se prefiere. Ahora bien, se puede modificar el administrador de diseo tal y como se muestra a continuacin:
jPanel MijPanel = new JPanel(); BoxLayout MiboxLayout = new BoxLayout (MijPanel, BoxLayout.Y_AXIS); MijPanel.setLayout(MiboxLayout); BoxLayout

El administrador javax.swing.BoxLayout agrupa los elementos entorno a un eje (horizontal o vertical). Como consecuencia del cambio anterior los botones apareceran uno debajo de otro siguiendo un eje vertical.

1.1.4 Eventos
Un evento es lo que sucede cuando, por ejemplo, un usuario lleva a cabo cualquier accin en la interfaz (hacer clic en un botn, seleccionar un elemento de una lista, escribir en un campo de texto, etc.). Los eventos se generan desde un componente y son enviados a uno o ms gestores de evento que son los responsables ltimos de su tratamiento. Las clases correspondientes a los distintos eventos que pueden darse en una interfaz extienden a la clase java.util.EventObject (vase el listado 5). Listado 5
java.lang.Object I +-- java.util.EventObject I +-- java.awt.AWTEvent I +-- java.awt.event.ActionEvent

La Geb de Joaqun

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I]
java.lang.Object I +-- java.util.EventObject I +-- java.awt.AWTEvent I +-- java.awt.event.ComponentEvent I +-- java.awt.event.InputEvent I +-- java.awt.event.MouseEvent

Las clases java.awt.eventActionEvent y java.awt.eventMouseEvent se corresponden con dos de los eventos ms comunes en todas las interfaces. La primera representa una accin llevaba a cabo por el usuario, como por ejemplo pulsar un botn. La segunda clase representa a los eventos que se producen cuando el usuario emplea el ratn. Los gestores de eventos reciben los objetos correspondientes al evento producido y realizan las acciones que en cada caso se consideren oportunas. Las clases correspondientes a los gestores de eventos deben implementar una determinada interfaz dependiendo del tipo de evento. Por ejemplo, cuando un usuario pulsa un botn o hace clic en l se genera un evento del tipo ActionEvent. El gestor de este tipo de evento tiene que corresponderse necesariamente con una clase que implemente a la interfaz java.awt.eventActionListener. Todas las interfaces de gestin de eventos proceden de la interfaz java.utiI.EventListener. Algunas de las ms comunes son MouseListener o FocusListerner. En el ejemplo del listado 6 se crea una etiqueta (JLabel), otro de los componentes ms comunes de las interfaces. Seguidamente se emplea el mtodo addMouseListener para indicar cul es el objeto responsable de la gestin del evento MouseEvent. Este objeto es a su vez una instancia de una nueva clase que implementa la interfaz MouseListerner. Cuando el usuario hace clic en la etiqueta o pasa por encima se muestra el correspondiente mensaje por la consola. Listado 6
JLabel lblEtiqueta = new JLabel("Etiqueta"); lblEtiqueta.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) { System.out.println("mouseClicked... "); } public void mousePressed(MouseEvent e) { System.out.println("mousePressed... "); } public void mouseReleased(MouseEvent e) { System. out. println ("mouseReleased. . . ") ; }

La Geb de Joaqun

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I]
public void mouseEntered(MouseEvent e) { System.out.println("mouseEntered... "); } public void mouseExited(MouseEvent e) { System. out .println ("mouseExited. . .") ; } } };

En la mayor parte de las aplicaciones los gestores de eventos no necesitan gestionar todos los eventos que reciben. Siguiendo con el ejemplo anterior, con frecuencia slo ser necesario implementar algunos de los mtodos de la interfaz MouseListerner. Sin embargo como se trata de una interfaz es obligatorio escribirlos todos, aunque estn vacos. Para evitar esta situacin, entre otras muchas ventajas que se irn desvelando ms adelante, la gestin de eventos cuenta con lo que se denomina como adaptadores. Los adaptadores son clases de ayuda que implementan los interfaces como MouseListerner y que pueden emplearse para la gestin de eventos. El listado 7 codifica una nueva versin del ejemplo anterior y emplea la clase MouseAdapter para implementar la gestin de eventos de forma que solamente se trata el evento que se desencadena cuando el usuario hace clic en la etiqueta. Listado 7
lblEtiqueta.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { System. out. println ("mouseClicked. . . ") ; } } };

1.2 Primera aplicacin completa


Hasta el momento se han visto los fundamentos de las interfaces JFC/Swing. A lo largo de esta serie de artculos se profundizarn en cada uno de los aspectos destacados (componentes, contenedores, administradores de diseos y eventos) pero sin duda alguna la mejor manera de aprender es haciendo aplicaciones.

1.2.1 Esqueleto tpico de una aplicacin JFC/Swing


Una aplicacin JFC/Swing tpica es una clase que extiende a la clase javax.swing.JFrame. Por ejemplo:

La Geb de Joaqun

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I]
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class JApplication1 extends JFrame { . . . }

El constructor de la clase JApplicationl es el responsable de crear los componentes, agruparlos dentro de contenedores empleando para ello los administradores de diseo que considere oportunos, establecer las clases que gestionarn los eventos que reciben los componentes, etc. En este ejemplo la aplicacin simplemente abrir una ventana en la que mostrar una imagen. El nico evento que hay que gestionar es el que se produce cuando el usuario hace clic para cerrar la aplicacin. En la clase Japplication1 se han definido las siguientes propiedades o atributos:
int iWidth = 640; int iHeight = 480; ImageIcon imageIcon;

Los dos primeros almacenan respectivamente la anchura y la altura que se quiere dar a la ventana de la aplicacin. El tercero es un objeto perteneciente a la clase javax.swing.ImageIcon que se emplear para leer la imagen una nica vez al comienzo de la aplicacin. El constructor comienza de la siguiente forma:
public JApplication1() { super("Introduccin a la creacin de interfaces" + " con JFC/Swing (1 de 4)"); setSize(iWidth, iHeight); imageIcon = new ImageIcon("DSCN0055.JPG"); }

En la primera lnea se establece la cadena de texto que dar ttulo a la ventana principal. Para ello se llama al constructor de la clase superior, JFrame. Seguidamente el mtodo setSize se utiliza para determinar la anchura y la altura de la ventana. Finalmente se crea una instancia de la clase ImageIcon, lo que en ltima instancia es lo mismo que decir que se lee la imagen. Para presentar la imagen vamos a crear un componente especfico que no ser ms que una pequea modificacin de la clase javax.swing.JPanel, pero antes de crearlo y aadirlo a la ventana principal de la aplicacin es preciso obtener el contenedor asociado a dicha ventana. Esto se logra empleando el mtodo getContentPane:
Container contentPane = getContentPane();

El mtodo add sirve para aadir un componente al contenedor. En este ejemplo el componente en cuestin es una modificacin de un componente JPanel para el que se ha reescrito el mtodo paintComponent (vase el listado 8). 8 La Geb de Joaqun

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I] Listado 8
contentPane.add( new JPanel() { protected void paintComponent(Graphics g) { g.drawImage( imageIcon.getImage(), 0, 0, getSize().width, getSize().height, 0, 0, imageIcon.getIconWidth(), imageIcon.getIconHeight(), this ); } } );

El mtodo paintComponent de un componente es llamado por el interfaz de usuario de forma automtica cada vez que determina que el componente ha de ser "pintado", Esto sucede, por ejemplo, cuando la ventana de la aplicacin se presenta por primera vez o cuando el usuario cambia el tamao de la misma, En este ejemplo el componente lo nico que va a hacer es mostrar la imagen que previamente se ha cargado mediante la clase ImageIcon, ocupando todo el espacio disponible. La clase java.awt.Graphics cuenta con un conjunto de mtodos para dibujar todo tipo de formas bsicas y entre ellos est drawImage, que sirve para presentar imgenes. El mtodo drawImage est sobrescrito de muchas formas distintas pero en este ejemplo se emplea una definicin del mismo que permite dibujar la imagen original en un rea destino de manera que la ocupe por completo. El primer parmetro es el objeto de tipo java.awt.Image que representa a la imagen. Los cuatro siguientes parmetros son los puntos (dxl ,dyl) Y (dx2,dy2) que se corresponden con la esquina superior izquierda y la esquina inferior derecha del rea de destino. A continuacin los cuatro siguientes parmetros son los puntos (sxl.sy1) y (sx2.sy2) que se corresponden con la esquina superior izquierda y la esquina inferior derecha del fragmento de la imagen que se va a dibujar en el rea destino. El ltimo parmetro es el objeto a que el interfaz notificar los cambios. Al utilizar getSize().width y getSize().height para definir el punto (dx2,dy2) se garantiza que el rea destino de dibujo siempre va a ser tan grande como el propio componente en ese momento. Del mismo modo, al emplear imageIcon.getIconWidth() y imageIcon.getIconHeight() para definir el punto (sx2,sy2) se garantiza que el fragmento que se dibuja es toda la imagen. Hasta el momento lo nico que se ha escrito es la definicin de la clase JApplication1. El ltimo paso que falta para tener una aplicacin completa es el mtodo main. Este mtodo puede verse en el listado 9.

La Geb de Joaqun

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I] Listado 9
public static void main(String[] args) { JFrame jFrame = new JApplication1(); jFrame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } ); jFrame.setVisible(true); }

En primer lugar se crea una instancia de la clase JApplication 1. Seguidamente se crea una instancia de la clase java.awt.event.WindowAdapter que ser la responsable de gestionar los eventos relacionados con la ventana que reciba la aplicacin. El mtodo addWindowListemer del componente establece cul es el gestor para dicho componente para se tipo de evento. El mtodo windowClosing se ejecutar cuando el usuario haga clic en el icono correspondiente de cerrar la ventana y en ese momento se ejecutar System.exit(0) con lo que la aplicacin se cerrar. Por ltimo, la llamada al mtodo setVisible(true) hace que la ventana se muestre y con ella todos los componentes definidos en el contendor principal. A parir de la aplicacin resultante se puede introducir una pequea mejora consistente en hacer que la aplicacin se cierra simplemente pulsando la tecla Esc. Para ello es preciso configurar un nuevo gestor de eventos, concretamente uno encargado de procesar para ese componente los eventos generados por las pulsaciones del teclado (vase el listado 10). Listado 10
jFrame.addKeyListener( new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { System.exit(0); } } } );

El mtodo keyPressed de la clase java.awt.event.KeyAdapter se ejecutar cada vez que el usuario pulse una tecla teniendo la aplicacin activa en primer plano. El objeto perteneciente a la clase java.awt.event.KeyEvent guarda toda la informacin concerniente al evento y el mtodo getKeyCode, por ejemplo, devuelve el cdigo correspondiente a la tecla pulsada. La propia clase KeyEvent define una serie de teclas estndar de manera que KeyEvent.VK_ESCAPE representa a la tecla ESC. Cuando se detecta que el usuario ha pulsado esta tecla se cierra la aplicacin System.exit(0), igual que en el caso anterior.

10

La Geb de Joaqun

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I] Listado Codigo Completo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 import javax.swing.*; import java.awt.*; import java.awt.event.*; class JApplication1 extends JFrame { int iWidth = 640; int iHeight = 480; ImageIcon imageIcon; public JApplication1() { super("Introduccin a la creacin de interfaces" + " con JFC/Swing (1 de 4)"); setSize(iWidth, iHeight); imageIcon = new ImageIcon("DSCN0055.JPG"); Container contentPane = getContentPane(); contentPane.add( new JPanel() { protected void paintComponent(Graphics g) { g.drawImage( imageIcon.getImage(), 0, 0, getSize().width, getSize().height, 0, 0, imageIcon.getIconWidth(), imageIcon.getIconHeight(), this ); } } ); } public static void main(String[] args) { JFrame jFrame = new JApplication1(); jFrame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } } );

La Geb de Joaqun

11

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I]
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 jFrame.addKeyListener( new KeyAdapter() { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { System.exit(0); } } } ); jFrame.setVisible(true); } }

1.3 Segunda aplicacin completa


A continuacion hay otro ejemplo completo y sencillo de creacion de una aplcacion AWT Listado Codigo Ejemplo 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class AplicacionSwing extends JFrame { // Referencias a los componentes private JLabel etiqueta; private JButton botn; // Otras referencias private static String mensaje = "Hola mundo!!!"; private AplicacionSwing(String ttulo) // constructor { super(ttulo); // ttulo de la ventana principal iniciarComponentes(); // Ajustar el tamao de la ventana al mnimo pack(); } private void iniciarComponentes() { // Crear una etiqueta con el texto centrado etiqueta = new JLabel(); etiqueta.setHorizontalAlignment(JLabel.CENTER); // Crear un botn botn = new JButton("Haga clic aqu"); // Establecer como tecla aceleradora la C. Entonces, pulsar // Alt+C ser equivalente ha hacer clic, sobre el botn. botn.setMnemonic(KeyEvent.VK_C); // Asignar al botn una descripcin abreviada botn.setToolTipText("botn de pulsacin"); // Permitir que el botn responda a los eventos de accin

12

La Geb de Joaqun

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I]
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 ActionListener al = new ActionListener() { // Este mtodo se ejecutar cuando // se haga clic en "botn" public void actionPerformed(ActionEvent evento) { Object obj = evento.getSource(); if (obj == botn) mostrarMensaje(); } }; botn.addActionListener(al); // Crear un panel para colocar los controles JPanel panel = new JPanel(); // Introducimos un borde sin pintar alrededor de los controles: // createEmptyBorder(top, left, bottom, right) panel.setBorder(BorderFactory.createEmptyBorder( 20, 20, 20, 20)); // Establecer un administrador de diseo de cuadrcula panel.setLayout(new GridLayout(0, 1)); // Los controles se aaden en columna (filas = 0) panel.add(etiqueta); panel.add(botn); // Aadir los componentes al contenedor de la aplicacin getContentPane().add(panel, BorderLayout.CENTER); // Permitir que la ventana de la aplicacin responda a los // eventos de ventana (p.e. cerrar la ventana) addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent evento) { cerrarVentana(); } } ); } private void mostrarMensaje() { // Mostrar el "mensaje" en la "etiqueta" etiqueta.setText(mensaje); } private void cerrarVentana() { // Salir de la aplicacin System.exit(0); } public static void main(String[] args) { try { // Aspecto y percepcin de la interfaz grfica UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName()); }

La Geb de Joaqun

13

Java - Interfaz Grfico de Usuario (GUI) Creacin de interfaces con JFC/Swing [I]
95 96 97 98 99 100 101 102 catch (Exception e) { System.out.println("No se pudo establecer" + " el aspecto deseado: " + e); } AplicacionSwing vPpal = new AplicacionSwing("Aplicacin Swing"); vPpal.show(); } }

1.4 Conclusiones
En este captulo se han introducido los fundamentos de la creacin de interfaces con JFCjSwing. Quedan muchos aspectos por estudiar, entre los que destacan el manejo de los distintos tipos de componentes, la gestin eficaz de los eventos y el uso de los administradores de diseo. No en vano JFCjSwing es probablemente uno de las partes ms sofisticadas y complejas de la plataforma Java. Si bien al principio la creacin de interfaces con JFCjSwing puede resultar una tarea compleja e incluso pesada, ms adelante se comprobar que una vez adquiridos los conceptos bsicos resulta muy sencillo ir desarrollando paulatinamente interfaces cada vez ms sofisticados y profesionales.

14

La Geb de Joaqun

También podría gustarte