conceptos basicos java swing

Upload: felipe-l-m

Post on 16-Oct-2015

50 views

Category:

Documents


0 download

TRANSCRIPT

2. Programas Java Swing

Todos los ejemplos que encontrar en este libro se realizan utilizando el paquete Swing XE "Swing" que es parte de la JFC (Java Foundation Classes) en la plataforma Java. La JFC provee facilidades para ayudar al usuario a construir GUIs (Interfaces grficas de usuarios). Swing abarca componentes como botones, tablas, marcos, etc... Los componentes Swing se identifican porque pertenecen al paquete javax.swing.

Swing existe desde la JDK 1.1 (como un agregado). Antes de la existencia de Swing, las interfaces grficas con el usuario se realizaban a travs de awt (Abstract Window Toolkit), de quien Swing hereda todo el manejo de eventos. Usualmente, para todo componente awt existe un componente Swing que lo reemplaza, por ejemplo, la clase Button de awt es reemplazada por la clase JButton de Swing (el nombre de todas las componentes Swing comienza con "J").

Las componentes de Swing XE "Swing" utilizan la infraestructura de awt, incluyendo el modelo de eventos awt, el cual rige cmo un componente que reacciona a eventos de teclado, mouse, etc. Es por esto, que la mayora de los programas Swing necesitan importar dos paquetes awt: java.awt.* y java.awt.event.*.

Tabla 2.1. Paquetes de java swingPaquete

Descripcin

javax.swing XE "javax.swing" Es el paquete tal vez ms importante de swing, contiene las clases necesarias para crear ventanas y colocar objetos sencillos en una interfaz grfica.

javax.swing.border XE "javax.swing.border" Contiene clases que permiten especificar bordes personalizados a los diferentes objetos de la interfaz grfica.

javax.swing.colorchooser XE "javax.swing.colorchooser" Contiene clases que permiten definir, especificar y seleccionar colores para diversos objetos.

javax.swing.event XE "javax.swing.event" Este paquete contiene las clases necesarias para crear y manipular eventos sobre los diversos objetos de la interfaz de swing. Es bueno tener en cuenta que los oidores se asocian a objetos de la interfaz, pero son implementados gracias a las clases que provee este paquete.

javax.swing.filechooser XE "javax.swing.filechooser" El FileChooser XE "FileChooser" es un componente de swing que permite navegar por los archivos de la mquina, tal como lo hace el explorador de Windows.

javax.swing.plaf.* XE "javax.swing.plaf.*" Este paquete permite dar una apariencia uniforme a una aplicacin. Contiene apariencias estndares de las aplicaciones basadas en Windows y otros sistemas operativos

javax.swing.table XE "javax.swing.table" El componente JTable XE "JTable" es uno de los componentes que aadi swing para lograr crear interfaces que muestren datos en una cuadrcula y muchas otras funcionalidades.

javax.swing.text XE "javax.swing.text" Paquete que contiene clases para dar formato a textos y en general para realizar una manipulacin grfica de textos y mostrarla al usuario con algunos efectos.

javax.swing.text.html.* XE "javax.swing.text.html.*" Clases que permiten manipular documentos en formato HTML.

javax.swing.text.rtf XE "javax.swing.text.rtf" El RTF es un visualizador de texto que se puede utilizar haciendo referencia a este paquete.

javax.swing.tree XE "javax.swing.tree" El componente JTree es uno de los componentes ms sofisticados y completos que incorpora swing. Dicho componente permite entre otras cosas realizar bsquedas en rboles, mostrar rboles con la apariencia de un explorador de archivos y muchas otras cosas.

javax.swing.undo XE "javax.swing.undo" Permite realizar aplicaciones que incorporen la funcionalidad de rehacer y deshacer.

javax.accessibility XE "javax.accessibility" Clases que permiten dar funcionalidad a las aplicaciones para que sean utilizadas por personas con discapacidades.

2.1. Creacin de un primer programa en Java

