You are on page 1of 16

Ingeniera Informtica

Practica01 de Swing

1. Solucin Ejercicio 1 de Swing Pasos bsicos para la creacin de un entorno grfico Una vez que hemos visto el conjunto de componentes que Swing nos proporciona, vamos a ver como se construye un interfaz de usuario sencillo. Vamos a mostrar como construir los elementos grficos y dejamos para el siguiente apartado la gestin de eventos. El interfaz grfico a construir estar formado por una ventana, y dentro de sta van a aparecer un botn, una etiqueta y un cuadro de texto. Los pasos a seguir son los siguientes: - Crear una ventana de aplicacin. Crear los componentes que se muestran en dicha ventana. Crear un contenedor. Asociar los componentes al contenedor para que, al hacerse visible, muestre en su interior dichos componentes. Asociar el contenedor a la ventana de aplicacin para que, al hacerse visible, muestre en su interior el contenedor y, por tanto, los componentes asociados.

La jerarqua de contenedores de nuestro sencillo interfaz grfico sera:


Ventana de Aplicacin

Contenedor

Botn

Etiqueta

Campo de texto

Figura 2 NOTA: Cuando en un grfico vayamos a indicar que un componente se va a pintar dentro de un determinado contenedor, usaremos una lnea terminada en un crculo del contenedor al componente.

Ingeniera Informtica

Crear la ventana de aplicacin Para crear una ventana de aplicacin hay que instanciar un objeto de la clase JFrame. Algunos mtodos de esta clase relacionados con el aspecto grfico de la ventana son: public JFrame() Construye una ventana inicialmente invisible. public JFrame(String titulo) Construye una ventana inicialmente invisible con el ttulo indicado. public void setTitle(String titulo) Establece el ttulo de la ventana. public void setSize(int width, int height) Establece el tamao en pxeles de la ventana. public void setDefaultCloseOperation(int operation) Establece la operacin que se ha de hacer cuando el usuario cierra la ventana. Los valores permitidos vienen determinados por las siguientes constantes: Javax.swing.JFrame.EXIT_ON_CLOSE - Salir del programa. Javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE - No hacer nada. Javax.swing.WindowConstants.HIDE_ON_CLOSE - Ocultar la ventana (por defecto). Javax.swing.WindowConstants.DISPOSE_ON_CLOSE Liberar los recursos de la ventana, pero no salir del programa. public void setResizable(boolean resizable) Establece si el usuario puede cambiar el tamao de la ventana. Por defecto es true. public void setExtendedState(int state) Establece el estado de la ventana. Puede no funcionar en algunas plataforms. Los valores permitidos vienen dados por las constantes: Java.awt.Frame.NORMAL No se encuentra ni minimizada ni maximizada. Java.awt.Frame.ICONIFIED Minimizada. Java.awt.Frame.MAXIMIZED_BOTH - Maximizada. Java.awt.Frame.MAXIMIZED_HORIZ Maximizada horizontalmente. Java.awt.Frame.MAXIMIZED_VERT Maximizada verticalmente. public void setLocation(int x, int y) Establece la posicin de la esquina superior izquierda de la ventana. public void setVisible(boolean visible) Muestra u oculta la ventana. Crear los componentes Para crear un componente, basta crear una instancia de la clase determinada y configurar ese objeto para que se adapte a nuestras necesidades. Vamos a ver algunos mtodos de los aspectos grficos de algunos de los componentes ms usados: JButton public JButton(String texto) - Crea un botn con el texto indicado. JLabel public JLabel(String texto) - Crea una etiqueta con el texto indicado. public String getText() - Devuelve el texto de la etiqueta. public void setText(String texto) - Pone el texto indicado en la etiqueta. JTextField public JTextField(int columnas) - Crea un Campo de Texto sencillo con el nmero de columnas especificado.

Ingeniera Informtica public String getText() - Devuelve el texto del campo de texto. A medida que vayamos avanzando en el curso iremos viendo los componentes ms importantes y los mtodos que permiten configurar su aspecto grfico. Crear un contenedor Como hemos visto, en Swing existen muchos tipos de contenedores, dependiendo de la forma que manejen los componentes que tienen dentro. Por ejemplo, existe un contenedor con pestaas y en cada pestaa va un componente, es el JTabbedPane. Tambin existe otro contenedor dividido en dos partes para dos componentes, y la separacin puede cambiar de posicin, es el JSplitPane. El que nosotros vamos a usar, para construir nuestro sencillo interfaz, es el JPanel, el ms sencillo de todos, que muestra todos los componentes a la vez distribuidos en su interior. Ms adelante veremos como podemos configurar la forma de distribuir los componentes. El mtodo constructor de la clase JPanel es: public JPanel() Crea un contenedor simple Asociar los componentes al contenedor para que los muestre al hacerse visible Para asociar componentes a un contenedor, de forma que se muestren dentro cuando el contenedor se muestre por pantalla, usamos el siguiente mtodo de la clase JPanel: public void add( JComponent componente ) Asocia el componente al contenedor, de forma que se muestre el componente al mostrarse el contenedor. NOTA: Por motivos de compatibilidad la cabecera real del mtodo es public void add(Component comp). Puesto que vamos a trabajar con Swing podemos considerar que la cabecera es la indicada. Asociar el contenedor a la ventana para que le muestre al hacerse visible Para asociar un contenedor a la ventana de aplicacin, de forma que se muestre dentro cuando la ventana se muestre por pantalla, usaremos el siguiente mtodo de la clase JFrame: public void setContentPane(JComponent panelDeContenido) Establece el componente pasado como parmetro como contenido de la ventana. NOTA: Por motivos de compatibilidad la cabecera real del mtodo es public void setContentPane(Container contentPane). Puesto que vamos a trabajar con Swing podemos considerar que la cabecera es la indicada.

Ingeniera Informtica

El cdigo para construir nuestra interfaz sera (una posible solucin):


... // Crear la ventana de la aplicacion JFrame ventana = new JFrame("Titulo de la ventana"); ventana.setSize(300, 200); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Crear los componentes JLabel etiqueta1 = new JLabel("Texto etiqueta"); JTextField campoDeTexto = new JTextField(20); JButton boton = new JButton("Botn"); // Crear un contenedor JPanel panelDeContenido = new JPanel(); // Asociar los componentes al contenedor para // que los muestre en su interior panelDeContenido.add(etiqueta1); panelDeContenido.add(campoDeTexto); panelDeContenido.add(boton); // Asociar el contenedor a la ventana para // que le muestre en su interior ventana.setContentPane(panelDeContenido); ...

Tema practica01. Eventos en Java


Como hemos comentado antes, cuando construimos una aplicacin con un interfaz grfico de usuario, la forma de programar vara con respecto a una aplicacin de consola. En una aplicacin con interfaz grfico, se asocia cdigo a diferentes eventos que puede producir el usuario, de forma que cuando se genera dicho evento, por ejemplo, pulsar un botn, pulsar una tecla del teclado, pasar el ratn sobre una imagen, etc., se ejecuta el cdigo asociado. Cuando finaliza la ejecucin de ese cdigo asociado, la aplicacin espera nuevos eventos por parte del usuario. En este apartado veremos qu eventos pueden producir cada uno de los componentes debido a la interaccin del usuario y cmo construir un determinado cdigo para que est asociado a dichos eventos. Tipos de eventos Los eventos se dividen en dos grandes grupos: - Eventos de bajo nivel Representan de forma directa las acciones simples del usuario. Los eventos de este tipo son la pulsacin de teclas y los movimientos del ratn que corresponden directamente con lo que el usuario hace.

Ingeniera Informtica Eventos de alto nivel o semnticos Representan acciones ms complejas. Por ejemplo, seleccionar un elemento en una lista desplegable, arrastrar un elemento o pulsar un hiperenlace.