Java es un lenguaje de programacin con el que pueden crearse aplicaciones autnomas y applets (basados en un explorador). Los programas autnomos son parecidos a aquellos que pueden realizarse con C++. Los Applets son independientes del dispositivo, es decir un mismo Applet puede ejecutarse desde un PC con Windows/x, Mac o Linux, ya que el compilador de Java genera cdigo de maquina virtual el cual se puede ejecutar desde cualquier plataforma. Los programas autnomos o applets se pueden digitar en un editor de texto como: Wordpad, Edit, Block de Notas, o editores de programas de java (realj, freejava, jcreator, netbeans, etc.) Estos deben tener la extensin ".java". Todos los programas se digitaron y se compilaron utilizando el programa realj, el cual es un editor para crear programas en java. (Ver anexo A, pgina 249).

En el anlisis de cada programa se hacen los respectivos comentarios del cdigo omitiendo en ocasiones aquellos que ya han sido comentados en programas anteriores.

2.2. Ejemplo prctico Realizar un programa que imprima en pantalla el siguiente mensaje: "Hola!... Mi primer programa con Java. Dicho programa debe realizarse como un programa Autnomo y un Applet. a) Programa Autnomo

1import javax.swing.JFrame;

2import java.awt.Graphics;

3class BienvenidoAuto extends JFrame

{

4 public BienvenidoAuto()

{

5

super("programacin en Java");

6

setSize(300,100);

7

setVisible(true);

}

8 public void paint(Graphics g)

{

9 g.drawString("Hola!... Mi primer programa con Java - Autonomo,40,40);

}

10 public static void main(String args[])

{

11

BienvenidoAuto miprograma = new BienvenidoAuto();

12 miprograma.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

Anlisis programa

Lnea 1: Indica que el programa utiliza la clase JFrame XE "JFrame" del paquete javax.swing para mostrar un marco.Lnea 2: La aplicacin utiliza la clase Graphics XE "Graphics" del paquete java.awt, la cual permite dibujar grficos, como texto, lneas, etc.

Lnea 3: Se define el nombre de la clase, en este caso BienvenidoAuto. Tambin contiene la palabra clave extends XE "extends" que indica que la clase BienvenidoAuto hereda los atributos (datos) y comportamientos (mtodos) existentes de la clase JFrame. Lnea 4: Se crea un constructor el cual es un mtodo que tiene el mismo nombre de la clase; esta se inicializa automticamente cuando se crea un objeto de la clase.

Lnea 5: La palabra reservada super XE "super" permite acceder a los datos y mtodos de la clase que se est heredando. El uso de esta es opcional, pero en caso de utilizarse debe ser obligatoriamente la primera instruccin del constructor. Para el ejemplo se utilizo super para colocarle un titulo al marco.

Lnea 6: el mtodo setSize XE "setSize" (int, int) permite definir el tamao de un marco. El primer parmetro es el ancho y el segundo es el alto.

Lnea 7: el mtodo setVisible XE "setVisible" (), permite mostrar el marco. Si el parmetro es true, permitir visualizar el marco, si por el contrario es false se esconder el marco.

Lnea 8: se crea un mtodo llamado paint XE "paint" (pintar), el cual se ejecuta automticamente, y tiene como parmetro un objeto de tipo Graphics, en este caso g, que le sirve al mtodo para dibujar grficos. Tiene dos palabras clave: public que permite que el mtodo sea llamado desde la clase y void XE "void" que indica que el mtodo no retorna datos cuando termine su tarea.

Lnea 9: el mtodo drawString XE "drawString" de la clase Graphics que utiliza el parmetro g, permite dibujar una cadena de caracteres en el marco. Dicho mtodo recibe tres parmetros: el primero es la cadena de caracteres que va a dibujar, el segundo es la coordenada x y el tercer es la coordenada y.

Lnea 10: Se declara el mtodo principal main XE "main" (todo programa autnomo debe contener dicho mtodo). La declaracin debe ser siempre la misma, es decir, siempre que se cree un programa autnomo debe tener como mnimo los siguientes parmetros: public, es el modificador de acceso. El parmetro static XE "static" indica que la funcin es esttica, por lo cual no puede ser generada ninguna instancia (uso de new) de un elemento static puesto que solo existe una instancia. La palabra clave void se incluye para definir que la funcin no devuelve ningn valor; main es el nombre de la funcin y String [] args es un arreglo de tipo String llamado args.Lnea 11: Se crea un objeto miprograma al cual se le asigna memoria de tipo BienvenidoAuto () por intermedio del operador new XE "new" .

Lnea 12: Se utiliza el mtodo setDefaultCloseOperation XE "setDefaultCloseOperation" () para cerrar la aplicacin.Compilacin y ejecucin del programa autnomo

Es necesario guardar el archivo con el nombre definido en la clase, en este caso BienvenidoAuto y con extensin ".java" (se debe tener en cuenta como est escrito el nombre de la clase porque para el compilador de Java "Primero" es diferente de "primero"). Los siguientes pasos se pueden omitir si trabaja con cualquier programa que permita compilar y ejecutar aplicaciones de Java (Ej. RealJ): Para compilarlo, desde el prompt de la interfaz de comandos y ubicado en la carpeta donde se guardo el archivo fuente (.java), se debe digitar:

javac <

javac BienvenidoAuto.java

Si el programa no genera ningn error de compilacin este creara un archivo del mismo nombre pero con extensin .class

(BienvenidoAuto.class)

Para ejecutar el programa se debe digitar:

java

java BienvenidoAuto

Al ejecutarse se visualizara la siguiente pantalla:

Figura 2.1. Ejecucin programa autnomo BienvenidoAuto

Nota; tambin puede compilarlo y ejecutarlo con realj (ver anexo A, pgina 249).b) Subprograma Applet

1import javax.swing.JApplet;

2import java.awt.Graphics;

3

public class BienvenidoApp extends JApplet

{

4 public void paint (Graphics g)

{

5 super.paint(g);

6 g.drawString("Hola!... Mi primer programa con Java - Applet ",25,25);

}

}

Anlisis programa

Lnea 1: Indica que el programa utiliza la clase JApplet XE "JApplet" del paquete javax.swing para mostrar una ventana.

Lnea 2: La aplicacin utiliza la clase Graphics del paquete java.awt, la cual permite dibujar grficos, como texto, lneas, etc.

Lnea 3: Se define el nombre de la clase BienvenidoApp. Tambin contiene la palabra clave extends que indica que la clase BienvenidoApp hereda los atributos (datos) y comportamientos (mtodos) existentes de la clase JApplet. Lnea 4: se crea un mtodo llamado paint (pintar), el cual se ejecuta automticamente, y que tiene como parmetro un objeto de tipo Graphics, en este caso g, que le sirve al mtodo para dibujar grficos. Tiene dos palabras clave: public que permite que el mtodo sea llamado desde la clase y void que indica que el mtodo no retorna datos cuando termine su tarea.

Lnea 5: Se hace un llamado al mtodo paint de la superclase JApplet.

Lnea 6: el mtodo drawString de la clase Graphics que utiliza el parmetros g, permite dibujar una cadena de caracteres en el marco. Dicho mtodo recibe tres parmetros: el primero es la cadena de caracteres que va a dibujar, el segundo es la coordenada x y el tercer es la coordenada y.Compilacin y ejecucin del subprograma Applet

Para compilarlo, desde el prompt de la interfaz de comandos y ubicado en la carpeta donde guardo el archivo fuente (.java), se debe digitar:

javac

Donde height y width indican el tamao de la ventana en pixeles.

En el ejemplo sera:

luego de creado el programa html, para ejecutarlo, se debe digitar:

appletviewer

appletviewer BienvenidoApp.html

Otra forma de ejecutar el Applet, es abrir el archivo .html desde un navegador de Internet.

Al ejecutarse, se visualizara la siguiente pantalla:

Figura 2.2. Ejecucin subprograma Applet BienvenidoApp

Nota; tambin puede compilarlo y ejecutarlo con realj (ver anexo A, pgina 249).3. Estructuras de Control

3.1. Estructura de alternativa simple if

La estructura de alternativa simple if XE "if" ejecuta una determinada accin cuando se cumple una condicin. La seleccin if evala la condicin y:

Si la condicin es verdadera, ejecuta la accin if (o acciones caso de ser S1 una accin compuesta y constar de varias acciones) y continua con el resto del programa.

Si la condicin es falsa, no entra al if, pero contina con el resto del programa.

if (condicin verdadera)

{ S1 }

Resto del programa

3.1.1. Ejemplo prctico if crear un programa autnomo y un applet que capture una nota de un estudiante, si la nota es mayor o igual a tres, deber imprimir en la ventana Aprob la materia... Felicitaciones.

a) Programa Applet

1import javax.swing.*;

2import java.awt.*;

3import java.awt.event.*;

4public class IfSimple extends JApplet implements ActionListener

{

5 JLabel etiqueta;

6 JTextField entrada;

7 float nota;

8 public void init()

{

9 Container contenedor=getContentPane();

10 contenedor.setLayout(new FlowLayout());

11 etiqueta=new JLabel("Digite nota y pulse Enter:");

12 entrada=new JTextField(10);

13 contenedor.add(etiqueta);

14 contenedor.add(entrada);

15 entrada.addActionListener(this);

}

16 public void paint(Graphics g)

{

17 super.paint(g);

18 if(nota>=3.0)

19 g.drawString("Aprob la materia... Felicitaciones",30,60);

}

20 public void actionPerformed(ActionEvent e)

{

21 if(e.getSource()==entrada){

22 nota=Float.parseFloat(entrada.getText());

}

23 repaint();

}

}

Anlisis programa

Lnea 1: Indica que el programa puede utilizar las clases que pertenecen al paquete javax.swing XE "javax.swing" .Lnea 2: La aplicacin puede utilizar las clases del paquete java.awt.Lnea 3: el paquete awt.event proporciona las clases e interfaces para diversos eventos que se pueden utilizando Listeners (oidores).

Lnea 4: Se define la clase pblica IfSimple. Tambin contiene la palabra clave extends que indica que la clase IfSimple hereda los atributos (datos) y comportamientos (mtodos) existentes en la clase JApplet. Adems se implementa la interfaz ActionListener utilizando la palabra clave implements. La interfaz ActionListener XE "ActionListener" detecta las acciones que realiza el usuario y las convierte en acciones del programa, por ejemplo: cerrar la ventana al pulsar un botn, al pulsar Enter en una caja de texto, etc. ActionListener es una interface del grupo de los Listeners (oidores). ActionListener tiene un slo mtodo: void actionPerformed XE "actionPerformed" (ActionEvent e) que se usa para detectar y manejar eventos de accin (ActionEvent), los que tienen lugar cuando se produce una accin sobre un elemento del programa.

Lnea 5: La clase JLabel XE "JLabel" (etiqueta) permite crear un objeto donde se puede mostrar un texto no editable.

Lnea 6: La clase JTextField XE "JTextField" (caja de texto) permite crear un objeto donde un usuario puede introducir datos mediante el teclado. Tambin puede mostrar informacin.

Lnea 7: Se crea una variable llamada nota de tipo float.

Lnea 8: El mtodo init XE "init" (), el cual se ejecuta automticamente se utiliza para inicializar los diferentes objetos que sern utilizados por la aplicacin.

Lnea 9: Se crea un objeto llamado contenedor de tipo Container XE "Container" que permite obtener un panel de contenido al que se le pueden adicionar componentes de interfaz grfica de usuario, en este caso los componentes JLabel y JTextField. A dicho objeto se le asigna el mtodo getContentPane XE "getContentPane" (), el cual devuelve la referencia del panel de contenido.

Lnea 10: Se utiliza el mtodo setLayout XE "setLayout" de la clase Container para especificar el administrador de diseo que se va a utilizar en la interfaz de usuario. Se le pasa como argumento un objeto de tipo FlowLayout XE "FlowLayout" que permite colocar los diferentes objetos de la interfaz de usuario de izquierda a derecha en el orden que se coloquen utilizando el mtodo add.

Lnea 11 y 12: Se asigna espacio de memoria utilizando la palabra clave new a los objetos JLabel y JTextField. Al objeto JLabel se le enva como parmetro una cadena de caracteres para que sea mostrada una vez se ejecute el applet. Al objeto JTextField se le enva como parmetro un valor de 10 caracteres de ancho.

Lnea 13 y 14: Se adiciona al contenedor por medio del mtodo add XE "add" los objetos JLabel y JTextField. Lnea 15: Al objeto entrada se le adiciona un oidor para escuchar los eventos que realice dicho objeto utilizando el mtodo addActionListener XE "addActionListener" . Se le enva como parmetro la palabra clave this XE "this" para referirse a s mismo.

Lnea 18: Se utiliza la instruccin de control if para preguntar si el valor de la variable nota es mayor o igual a 3.0. Si la respuesta es verdadera el programa ingresara al if y realizara las operaciones contenidas en la condicin.

Lnea 19: el mtodo drawString de la clase Graphics que utiliza el parmetros g, permite dibujar una cadena de caracteres en la ventana. Dicho mtodo recibe tres parmetros: el primero es la cadena de caracteres que va a dibujar, el segundo es la coordenada x y el tercero es la coordenada y.

Lnea 20: el mtodo actionPerformed (ActionEvent e) se invoca cuando se genera un evento de accin (ActionEvent) en este caso en el objeto entrada, y realizara las tareas programadas para este evento.Lnea 21: El mtodo getSource XE "getSource" () de tipo ActionEvent, pregunta si el objeto que ha realizado un evento es entrada. Si la respuesta es verdadera se realizaran las tareas que se programaron en dicha condicin.

Lnea 22: el mtodo parseFloat XE "parseFloat" de la clase Float, permite convertir un String a nmero de tipo float, el cual es asignado a la variable nota. Se le enva como parmetro el objeto entrada obteniendo por medio del mtodo getText XE "getText" () el valor que fue digitado por teclado

Lnea 23: el mtodo repaint XE "repaint" () permite realizar un nuevo llamado al mtodo paint (), para actualizar todas los objetos y variables all contenidas.Compilacin y ejecucin del subprograma Applet

Para compilarlo, desde el prompt de la interfaz de comandos y ubicado en la carpeta donde guardo el archivo fuente (.java), se debe digitar:

javac

Donde height y width indican el tamao de la ventana en pixeles.

En el ejemplo sera:

luego de creado el programa html, para ejecutarlo, se debe digitar:

appletviewer

appletviewer IfSimple.html

Otra forma de ejecutar el Applet, es abrir el archivo .html desde un navegador de Internet.

Al ejecutarse el programa y digitar 3.5 en la caja de texto y pulsar enter, se visualizara la siguiente pantalla:

Figura 3.1. Ejecucin Applet IfSimple

b) Programa Autnomo