Cada componente del interfaz de usuario puede generar eventos diferentes, agrupados por tipos. Por ejemplo, un componente de rbol (JTree) genera eventos cuando seleccionan alguno de sus componentes y tambin genera eventos cuando se va a expandir o colapsar una rama. Adems de los eventos especficos de cada componente, hay que tener en cuenta que mediante herencia, los eventos generados por objetos de la clase padre tambin son generados por los objetos de las clases hijas. Debido a esto, como todos los componentes heredan de Component, y los objetos de esta clase generan eventos de bajo nivel (teclado y ratn), todos los componentes generan eventos de bajo nivel. Una tabla con los distintos eventos que generan los componentes:
Clase Component Tipos de eventos que genera Eventos del Foco (Focus) Evento concreto Foco obtenido (focusGained) Foco perdido (focusLost) Tecla presionada (keyPressed) Tecla soltada (keyReleased) Tecla presionada y soltada (keyTyped) Tecla del ratn presionada y soltada (mouseClicked) El ratn entra en un componente (mouseEntered) El ratn sale de un componente (mouseExited) Tecla del ratn presionada (mousePressed) Tecla del ratn soltada (mouseReleased) El ratn se ha movido y una tecla est pulsada. El componente est siendo arrastrado. (mouseDragged) El ratn se ha movido y no se est pulsando ninguna tecla. (mouseMoved) La rueda ha rotado. (mouseWheelMoved) Se ha hecho clic en el botn (actionPerformed) El estado del botn ha cambiado (stateChanged) Ha cambiado el estado de seleccin del botn (itemStateChanged) Se ha seleccionado un elemento. Si se puede escribir en el combo box indica que se ha finalizado la edicin. (actionPerformed) Ha cambiado la seleccin del combo box (itemStateChanged)

Eventos de entrada de teclado (Key)

Eventos de ratn (Mouse)

Eventos de movimiento del ratn (MouseMotion)

AbstractButton

Eventos de la rueda del ratn (MouseWheel) Eventos de accin (Action)

Eventos de cambio (Change)

Eventos de seleccin de un item (Item) JComboBox Eventos de accin (Action)

Eventos de seleccin de un item (Item)

Ingeniera Informtica
Window Eventos de foco en la ventana (WindowFocus) Foco obtenido por la ventana (windowGainedFocus) Foco perdido por la ventana (windowLostFocus) Ventana activada (windowActivated) La ventana ha sido cerrada como resultado de llamar al mtodo dispose (windowClosed) El usuario ha pulsado el botn de cierre de la ventana (windowClosing) La ventana ya no es la ventana activa (windowDeactivated) La ventana ha pasado de minimizada a normal (windowDeiconified) La ventana se ha minimizado (windowIconified) La ventana se ha hecho visible por primera vez (windowOpened) La ventana ha cambiado de estado en cuanto a minimizada, maximizada, restaurada, etc... El cursor ha cambiado de posicin (caretPositionChanged) El texto introducido por teclado ha cambiado (inputMethodTextChanged) El cursor ha cambiado de posicin (caretUpdate) El link ha sido seleccionado (hyperlinkUpdate) El usuario ha pulsado la tecla enter en el cuadro de texto (actionPerformed) Ventana activada (internalFrameActivated) La ventana ha sido cerrada como resultado de llamar al mtodo dispose (internalFrameClosed) El usuario ha pulsado el botn de cierre de la ventana (internalFrameClosing) La ventana ya no es la ventana activa (internalFrameDeactivated) La ventana ha pasado de minimizada a normal (internalFrameDeiconified) La ventana se ha minimizado (internalFrameIconified) La ventana se ha hecho visible por primera vez (internalFrameOpened) La seleccin ha cambiado (valueChanged) El men ha sido cancelado (menuCanceled) El men ha sido deseleccionado (menuDeselected) El men ha sido seleccionado (menuSelected)

Eventos del ciclo de vida de la ventana (Window)

Eventos de estado de la ventana (WindowState) JTextComponent Eventos de entrada de texto (InputMethod)

Eventos de cursor (Caret)

JEditorPane

Eventos de hiperenlaces (Hyperlink)

JTextField

Eventos de accin (Action)

JInternalFrame

Eventos de ciclo de vida de la ventana interna (InternalFrame)

JList JMenu

Eventos de seleccin (ListSelection) Eventos del men (Menu)

Ingeniera Informtica
JMenuItem Eventos de arrastrar con el ratn en un item de men (MenuDragMouse) En el item se est arrastrando el ratn (menuDragMouseDragged) En el item ha entrado el ratn con una tecla pulsada, ha entrado arrastrando (menuDragMouseEntered) Ha salido del item un ratn con una tecla pulsada, ha salido arrastrando (menuDragMouseExited) Un ratn que se estaba moviendo con una tecla pulsada, ha soltado la tecla dentro del item (menuDragMouseReleased) Tecla presionada (menuKeyPressed) Tecla soltada (menuKeyReleased) Tecla presionada y soltada (menuKeyTyped) Men cancelado (popupMenuCanceled) Men se va a hacer invisible (popupMenuWillBecomeInvisible) Men se va a hacer visible (popupMenuWillBecomeVisible) El estado de la barra de progreso ha cambiado (stateChanged) El estado de la barra de deslizamiento ha cambiado (stateChanged) El estado del selector ha cambiado (stateChanged) El estado del panel con pestaas ha cambiado (stateChanged) Un item del rbol ha sido colapsado (treeCollapsed) Un item del rbol ha sido expandido (treeExpanded) Un item del rbol ser colapsado (treeWillCollapse) Un item del rbol ser expandido (treeWillExpand) La seleccin en el rbol ha cambiado (valueChanged)

Eventos de entrada de teclado en los mens (menuKey)

JPopupMenu

(PopupMenu)

JProgressBar

Eventos de cambio (Change)

JSlider

Eventos de cambio (Change)

JSpinner

Eventos de cambio (Change)

JTabbedPane

Eventos de cambio (Change)

JTree

Eventos de expansin en el rbol (TreeExpansion)

Eventos de futuras expansiones en el rbol (TreeWillExpand)

Eventos de seleccin de los items del rbol (TreeSelection) JTable No genera eventos directamente. Debido al patrn MVC, que veremos posteriormente en este tutorial, los eventos son generados por atributos de esta clase.

Como hemos dicho, se puede asociar un cdigo a cada uno de los eventos que genera un componente. Es importante tener en cuenta que Swing nos permite asociar varios cdigos distintos al mismo evento del mismo componente:

Ingeniera Informtica

Cdigo 1 Botn

Cdigo N

NOTA: Utilizaremos la flecha punteada cuando queramos indicar que al producirse un evento en un componente, el cdigo apuntado ser ejecutado. Tambin est permitido asociar un mismo cdigo a varios componentes distintos, de forma que, un mismo cdigo ser ejecutado cuando se genere un evento en cualquiera de los componentes a los que est asociado.
Botn 1

Botn N

Implementacin de los eventos Una vez vistos qu eventos genera cada uno de los componentes del interfaz de usuario, vamos a ver cmo construir el cdigo de gestin de eventos y cmo asociar ese cdigo a los eventos que nos interesen. En Swing se utiliza el modelo de eventos de JavaBeans1. Para construir un cdigo y asociarlo a un evento en un componente tenemos que seguir los siguientes pasos: 1. Hacer que una clase implemente el interfaz XXListener, siendo XX el tipo de evento (en la tabla anterior los nombres que aparecen entre parntesis). En la tabla A se muestran las clases XXListener que existen para los eventos de los componentes. Cada uno de estos interfaces define un mtodo para cada uno de los eventos que pertenecen a ese tipo. En el mtodo correspondiente al evento elegido, hay que escribir el cdigo que se ejecutar cuando se produzca dicho evento y el resto de los mtodos del interfaz se dejarn vacos. Cada uno de los mtodos de los interfaces XXListener recibe un parmetro de la clase XXEvent. Con el objeto recibido como parmetro, podemos obtener informacin sobre el evento producido. 2. Asociar dicho cdigo al componente o componentes. Esto se consigue usando el mtodo void addXXListener(XXListener listener) que tiene cada clase para cada tipo de evento que genera.

http://java.sun.com/products/javabeans/

...
Cdigo

...

Ingeniera Informtica

Tabla A - Clases XXListener correspondientes a cada uno de los eventos.