1import java.awt.*;

2import java.awt.event.*;

3import javax.swing.*;

4public class IfSimpleAuto extends JFrame implements ActionListener

{

5 JLabel etiqueta;

6 JTextField entrada;

7 float nota;

8 public IfSimpleAuto()

{

9 Container contenedor=getContentPane();

10 contenedor.setLayout(new FlowLayout());

11 etiqueta=new JLabel("Digite nota y pulse Enter:");

12 entrada=new JTextField(10);

13 contenedor.add(etiqueta);

14 contenedor.add(entrada);

15 entrada.addActionListener(this);

16 setSize(300,100);

17

setVisible(true);

}

18 public void paint(Graphics g)

{

19 if(nota>=3.0)

20 g.drawString("Aprob la materia... Felicitaciones",30,60);

}

21 public void actionPerformed(ActionEvent e)

{

22 if(e.getSource()==entrada){

23 nota=Float.parseFloat(entrada.getText());

}

24 repaint();

}

25 public static void main(String args[])

{

26

IfSimpleAuto miprograma = new IfSimpleAuto();

27 miprograma.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

Anlisis programa

Del anterior cdigo solo se explicaran las lneas que fueron modificadas para crear el programa autnomo, las cuales estn sombreadas. Las dems lneas fueron explicadas en el ejemplo del Applet.

Lnea 4: Se define una clase pblica con el nombre IfSimpleAuto. Tambin contiene la palabra clave extends que indica que la clase IfSimpleAuto hereda los atributos (datos) y comportamientos (mtodos) existentes en la clase JFrame. Adems se implemento la interfaz ActionListener utilizando la palabra clave implements.

Lnea 8: Se crea un constructor el cual es un mtodo que tiene el mismo nombre de la clase; este se inicializa automticamente cuando se crea un objeto de la clase.

Lnea 16: el mtodo setSize (int, int) permite definir el tamao de un marco. El primer parmetro es el ancho y el segundo es el alto.

Lnea 17: el mtodo setVisible (), permite mostrar el marco. Si el parmetro es true, permitir visualizar el marco, si por el contrario es false esconder el marco.

Lnea 25: Se declara el mtodo principal main (todo programa autnomo debe contener dicho mtodo). La declaracin debe ser siempre la misma, es decir, siempre que se cree un programa autnomo debe tener como mnimo los siguientes parmetros: public, es el modificador de acceso. El parmetro static indica que la funcin es esttica, por lo cual no puede ser generada ninguna instancia (uso de new) de un elemento static. La palabra clave void se incluye para definir que la funcin no devuelve ningn valor; main es el nombre de la funcin y String [] args es un arreglo de tipo String llamado argsLnea 26: Se crea un objeto miprograma al cual se le asigna memoria de tipo IfSimpleAuto ().

Lnea 27: Se utiliza el mtodo setDefaultCloseOperation () para cerrar la aplicacin.Compilacin y ejecucin del programa autnomo

Para compilarlo, desde el prompt de la interfaz de comandos y ubicado en la carpeta donde guardo el archivo fuente (.java), se debe digitar:

javac <

javac IfSimpleAuto.java

Si el programa no genera ningn error de compilacin este creara un archivo del mismo nombre pero con extensin .class

(IfSimpleAuto.class) Para ejecutar el programa se debe digitar:

java

java IfSimpleAuto

Al ejecutarse y digitar 3.2 en la caja de texto y al pulsar enter, se visualizara la siguiente pantalla:

Figura 3.2. Ejecucin programa autnomo IfSimpleAuto

3.2. Estructura de alternativa compuesta if - else XE "if - else" Esta estructura permite elegir entre dos opciones o alternativas posibles, es decir, que realiza una accin S1, si la condicin es verdadera y otra accin S2, si la condicin es falsa.

if (condicin verdadera )

{ S1}

else

{ S2}

Resto del programa

3.2.1. Ejemplo prctico if-else Crear un programa Autnomo y un Applet que capture una nota de un estudiante. Si la nota es mayor o igual a 3.0 deber mostrar el mensaje Aprob la materia...Felicitaciones", de lo contrario imprimir el mensaje "Lo sientoReprob la materia".a) Programa Applet

1import javax.swing.*;

2import java.awt.*;

3import java.awt.event.*;

4public class IfCompuestoApp extends JApplet implements ActionListener

{

5 JLabel etiqueta;

6 JTextField entrada;

7 float nota;

8 public void init()

{

9 Container contenedor=getContentPane();

10 contenedor.setLayout(new FlowLayout());

11 etiqueta=new JLabel("Digite nota y pulse Enter:");

12 entrada=new JTextField(10);

13 contenedor.add(etiqueta);

14 contenedor.add(entrada);

15 entrada.addActionListener(this);

}

16 public void paint(Graphics g)

{

17 super.paint(g);

18 if(nota>=3.0)

19 g.drawString("Aprob la materia... Felicitaciones",30,60);

20 else

21 g.drawString("Lo sientoReprob la materia ",30,60);

}

22 public void actionPerformed(ActionEvent e)

{

23 if(e.getSource()==entrada){

24 nota=Float.parseFloat(entrada.getText());

}

25 repaint();

}

}

Al ejecutarse el programa Applet y digitarse el valor de 2 en la caja de texto, se visualizara la siguiente figura:

Figura 3.3. Ejecucin subprograma IfCompuestoAppb) Programa Autnomo

1import java.awt.*;

2import java.awt.event.*;

3import javax.swing.*;

3public class IfCompuestoAuto extends JFrame implements ActionListener

4{

5 JLabel etiqueta;

6 JTextField entrada;

7 float nota;

8 public IfCompuestoAuto()

{

9 Container contenedor=getContentPane();

10 contenedor.setLayout(new FlowLayout());

11 etiqueta=new JLabel("Digite nota y pulse Enter:");

12 entrada=new JTextField(10);

13 contenedor.add(etiqueta);

14 contenedor.add(entrada);

15 entrada.addActionListener(this);

16 setSize(300,100);

17

setVisible(true);

}

18 public void paint(Graphics g)

{

19 if(nota>=3.0)

20 g.drawString("Aprob la materia... Felicitaciones",30,60);

21 else

22 g.drawString("Lo sientoReprob la materia ",30,60);

}

23 public void actionPerformed(ActionEvent e)

{

24 if(e.getSource()==entrada){

25 nota=Float.parseFloat(entrada.getText());

}

26 repaint();

}

27 public static void main(String args[])

{

28

IfCompuestoAuto miprograma = new IfCompuestoAuto();

29 miprograma.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

Anlisis de los programas

Tanto en el programa autnomo como en el Applet se incluyeron solamente dos lneas exactamente iguales. En el autnomo se incluyeron las lneas 21 y 22 y en el applet las lneas 20 y 21. En la primera lnea se utiliza la palabra reservada else (sino) que permitir tomar la decisin si la condicin es falsa, donde se visualizara el texto lo sientoReprob la materia.

Al ejecutarse el programa autnomo y digitarse el valor de 2 en la caja de texto, se visualizara la siguiente figura:

Figura 3.4. Ejecucin programa IfCompuestoAuto

3.3. Estructura de alternativa mltiple switch- case XE "switch- case" En algunos casos son necesarias ms de dos alternativas de solucin a un problema. Esto se podra resolver por estructuras alternativas simples o compuestas anidadas; sin embargo, este mtodo si el nmero de alternativas es demasiado grande puede plantear serios problemas de escritura del algoritmo y naturalmente de legibilidad.

La estructura de alternativa mltiple switch case evala una expresin que puede tomar n valores distintos, 1, 2, 3, 4,..., n. Segn el valor de la expresin, se realizar una de las n acciones.

switch(variable){

case valor1:

acciones1;

break,

case valor2:

acciones2;

break,

case valor3:

acciones3;

break,

:::::::::

:::::::::

default:

otras_acciones;

}

3.3.1. Ejemplo prctico switch-case Crear un programa autnomo y un applet que permita digitar un carcter n veces e imprima la cantidad de vocales que se digitan.a) Subprograma Applet

1import java.awt.*;

2import java.awt.event.*;

3import javax.swing.*;

4public class CaseApp extends JApplet implements ActionListener

{

5 JLabel etiqueta;

6 JTextField entrada;

7 int ctaa=0,ctae=0,ctai=0,ctao=0,ctau=0;

8 public void init()

{

9 Container contenedor=getContentPane();

10 contenedor.setLayout(new FlowLayout());

11 etiqueta=new JLabel("Digite una letra:");

12 entrada=new JTextField(10);

13 contenedor.add(etiqueta);

14 contenedor.add(entrada);

15 entrada.addActionListener(this);

}

16 public void paint (Graphics g)

{

17 super.paint(g);

18 g.drawString("Totales para cada vocal:",25,40);

19 g.drawString("A:"+ctaa,25,55);

20 g.drawString("E:"+ctae,25,70);

21 g.drawString("I:"+ctai,25,85);

22 g.drawString("O:"+ctao,25,100);

23 g.drawString("U:"+ctau,25,115);

}

24 public void actionPerformed(ActionEvent e)

{

25 if(e.getSource()==entrada){

26 char vocal=(entrada.getText()).charAt(0);

27 entrada.setText("");

28 switch(vocal){

29 case 'A':case 'a':

30 ++ctaa;

31 break;

32 case 'E':case 'e':

33 ++ctae;

34 break;

35 case 'I':case 'i':

36 ++ctai;

37 break;

38 case 'O':case 'o':

39 ++ctao;

40 break;

41 case 'U':case 'u':

42 ++ctau;

43 break;

44 default:

45 showStatus("Vocal no existe. Digite Nuevamente.");

46 break;

}

47 repaint();

}

}

}

Anlisis programa

Lnea 7: Se crean y se inicializan las variables ctaa, ctae, ctai, ctao, ctau, con un valor de cero (0), que servirn para llevar el acumulado de cada una de las vocales que el usuario ira digitando.

Lnea 18 - 23: Se imprime por pantalla la cantidad de cada vocal que el usuario ha digitado.

Lnea 26: Se crea una variable llamada vocal de tipo char que permitir almacenar cada una de las vocales que el usuario digitar. Se utiliza el mtodo charAt XE "charAt" (n) de la clase String, el cual permite seleccionar un carcter en una posicin n de una cadena de caracteres. En el ejemplo se utiliza charAt en la posicin 0, lo que permite extraer de la caja de texto entrada el carcter en la posicin cero.

Lnea 27: Se utiliza el mtodo setText XE "setText" (), al cual se le enva como parmetro dobles comillas sin espacio para limpiar la caja de texto entrada.Lnea 28 - 46: La palabra reservada switch XE "switch" va seguida de la variable vocal. El valor de la variable se compara con cada uno de los case XE "case" para determinar que tipo de vocal digit el usuario. Por cada case debe existir un break XE "break" para permitir a la estructura switch salir cuando se encuentre el caso especifico. Si no se encuentra el case que cumpla con el valor de la variable vocal, se tomar la alternativa default que en este caso mostrar el mensaje Vocal no existe. Digite Nuevamente. Para esto se utiliza el mtodo showStatus XE "showStatus" que permite visualizar el mensaje en la barra de estado del applet.

Al compilar y ejecutar el Applet se visualizara la siguiente figura:

Figura 3.5. Ejecucin programa CaseApp

b) Programa Autnomo

1import java.awt.*;

2import java.awt.event.*;

3import javax.swing.*;

4public class CaseAuto extends JFrame implements ActionListener

{

5 JLabel etiqueta;

6 JTextField entrada;

7 int ctaa=0,ctae=0,ctai=0,ctao=0,ctau=0;

8 public CaseAuto()

{

9 Container contenedor=getContentPane();

10 contenedor.setLayout(new FlowLayout());

11 etiqueta=new JLabel("Digite una letra:");

12 entrada=new JTextField(10);

13 contenedor.add(etiqueta);

14 contenedor.add(entrada);

15 entrada.addActionListener(this);

16 setSize(300,300);

17 setVisible(true);

}

18 public void paint (Graphics g)

{

19 g.drawString("Totales para cada vocal:",25,80);

20 g.drawString("A:"+ctaa,25,95);

21 g.drawString("E:"+ctae,25,110);

22 g.drawString("I:"+ctai,25,125);

23 g.drawString("O:"+ctao,25,140);

24 g.drawString("U:"+ctau,25,155);

}

25 public void actionPerformed(ActionEvent e)

{

26 if(e.getSource()==entrada){

27 char vocal=(entrada.getText()).charAt(0);

28 entrada.setText("");//borra campo de texto

29 switch(vocal){

30 case 'A':case 'a':

31 ++ctaa;

32 break;

33 case 'E':case 'e':

34 ++ctae;

35 break;

36 case 'I':case 'i':

37 ++ctai;

38 break;

39 case 'O':case 'o':

40 ++ctao;

41 break;

42 case 'U':case 'u':

43 ++ctau;

44 break;

45 default:

46

JOptionPane.showMessageDialog( null, "No es una

vocal..","Resultado", JOptionPane.PLAIN_MESSAGE );

47 System.exit( 0 );

48 break;

}

49 repaint();

}

}

50 public static void main(String[] args)

{

51 CaseAuto miprograma= new CaseAuto();

52 miprograma.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

Anlisis programa

Lnea 46: Para visualizar un cuadro de dialogo en un programa autnomo se utiliza el mtodo showMessageDialog XE "showMessageDialog" () de la clase JOptionPane. En este caso al mtodo se le envan cuatro argumentos separados por comas (,): el primero es la palabra reservada null, el segundo argumento que es el mensaje que se va a mostrar, el tercero en el titulo del cuadro de dialogo y el ltimo es el tipo de cuadro de dialogo.

Lnea 47: Se utiliza el mtodo exit XE "exit" (), de la clase System para terminar la aplicacin. Solo se ejecutara cuando el usuario digite una letra que no sea una vocal. Es una buena prctica terminar las aplicaciones de este modo cuando se trabaja con interfaz grafica de usuario.

Al compilar y ejecutar el programa Autnomo se visualizara la siguiente figura:

Figura 3.6. Ejecucin programa CaseAuto

3.4. Estructura de repeticin for

La estructura de repeticin for XE "for" ejecuta una accin mientras una condicin sea verdadera. Su formato es:

for(inicializacin; condicin _ verdadera; incremento decremento)

{

accin;

}

3.4.1. Ejemplo prctico for Crear un programa autnomo y un applet que imprima los nmeros pares entre 2 y 30, as como su sumatoria.

a) Subprograma Applet

1import java.awt.*;

2import java.awt.event.*;

3import javax.swing.*;

4public class CicloFor extends JApplet

{

5 int suma=0,numero;

6 public void init()

{

7 Container contenedor=getContentPane();

8 contenedor.setLayout(new FlowLayout());

}

10 public void paint (Graphics g)

11 {

12 int posy=40;

13 super.paint(g);

14 g.drawString("Impresion de los numeros pares entre 2 y 30",25,25);

15 for (numero=2;numero