java.util.EventListener java.awt.event.ActionListener java.awt.event.FocusListener java.awt.event.InputMethodListener java.awt.event.ItemListener java.awt.event.KeyListener java.awt.event.MouseListener java.awt.event.MouseMotionListener java.awt.event.MouseWheelListener java.awt.event.TextListener java.awt.event.WindowFocusListener java.awt.event.WindowListener java.awt.event.WindowStateListener javax.swing.event.CaretListener javax.swing.event.ChangeListener javax.swing.event.HyperlinkListener javax.swing.event.InternalFrameListener javax.swing.event.ListSelectionListener javax.swing.event.MenuDragMouseListener javax.swing.event.MenuKeyListener javax.swing.event.MenuListener javax.swing.event.PopupMenuListener javax.swing.event.TreeExpansionListener javax.swing.event.TreeSelectionListener javax.swing.event.TreeWillExpandListener

Como hemos visto, lo que en un principio habamos llamado de forma general cdigo de manejo de eventos, vemos como se implementa como un mtodo con una cabecera determinada en una clase que implemente el interfaz XXListener. En la cabecera de esos mtodos siempre se recibe como parmetro un objeto de la clase XXEvent. En la siguiente tabla se muestran todas las clases de XXEvent que existen para los componentes del interfaz: Tabla B - Clases XXEvent pasadas como parmetro en cada uno de los mtodos de
XXListener class java.lang.Object class java.util.EventObject class javax.swing.event.CaretEvent class javax.swing.event.ChangeEvent class javax.swing.event.HyperlinkEvent class javax.swing.event.ListSelectionEvent class javax.swing.event.MenuEvent class javax.swing.event.PopupMenuEvent class javax.swing.event.TreeExpansionEvent class javax.swing.event.TreeSelectionEvent class java.awt.AWTEvent class javax.swing.event.InternalFrameEvent class java.awt.event.ActionEvent class java.awt.event.InputMethodEvent class java.awt.event.ItemEvent class java.awt.event.TextEvent class java.awt.event.ComponentEvent class java.awt.event.WindowEvent* class java.awt.event.FocusEvent

Ingeniera Informtica
class java.awt.event.InputEvent class java.awt.event.KeyEvent class javax.swing.event.MenuKeyEvent class java.awt.event.MouseEvent** class java.awt.event.MouseWheelEvent class javax.swing.event.MenuDragMouseEvent * Usado por WindowStateListener y WindowFocusListener ** Usado por MouseMotionListener

Las clases XXEvent se pueden dividir en dos categoras dependiendo de la cantidad de informacin sobre el evento que alberguen: - Eventos ligeros Slo albergan la referencia al componente que gener el evento. Este tipo de eventos se usan cuando podemos saber detalles sobre el evento producido, lanzando mensajes al componente en el que se origin. Para obtener una referencia al objeto que gener el evento, usaremos el mtodo en la clase EventObject (padre de todos los eventos):
public Object getSource()

Eventos informativos Adems de guardar una referencia al componente que gener el evento, tienen informacin sobre las caractersticas del evento que se ha producido. Con eventos de este tipo no suele ser necesario consultar al componente.

A medida que vayamos viendo cada uno de los componentes de nuestra interfaz, iremos viendo que informacin se puede obtener de los eventos generados. Existen clases abstractas, llamadas XXAdapter, que implementan uno o varios interfaces XXListener, pero dejan todos sus mtodos sin implementacin. Son usadas para construir clases de gestin de eventos sin necesidad de implementar un interfaz XXListener y dejar vacos los mtodos que no usemos. En vez de esto, heredamos de la clase XXAdapter y redefinimos los mtodos que nos interesan.

La primera aplicacin con interfaz grfico.


Una vez que conocemos todos los mecanismos necesarios, vamos a construir nuestro primer programa con interfaz grfico. Las partes bsicas de un programa con interfaz grfico son: - Construccin de la interfaz: 1. Construccin de los elementos grficos. 2. Asociacin del cdigo de manejo de eventos a los componentes. 3. Hacer visible la ventana de la aplicacin. Cdigo de manejo de eventos: 1. Cuando se produce un evento del usuario, se ejecuta el cdigo de manejo de eventos asociado. En este cdigo, habitualmente, se obtienen datos del interfaz, se procesan esos datos y se modifica el interfaz en consecuencia.

Ingeniera Informtica Existen muchas formas de construir nuestro cdigo para cumplir estas directivas generales. Para aplicaciones pequeas, la forma en que construyamos el cdigo del interfaz grfico no ser relevante, pero en aplicaciones medias y grandes, la organizacin de este cdigo ser de vital importancia para que sea manejable, mantenible, reutilizable, etc., por este motivo, a medida que avancemos en el tutorial no slo veremos la API, sino que nos esforzaremos en hacer que nuestro cdigo sea de calidad. El cdigo ms sencillo para construir un interfaz grfico se consigue siguiendo los siguientes pasos: 1. Crear una clase. 2. En el mtodo main de esa clase se instancia un objeto de dicha clase. 3. Se ponen como atributos cada uno de los elementos del interfaz de usuario. 4. El constructor se encarga de: 1. Construir los elementos grficos. 2. Asociar el cdigo de manejo de eventos a los componentes. 3. Hacer visible la aplicacin. 5. La clase implementa el interfaz XXListener e implementa el mtodo correspondiente al evento elegido. En el cuerpo de ese mtodo se obtienen los datos del interfaz de usuario, a travs del objeto evento, a travs de la fuente del evento o directamente de otros componentes del interfaz de usuario. Posteriormente, se procesan esos datos y se modifica el interfaz de usuario para mostrar los resultados. Ejemplo Interfaz de un Conversor de Euros a Pesetas Construir la parte de cdigo que construye un interfaz de usuario que conste de una ventana de 300 x 400 pxeles y cuyo ttulo sea Conversor de Euros a Pesetas. Al cerrar la ventana se finalizar la ejecucin de nuestro programa. Dentro de la ventana se tiene que mostrar una etiqueta con el texto Importe en Euros y un cuadro de texto de 20 columnas de longitud. Aparecer un botn con el texto Convertir y una etiqueta con el texto Pulse para obtener el importe en pesetas. Cuando se pulse el botn, se debe obtener el valor del campo de texto, hacer la conversin de Euros a pesetas y modificar el interfaz de usuario con el valor de la conversin.
import javax.swing.*; import java.awt.event.*; public class Conversor implements ActionListener { JLabel etiqueta1; JTextField campoDeTexto; JButton boton; JLabel etiqueta2; public Conversor() { //*********************************************

Ingeniera Informtica
// CREACIN DEL INTERFAZ GRFICO //********************************************* // Crear la ventana de la aplicacion JFrame ventana = new JFrame("Conversor de Euros a pesetas"); ventana.setSize(300, 200); ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Crear los componentes etiqueta1 = new JLabel("Importe en Euros"); campoDeTexto = new JTextField(20); boton = new JButton("Convertir"); etiqueta2 = new JLabel("Pulse para obtener el" + "importe en pesetas"); // Crear un contenedor JPanel panelDeContenido = new JPanel(); // Configurar el contenedor para mostrar los componentes cuando // se muestre. panelDeContenido.add(etiqueta1); panelDeContenido.add(campoDeTexto); panelDeContenido.add(boton); panelDeContenido.add(etiqueta2); // Configurar la ventana para mostrar el panel cuando se muestre ventana.setContentPane(panelDeContenido); //************************************************** // ASOCIACIN DEL CDIGO DE MANEJO DE EVENTOS //************************************************** boton.addActionListener(this); //************************************************** // HACER VISIBLE LA VENTANA //************************************************** ventana.setVisible(true); } public static void main(String[] args) { new Conversor(); } public void actionPerformed(ActionEvent e) { //************************************************** // CDIGO DE MANEJO DE EVENTOS //************************************************** try { double euros = Double.parseDouble(campoDeTexto.getText()); double pesetas = euros * 166.386; etiqueta2.setText("Equivale a " + pesetas + " pesetas"); } catch (NumberFormatException e2) { etiqueta2.setText("En el campo de texto no hay un nmero"); } } }

Ingeniera Informtica Como podemos observar, en una aplicacin con interfaz grfico existen cuatro tipos de relaciones entre los objetos: - Asociacin/Composicin - La relacin habitual en cualquier programa orientado a objetos es la relacin de composicin/asociacin, que existe cuando un objeto est enlazado a otro mediante un atributo en la clase. La representaremos como:
Objeto Objeto atributo

Uso Es la relacin que guarda un objeto con aquellos objetos que le llegan como parmetro o que actan como objetos locales a un mtodo. La representaremos como:
Objeto Objeto usado

Eventos Esta relacin se da cuando el mtodo de un objeto ser ejecutado cuando se genere un determinado evento en un componente. La representaremos como:
Componente Objeto de manejo de eventos

Pintado Esta relacin se da cuando un componente se asocia a un contenedor para pintarse dentro de l. La representaremos como:
Contenedor Componente

Segn estos cuatro tipos de relaciones, el esquema de nuestra primera aplicacin sera:
<<interface>> ActionListener :JFrame

:Conversor

:JPanel

:JButton :JLabel :JLabel :JTextField

Ingeniera Informtica

2. Organizacin del cdigo de una aplicacin grfica


Una vez que tenemos claras las partes clave de una aplicacin con interfaz grfico, vamos a construir un pequeo traductor. Iremos poco a poco aadiendo ms componentes y eventos a nuestro traductor. Esto nos permitir experimentar con la implementacin de los eventos.

2.1 Estructura general. Interfaz y Datos


Cuando se construye una aplicacin con un entorno grfico es habitual dividir su estructura principal en tres clases:
Aplicacin

Interfaz

Datos

La clase Aplicacin Esta clase es la que tiene el mtodo esttico main. Se encarga de acceder a los datos de la aplicacin y diversas tareas de inicializacin. Tambin se encarga de instanciar el interfaz de usuario y asociarle los datos. En esta clase se suelen realizar todas aquellas tareas de inicializacin y mientras tanto aparecera una ventana sin marco mostrando el progreso de la carga. Cuando esta carga estuviese lista creara el interfaz de usuario. La clase principal de Datos Normalmente las aplicaciones sencillas suelen tener una clase que representa la forma de acceder a los datos que sta gestiona. Dependiendo de la aplicacin esta clase puede ser muy distinta, por ejemplo, puede ser un gestor de base de datos, una clase con la lgica de una calculadora, etc. La clase principal de Interfaz La mayora de las aplicaciones sencillas suelen tener una clase para la creacin del interfaz de usuario, y cmo ste se relaciona con la clase principal de datos. Esta clase principal suele heredar de JFrame y suele tener como atributos los componentes del interfaz de usuario.

Ejercicio 2 En el primer ejercicio crearemos una aplicacin de traduccin. El interfaz grfico de esta aplicacin consistir en una etiqueta con el texto Pulse el botn para traducir. Tambin tendr un campo de texto de 20 caracteres, que inicialmente estar vaco. Por ltimo, dispondr de un botn con el texto Traducir. La ventana de la aplicacin tendr un tamao de 300 x 200 pxeles, el ttulo Traductor de Espaol a Africano y al cerrar la ventana se finalizar la aplicacin. Para la creacin de este ejemplo, disponemos de la clase Traductor con las siguientes caractersticas: - Cada idioma viene representado por una constante:

Ingeniera Informtica
o Traductor.ESPAOL, Traductor.AFRICANO, Traductor.INGLES.

Al crearse el traductor se configura con idioms por defecto de origen y destino de la traduccin. Existen mtodos para controlar estos idioms: o o o o o public void setIdiomaOrigen(int idiomaOrigen) public void setIdiomaDestino(int idiomaDestino) public int getIdiomaOrigen() public int getIdiomaDestino() public void invierteIdioma()

Para traducir se utilizan los mtodos: o o public String traducePalabra(String palabra, int idiomaOrigen, int idiomaDestino) public String traducePalabra(String palabra)

Cuando una palabra no se entienda, el resultado de la traduccin ser cadena de caracteres No entiendo esa palabra.

Se puede obtener una representacin textual de una constante del idioma con el mtodo esttico: o public static String getCadenaIdioma(int idioma)

El esquema de esta aplicacin sera:

:Aplicacion1

JFrame

<<interface>> ActionListener :Traductor

ventana:Ventana1

panelContenido:JPanel

boton:JButton campo:JTextField etiqueta:JLabel

Ingeniera Informtica

You might also like