2. Programas Java – Swing

Anuncio
2. Programas Java – Swing
Todos los ejemplos que encontrará en este libro se realizan utilizando el paquete 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 gráficas 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 gráficas con el usuario se realizaban a través 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 utilizan la infraestructura de awt, incluyendo el modelo de
eventos awt, el cual rige cómo un componente que reacciona a eventos de teclado,
mouse, etc. Es por esto, que la mayoría de los programas Swing necesitan importar dos
paquetes awt: java.awt.* y java.awt.event.*.
Tabla 2.1. Paquetes de java swing
Paquete
javax.swing
Descripción
Es el paquete tal vez más importante de swing, contiene las clases
necesarias para crear ventanas y colocar objetos sencillos en una
interfaz gráfica.
javax.swing.border
Contiene clases que permiten especificar bordes personalizados a
los diferentes objetos de la interfaz gráfica.
Contiene clases que permiten definir, especificar y seleccionar
javax.swing.colorchooser colores para diversos objetos.
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 El “FileChooser” es un componente de swing que permite navegar
por los archivos de la máquina, tal como lo hace el explorador de
Windows.
javax.swing.plaf.*
Este paquete permite dar una apariencia uniforme a una aplicación.
Contiene apariencias estándares de las aplicaciones basadas en
Windows y otros sistemas operativos
javax.swing.table
El componente JTable es uno de los componentes que añadió swing
para lograr crear interfaces que muestren datos en una cuadrícula y
muchas otras funcionalidades.
javax.swing.text
Paquete que contiene clases para dar formato a textos y en general
para realizar una manipulación gráfica de textos y mostrarla al
usuario con algunos efectos.
javax.swing.text.html.*
Clases que permiten manipular documentos en formato HTML.
javax.swing.text.rtf
El “RTF” es un visualizador de texto que se puede utilizar haciendo
referencia a este paquete.
javax.swing.tree
El componente JTree es uno de los componentes más sofisticados y
completos que incorpora swing. Dicho componente permite entre
otras cosas realizar búsquedas en árboles, mostrar árboles con la
javax.swing.undo
javax.accessibility
apariencia de un explorador de archivos y muchas otras cosas.
Permite realizar aplicaciones que incorporen la funcionalidad de
rehacer y deshacer.
Clases que permiten dar funcionalidad a las aplicaciones para que
sean utilizadas por personas con discapacidades.
2.1. Creación de un primer programa en Java
Java es un lenguaje de programación con el que pueden crearse aplicaciones autónomas
y applets (basados en un explorador). Los programas autónomos 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 código de maquina virtual el cual se
puede ejecutar desde cualquier plataforma. Los programas autónomos 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
extensión ".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, página 249).
En el análisis de cada programa se hacen los respectivos comentarios del código
omitiendo en ocasiones aquellos que ya han sido comentados en programas anteriores.
2.2. Ejemplo práctico

Realizar un programa que imprima en pantalla el siguiente mensaje: "Hola!... Mi
primer programa con Java”. Dicho programa debe realizarse como un programa
Autónomo y un Applet.
a) Programa Autónomo
1
2
3
import javax.swing.JFrame;
import java.awt.Graphics;
class BienvenidoAuto extends JFrame
{
4
public BienvenidoAuto()
{
5
super("programación 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);
}
}
Análisis programa
Línea 1: Indica que el programa utiliza la clase JFrame del paquete javax.swing para
mostrar un marco.
Línea 2: La aplicación utiliza la clase Graphics del paquete java.awt, la cual permite
dibujar gráficos, como texto, líneas, etc.
Línea 3: Se define el nombre de la clase, en este caso “BienvenidoAuto”. También
contiene la palabra clave extends que indica que la clase BienvenidoAuto hereda los
atributos (datos) y comportamientos (métodos) existentes de la clase JFrame.
Línea 4: Se crea un constructor el cual es un método que tiene el mismo nombre de la
clase; esta se inicializa automáticamente cuando se crea un objeto de la clase.
Línea 5: La palabra reservada super permite acceder a los datos y métodos de la clase
que se está heredando. El uso de esta es opcional, pero en caso de utilizarse debe ser
obligatoriamente la primera instrucción del constructor. Para el ejemplo se utilizo super
para colocarle un titulo al marco.
Línea 6: el método setSize(int, int) permite definir el tamaño de un marco. El primer
parámetro es el ancho y el segundo es el alto.
Línea 7: el método setVisible(), permite mostrar el marco. Si el parámetro es true,
permitirá visualizar el marco, si por el contrario es false se esconderá el marco.
Línea 8: se crea un método llamado paint (pintar), el cual se ejecuta automáticamente,
y tiene como parámetro un objeto de tipo Graphics, en este caso g, que le sirve al
método para dibujar gráficos. Tiene dos palabras clave: public que permite que el
método sea llamado desde la clase y void que indica que el método no retorna datos
cuando termine su tarea.
Línea 9: el método drawString de la clase Graphics que utiliza el parámetro g,
permite dibujar una cadena de caracteres en el marco. Dicho método recibe tres
parámetros: el primero es la cadena de caracteres que va a dibujar, el segundo es la
coordenada x y el tercer es la coordenada y.
Línea 10: Se declara el método principal main (todo programa autónomo debe contener
dicho método). La declaración debe ser siempre la misma, es decir, siempre que se cree
un programa autónomo debe tener como mínimo los siguientes parámetros: public, es el
modificador de acceso. El parámetro static indica que la función es estática, 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 función no
devuelve ningún valor; main es el nombre de la función y String [] args es un arreglo
de tipo String llamado args.
Línea 11: Se crea un objeto miprograma al cual se le asigna memoria de tipo
BienvenidoAuto () por intermedio del operador new.
Línea 12: Se utiliza el método setDefaultCloseOperation() para cerrar la aplicación.
Compilación y ejecución del programa autónomo
Es necesario guardar el archivo con el nombre definido en la clase, en este caso
BienvenidoAuto y con extensión ".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 <nombre del programa con extensión>< <enter>
javac BienvenidoAuto.java <enter>

Si el programa no genera ningún error de compilación este creara un archivo del
mismo nombre pero con extensión .class
(BienvenidoAuto.class)

Para ejecutar el programa se debe digitar:
java <nombre del programa> <enter>
java BienvenidoAuto <enter>
Al ejecutarse se visualizara la siguiente pantalla:
Figura 2.1. Ejecución programa autónomo “BienvenidoAuto”
Nota; también puede compilarlo y ejecutarlo con realj (ver anexo A, página 249).
b) Subprograma Applet
1
2
3
4
5
6
import javax.swing.JApplet;
import java.awt.Graphics;
public class BienvenidoApp extends JApplet
{
public void paint (Graphics g)
{
super.paint(g);
g.drawString("Hola!... Mi primer programa con Java - Applet ",25,25);
}
}
Análisis programa
Línea 1: Indica que el programa utiliza la clase JApplet del paquete javax.swing para
mostrar una ventana.
Línea 2: La aplicación utiliza la clase Graphics del paquete java.awt, la cual permite
dibujar gráficos, como texto, líneas, etc.
Línea 3: Se define el nombre de la clase “BienvenidoApp”. También contiene la
palabra clave extends que indica que la clase BienvenidoApp hereda los atributos
(datos) y comportamientos (métodos) existentes de la clase JApplet.
Línea 4: se crea un método llamado paint (pintar), el cual se ejecuta automáticamente,
y que tiene como parámetro un objeto de tipo Graphics, en este caso g, que le sirve al
método para dibujar gráficos. Tiene dos palabras clave: public que permite que el
método sea llamado desde la clase y void que indica que el método no retorna datos
cuando termine su tarea.
Línea 5: Se hace un llamado al método paint de la superclase JApplet.
Línea 6: el método drawString de la clase Graphics que utiliza el parámetros g,
permite dibujar una cadena de caracteres en el marco. Dicho método recibe tres
parámetros: el primero es la cadena de caracteres que va a dibujar, el segundo es la
coordenada x y el tercer es la coordenada y.
Compilación y ejecución 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 <nombre del programa con extensión< <enter>
javac BienvenidoApp.java <enter>

Si el programa no genera ningún error de compilación este creara un archivo del
mismo nombre pero con extensión .class
(BienvenidoApp.class)

Luego se debe crear un archivo del mismo nombre pero con extensión html
(BienvenidoApp.html) desde cualquier editor de texto, con las siguientes
instrucciones:
<html>
<Applet code="<nombre del programa con extension .class"> width=300
height=200></applet>
<html>
Donde height y width indican el tamaño de la ventana en pixeles.
En el ejemplo sería:
<html>
<Applet code=" BienvenidoApp.class" width=300 height=200></applet>
<html>

luego de creado el programa html, para ejecutarlo, se debe digitar:
appletviewer <nombre del programa con extensión html> <enter>
appletviewer BienvenidoApp.html <enter>

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. Ejecución subprograma Applet ”BienvenidoApp”
Nota; también puede compilarlo y ejecutarlo con realj (ver anexo A, página 249).
3. Estructuras de Control
3.1. Estructura de alternativa simple if
La estructura de alternativa simple if ejecuta una determinada acción cuando se cumple
una condición. La selección if evalúa la condición y:
 Si la condición es verdadera, ejecuta la acción if (o acciones caso de ser S1 una
acción compuesta y constar de varias acciones) y continua con el resto del
programa.
 Si la condición es falsa, no entra al if, pero continúa con el resto del programa.
if (condición verdadera)
{ S1 }
Resto del programa
3.1.1. Ejemplo práctico if

crear un programa autónomo 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
1
2
3
4
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public 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();
}
}
Análisis programa
Línea 1: Indica que el programa puede utilizar las clases que pertenecen al paquete
javax.swing.
Línea 2: La aplicación puede utilizar las clases del paquete java.awt.
Línea 3: el paquete awt.event proporciona las clases e interfaces para diversos eventos
que se pueden utilizando Listeners (oidores).
Línea 4: Se define la clase pública IfSimple. También contiene la palabra clave
extends que indica que la clase IfSimple hereda los atributos (datos) y
comportamientos (métodos) existentes en la clase JApplet. Además se implementa la
interfaz ActionListener utilizando la palabra clave implements. La interfaz
ActionListener detecta las acciones que realiza el usuario y las convierte en acciones
del programa, por ejemplo: cerrar la ventana al pulsar un botón, al pulsar Enter en una
caja de texto, etc. ActionListener es una interface del grupo de los Listeners (oidores).
ActionListener tiene un sólo método: void actionPerformed(ActionEvent e) que se
usa para detectar y manejar eventos de acción (ActionEvent), los que tienen lugar
cuando se produce una acción sobre un elemento del programa.
Línea 5: La clase JLabel (etiqueta) permite crear un objeto donde se puede mostrar un
texto no editable.
Línea 6: La clase JTextField (caja de texto) permite crear un objeto donde un usuario
puede introducir datos mediante el teclado. También puede mostrar información.
Línea 7: Se crea una variable llamada nota de tipo float.
Línea 8: El método init(), el cual se ejecuta automáticamente se utiliza para inicializar
los diferentes objetos que serán utilizados por la aplicación.
Línea 9: Se crea un objeto llamado contenedor de tipo Container que permite obtener
un panel de contenido al que se le pueden adicionar componentes de interfaz gráfica de
usuario, en este caso los componentes JLabel y JTextField. A dicho objeto se le asigna
el método getContentPane(), el cual devuelve la referencia del panel de contenido.
Línea 10: Se utiliza el método setLayout de la clase Container para especificar el
administrador de diseño que se va a utilizar en la interfaz de usuario. Se le pasa como
argumento un objeto de tipo FlowLayout que permite colocar los diferentes objetos de
la interfaz de usuario de izquierda a derecha en el orden que se coloquen utilizando el
método add.
Línea 11 y 12: Se asigna espacio de memoria utilizando la palabra clave new a los
objetos JLabel y JTextField. Al objeto JLabel se le envía como parámetro una cadena
de caracteres para que sea mostrada una vez se ejecute el applet. Al objeto JTextField
se le envía como parámetro un valor de 10 caracteres de ancho.
Línea 13 y 14: Se adiciona al contenedor por medio del método add los objetos JLabel
y JTextField.
Línea 15: Al objeto entrada se le adiciona un oidor para escuchar los eventos que
realice dicho objeto utilizando el método addActionListener. Se le envía como
parámetro la palabra clave this para referirse a sí mismo.
Línea 18: Se utiliza la instrucción 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 condición.
Línea 19: el método drawString de la clase Graphics que utiliza el parámetros g,
permite dibujar una cadena de caracteres en la ventana. Dicho método recibe tres
parámetros: el primero es la cadena de caracteres que va a dibujar, el segundo es la
coordenada x y el tercero es la coordenada y.
Línea 20: el método actionPerformed (ActionEvent e) se invoca cuando se genera un
evento de acción (ActionEvent) en este caso en el objeto entrada, y realizara las tareas
programadas para este evento.
Línea 21: El método 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 condición.
Línea 22: el método parseFloat de la clase Float, permite convertir un String a
número de tipo float, el cual es asignado a la variable nota. Se le envía como parámetro
el objeto entrada obteniendo por medio del método getText() el valor que fue digitado
por teclado
Línea 23: el método repaint() permite realizar un nuevo llamado al método paint (),
para actualizar todas los objetos y variables allí contenidas.
Compilación y ejecución 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 <nombre del programa con extensión< <enter>
javac IfSimple.java <enter>

Si el programa no genera ningún error de compilación este creara un archivo del
mismo nombre con extensión .class
(IfSimple.class)

Luego se debe crear un archivo del mismo nombre pero con extensión html
(PrimeroApp.html) desde cualquier editor de texto, con las siguientes
instrucciones:
<html>
<Applet code="<nombre del programa con extensión .class"> width=300
height=200></applet>
<html>
Donde height y width indican el tamaño de la ventana en pixeles.
En el ejemplo sería:
<html>
<Applet code=" IfSimple.class" width=300 height=200></applet>
<html>

luego de creado el programa html, para ejecutarlo, se debe digitar:
appletviewer <nombre del programa con extensión html> <enter>
appletviewer IfSimple.html <enter>

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. Ejecución Applet IfSimple
b) Programa Autónomo
1
2
3
4
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class IfSimpleAuto extends JFrame implements
{
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);
}
ActionListener
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);
}
}
Análisis programa
Del anterior código solo se explicaran las líneas que fueron modificadas para crear el
programa autónomo, las cuales están sombreadas. Las demás líneas fueron explicadas
en el ejemplo del Applet.
Línea 4: Se define una clase pública con el nombre IfSimpleAuto. También contiene la
palabra clave extends que indica que la clase IfSimpleAuto hereda los atributos (datos)
y comportamientos (métodos) existentes en la clase JFrame. Además se implemento la
interfaz ActionListener utilizando la palabra clave implements.
Línea 8: Se crea un constructor el cual es un método que tiene el mismo nombre de la
clase; este se inicializa automáticamente cuando se crea un objeto de la clase.
Línea 16: el método setSize (int, int) permite definir el tamaño de un marco. El primer
parámetro es el ancho y el segundo es el alto.
Línea 17: el método setVisible (), permite mostrar el marco. Si el parámetro es true,
permitirá visualizar el marco, si por el contrario es false esconderá el marco.
Línea 25: Se declara el método principal main (todo programa autónomo debe contener
dicho método). La declaración debe ser siempre la misma, es decir, siempre que se cree
un programa autónomo debe tener como mínimo los siguientes parámetros: public, es el
modificador de acceso. El parámetro static indica que la función es estática, 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 función no devuelve ningún valor; main es el
nombre de la función y String [] args es un arreglo de tipo String llamado args
Línea 26: Se crea un objeto miprograma al cual se le asigna memoria de tipo
IfSimpleAuto ().
Línea 27: Se utiliza el método setDefaultCloseOperation () para cerrar la aplicación.
Compilación y ejecución del programa autónomo

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 <nombre del programa con extensión>< <enter>
javac IfSimpleAuto.java <enter>

Si el programa no genera ningún error de compilación este creara un archivo del
mismo nombre pero con extensión .class
(IfSimpleAuto.class)

Para ejecutar el programa se debe digitar:
java <nombre del programa> <enter>
java IfSimpleAuto <enter>
Al ejecutarse y digitar 3.2 en la caja de texto y al pulsar enter, se visualizara la
siguiente pantalla:
Figura 3.2. Ejecución programa autónomo “IfSimpleAuto”
3.2. Estructura de alternativa compuesta if - else
Esta estructura permite elegir entre dos opciones o alternativas posibles, es decir, que
realiza una acción S1, si la condición es verdadera y otra acción S2, si la condición es
falsa.
if (condición verdadera )
{ S1}
else
{ S2}
Resto del programa
3.2.1. Ejemplo práctico if-else

Crear un programa Autónomo 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
siento…Reprobó la materia".
a) Programa Applet
1
2
3
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
4
public 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 siento…Reprobó 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. Ejecución subprograma IfCompuestoApp
b) Programa Autónomo
1 import java.awt.*;
2 import java.awt.event.*;
3 import javax.swing.*;
3 public class IfCompuestoAuto extends JFrame implements
4 {
5 JLabel etiqueta;
6 JTextField entrada;
ActionListener
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 siento…Reprobó 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);
}
}
Análisis de los programas
Tanto en el programa autónomo como en el Applet se incluyeron solamente dos líneas
exactamente iguales. En el autónomo se incluyeron las líneas 21 y 22 y en el applet las
líneas 20 y 21. En la primera línea se utiliza la palabra reservada else (sino) que
permitirá tomar la decisión si la condición es falsa, donde se visualizara el texto “lo
siento…Reprobó la materia”.
Al ejecutarse el programa autónomo y digitarse el valor de 2 en la caja de texto, se
visualizara la siguiente figura:
Figura 3.4. Ejecución programa IfCompuestoAuto
3.3. Estructura de alternativa múltiple switch- case
En algunos casos son necesarias más de dos alternativas de solución a un problema.
Esto se podría resolver por estructuras alternativas simples o compuestas anidadas; sin
embargo, este método si el número de alternativas es demasiado grande puede plantear
serios problemas de escritura del algoritmo y naturalmente de legibilidad.
La estructura de alternativa múltiple switch – case evalúa una expresión que puede
tomar n valores distintos, 1, 2, 3, 4,..., n. Según el valor de la expresión, 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 práctico switch-case

Crear un programa autónomo y un applet que permita digitar un carácter n veces
e imprima la cantidad de vocales que se digitan.
a) Subprograma Applet
1
2
3
4
5
6
7
8
{
9
10
11
12
13
14
15
}
16
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CaseApp extends JApplet implements ActionListener
{
JLabel etiqueta;
JTextField entrada;
int ctaa=0,ctae=0,ctai=0,ctao=0,ctau=0;
public void init()
Container contenedor=getContentPane();
contenedor.setLayout(new FlowLayout());
etiqueta=new JLabel("Digite una letra:");
entrada=new JTextField(10);
contenedor.add(etiqueta);
contenedor.add(entrada);
entrada.addActionListener(this);
public void paint (Graphics g)
{
17
18
19
20
super.paint(g);
g.drawString("Totales para cada vocal:",25,40);
g.drawString("A:"+ctaa,25,55);
g.drawString("E:"+ctae,25,70);
21
22
23
g.drawString("I:"+ctai,25,85);
g.drawString("O:"+ctao,25,100);
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();
}
}
}
Análisis programa
Línea 7: Se crean y se inicializan las variables ctaa, ctae, ctai, ctao, ctau, con un valor
de cero (0), que servirán para llevar el acumulado de cada una de las vocales que el
usuario ira digitando.
Línea 18 - 23: Se imprime por pantalla la cantidad de cada vocal que el usuario ha
digitado.
Línea 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 método charAt(n) de la clase
String, el cual permite seleccionar un carácter en una posición n de una cadena de
caracteres. En el ejemplo se utiliza charAt en la posición 0, lo que permite extraer de la
caja de texto entrada el carácter en la posición cero.
Línea 27: Se utiliza el método setText(), al cual se le envía como parámetro dobles
comillas sin espacio para limpiar la caja de texto entrada.
Línea 28 - 46: La palabra reservada switch va seguida de la variable vocal. El valor de
la variable se compara con cada uno de los case para determinar que tipo de vocal digitó
el usuario. Por cada case debe existir un 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 método
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. Ejecución programa CaseApp
b) Programa Autónomo
1
2
3
4
5
6
7
8
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CaseAuto extends JFrame implements ActionListener
{
JLabel etiqueta;
JTextField entrada;
int ctaa=0,ctae=0,ctai=0,ctao=0,ctau=0;
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);
}
}
Análisis programa
Línea 46: Para visualizar un cuadro de dialogo en un programa autónomo se utiliza el
método showMessageDialog() de la clase JOptionPane. En este caso al método se le
envían 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.
Línea 47: Se utiliza el método exit(), de la clase System para terminar la aplicación.
Solo se ejecutara cuando el usuario digite una letra que no sea una vocal. Es una buena
práctica terminar las aplicaciones de este modo cuando se trabaja con interfaz grafica de
usuario.
Al compilar y ejecutar el programa Autónomo se visualizara la siguiente figura:
Figura 3.6. Ejecución programa CaseAuto
3.4. Estructura de repetición for
La estructura de repetición for ejecuta una acción mientras una condición sea verdadera.
Su formato es:
for(inicialización; condición _ verdadera; incremento ó decremento)
{
acción;
}
3.4.1. Ejemplo práctico for

Crear un programa autónomo y un applet que imprima los números pares entre 2
y 30, así como su sumatoria.
a) Subprograma Applet
1
2
3
4
5
6
7
8
10
11
12
13
14
15
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CicloFor extends JApplet
{
int suma=0,numero;
public void init()
{
Container contenedor=getContentPane();
contenedor.setLayout(new FlowLayout());
}
public void paint (Graphics g)
{
int posy=40;
super.paint(g);
g.drawString("Impresion de los numeros pares entre 2 y 30",25,25);
for (numero=2;numero<=30;numero=numero+2)
{
16
17
18
g.drawString(Integer.toString(numero),25,posy);
posy+=15;
suma=suma+numero;
}
g.drawString("La suma de los números es: "+ suma, 25,posy);
19
}
}
Análisis Programa
Línea 5: Se crean dos variables: suma, la cual es inicializada en cero (0) y servirá para
llevar el acumulado de los números pares, y la variable numero que permitirá asignarle
el valor de lo capturado en la caja de texto entrada.
Línea 12: Se crea una variable posy la cual es inicializada en cuarenta (40) y sirve para
mover la posición de impresión de cada uno de los números pares.
Línea 15 – 18: Se crea el ciclo for, donde se inicializa la variable numero con un valor
de dos (2), se evalúa que la variable numero sea menor o igual a treinta (30). Mientras
la condición sea verdadera se imprimirá en pantalla el numero par, además se irá
incrementando la variable numero de 2 en 2. En la impresión se utiliza el método
toString de la clase Integer para convertir un String a int. En la línea 18 se va llevando
la sumatoria de cada uno de los números pares asignándosele a la variable suma.
Línea 19: Se realiza la impresión de la sumatoria de los números pares entre 2 y 30.
Al ejecutarse, se visualizara la siguiente pantalla:
Figura 3.7. Ejecución programa CicloForApp
b) ProgramaAutónomo
1
2
3
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class CicloForAuto extends JFrame
{
int numero, suma=0;
public CicloForAuto()
{
super("Programa Autonomo");
Container contenedor=getContentPane();
contenedor.setLayout(new FlowLayout());
setSize(400,400);
setVisible(true);
}
public void paint(Graphics g)
{
int posy=55;
g.drawString("Impresion de los numeros pares entre 2 y 30",25,40);
for (numero=2;numero<=30;numero=numero+2)
{
g.drawString(Integer.toString(numero),25,posy);
posy+=15;
suma=suma+numero;
}
g.drawString("La suma de los números es: "+ suma, 25,posy);
}
public static void main(String args[])
{
CicloForAuto miprograma = new CicloForAuto();
miprograma.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Análisis Programa
Línea 7: Se envía al constructor de la clase JFrame el titulo que se quiere mostrar en el
marco.
Al ejecutarse, se visualizara la siguiente pantalla:
Figura No. 3.8. Ejecución programa CicloForAuto
3.5. Estructura de repetición while
La estructura repetitiva while permite repetir una acción mientras la condición sea
verdadera. Cuando se ejecuta la instrucción while, si la condición se evalúa como falsa
no se realiza ninguna acción y el programa prosigue en la siguiente instrucción después
del ciclo. Si la condición es verdadera, se ejecuta las acciones que están en el ciclo.
Este proceso se repetirá mientras la condición sea verdadera.
while( condición_verdadera)
{
acción;
incremento ó decremento;
}
3.5.1. Ejemplo práctico while

Realizar un programa tanto autónomo como applet que permita capturar 10
números enteros e imprimir el mayor y el menor de dichos números.
Nota: Los números enteros pueden estar en el rango de más infinito hasta menos
infinito.
a) Subprograma Applet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CicloWhileApp extends JApplet implements ActionListener
{
JLabel etiqueta;
JTextField entrada;
int auxiliar=0,numero,mayor,menor;
public void init()
{
Container contenedor=getContentPane();
contenedor.setLayout(new FlowLayout());
etiqueta=new JLabel("Digite un numero:");
entrada=new JTextField(10);
contenedor.add(etiqueta);
contenedor.add(entrada);
entrada.addActionListener(this);
}
public void paint (Graphics g)
{
super.paint(g);
if (auxiliar==1)
{
mayor=numero;
menor=numero;
}
if(mayor<numero)
mayor=numero;
if(menor>numero)
24
25
25
menor=numero;
g.drawString("El mayor es:"+mayor,25, 80);
g.drawString("El menor es:"+menor,25, 100);
}
26 public void actionPerformed(ActionEvent e)
{
27 while(auxiliar<10)
{
28
if(e.getSource()==entrada)
{
29
numero=Integer.parseInt(entrada.getText());
30
entrada.setText("");
31
auxiliar++;
32
repaint();
}
}
33
entrada.setEditable(false);
}
}
Análisis programa
Línea 7: Se crean cuatro variables de tipo int: la primera llamada auxiliar, la cual es
inicializada en cero (0) y servirá para llevar la cuenta de los números que se han
digitado, la segunda es numero y servirá para guardar cada uno de los valores
capturados por teclado, la tercera es mayor que servirá para guardar el mayor de los
números capturados y por último menor que servirá para almacenar el menor valor
capturado por teclado.
Línea 18 – 25: Se tiene una primera condición if que pregunta si la variable auxiliar es
igual a 1. Si se cumple la condición se inicializan las variables mayor y menor con el
valor que contenga en ese momento la variable numero. Por otro lado se tiene dos
condiciones if para ir evaluando el valor de mayor y de menor contra el valor de la
variable número. Si se cumple la condición verdadera en alguno de las dos condiciones
if se le asignara el valor de numero a la respectiva variable. Por último se hace una
impresión de las variables mayor y menor. Al ejecutar el programa e ir digitando los
números se irá visualizando el mayor y el menor valor capturado.
Línea 27 – 33: Se crea un ciclo while, donde la condición será verdadera mientras que
la variable auxiliar sea menor de 10. Se evalúa si el evento ocurrido se ha realizado en
la caja de texto entrada, si es verdad, a la variable número se le asigna el valor
capturado por teclado. Por otro lado se limpia la caja de texto entrada y se incrementa
en uno el valor de la variable auxiliar. Además se llama al método repaint para que
actualice los valores de mayor y menor. Por último se utiliza el método setEditable
con el parámetro false para que no se puedan digitar mas números cuando se haya
terminado el ciclo while.
Al ejecutarse el applet y digitarse los números 12, 15, 24, 42, 120, 85, 1,-9, 78, 66, se
visualizara la siguiente figura:
Figura 3.9. Ejecución programa CicloWhileApp
b) Programa Autónomo
1
2
3
4
5
6
7
8
{
9
10
11
12
13
14
15
16
17
18
}
19
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CicloWhileAuto extends JFrame implements ActionListener
{
JLabel etiqueta;
JTextField entrada;
int auxiliar=0,numero,mayor,menor;
public CicloWhileAuto()
super("Programa Autonomo");
Container contenedor=getContentPane();
contenedor.setLayout(new FlowLayout());
etiqueta=new JLabel("Digite un numero:");
entrada=new JTextField(10);
contenedor.add(etiqueta);
contenedor.add(entrada);
entrada.addActionListener(this);
setSize(300,300);
setVisible(true);
public void paint (Graphics g)
{
20 super.paint(g);
21
if (auxiliar==1)
22
{
23
mayor=numero;
24
menor=numero;
}
25 if(mayor<numero)
26
mayor=numero;
27 if(menor>numero)
28
menor=numero;
29 g.drawString("El mayor es:"+mayor,25, 80);
30 g.drawString("El menor es:"+menor,25, 100);
}
31 public void actionPerformed(ActionEvent e)
{
32 while(auxiliar<10)
33
{
34
if(e.getSource()==entrada)
{
35
numero=Integer.parseInt(entrada.getText());
36
entrada.setText("");
37
auxiliar++;
38
repaint();
}
}
39
entrada.setEditable(false);
}
40 public static void main(String args[])
{
41
42
CicloWhileAuto miprograma = new CicloWhileAuto();
miprograma.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
El anterior programa autónomo realiza las mismas operaciones que realiza el applet.
Al ejecutarse el programa autónomo y digitarse los números 12,15,24,42,120,85,1,9,78,66, se visualizara la siguiente figura:
Figura 3.10. Ejecución programa CicloWhileAuto
3.6. Estructura de repetición do - while
En ocasiones es necesario que un ciclo de repetición se ejecute por lo menos una vez
antes de evaluar la condición. La estructura do - while ejecuta una acción hasta que se
cumpla una condición determinada que se comprueba al final del ciclo. La estructura de
repetición do - while se repite mientras el valor de la condición sea falso.
do {
acción;
incremento
ó
decremento
}while(condición_falsa);
3.6.1. Ejemplo práctico do-while

Crear un programa autónomo y un applet que imprima los números pares entre 1
y 30, así como su sumatoria.
a) Subprograma Applet
1
2
3
4
5
6
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CicloDoWhileApp extends JApplet
{
int suma=0,numero;
public void init()
{
7
8
Container contenedor=getContentPane();
contenedor.setLayout(new FlowLayout());
}
9 public void paint (Graphics g)
10 {int posy=40;
11
int numero=2;
12 super.paint(g);
13 g.drawString("Impresión de los números pares entre 2 y 30",25,25);
14 do
{
15
g.drawString(Integer.toString(numero),25,posy);
16
posy+=15;
17
suma=suma+numero;
18
numero=numero+2;
19
}while(numero<=30);
20
g.drawString("La suma de los números es: "+ suma, 25,posy);
}
}
Análisis programa
Línea 11: Se crean una variable llamada numero, la cual es inicializada con el valor de
dos (2) y servirá para incrementar dicha variable en dos unidades hasta que se cumpla la
condición del ciclo.
Línea 14 – 19 : Se inicia la estructura do-while; se hace la impresión del valor de la
variable numero y se le asigna a la variable suma el valor que contiene dicha variable
mas el nuevo valor de la variable numero, además se incrementa la variable numero en
.dos unidades. Por último se evalúa la condición del ciclo. Si el valor de la variable
numero es menor o igual a treinta (30) se volverá al ciclo, sino se saldrá del ciclo y se
imprimirá la suma de los números pares entre 1 y 30.
Figura 3.11.
programa
Ejecución
CicloDoWhileApp
b) Programa Autónomo
1
2
3
4
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CicloDoWhileAuto extends JFrame
{
5 int numero, suma=0;
6
public CicloDoWhileAuto()
7
{
8
super("Programa Autonomo");
9
Container contenedor=getContentPane();
10
contenedor.setLayout(new FlowLayout());
11
setSize(400,400);
12 setVisible(true);
}
13 public void paint(Graphics g)
{
14
int posy=55;
15
int numero=2;
16
g.drawString("Impresión de los numeros pares entre 2 y 30",25,40);
17 do {
18
g.drawString(Integer.toString(numero),25,posy);
19
posy+=15;
20
suma=suma+numero;
21
numero=numero+2;
22
}while(numero<=30);
23
g.drawString("La suma de los números es: "+ suma, 25,posy);
}
24 public static void main(String args[])
{
25
CicloDoWhileAuto miprograma = new CicloDoWhileAuto();
26
miprograma.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
En el anterior programa autónomo, se realizan las mismas instrucciones que se
utilizaron en el subprograma applet.
Figura 3.12. Ejecución programa CicloDoWhileAuto
3.7. Ejercicios propuestos
Realizar los siguientes programas tanto en applet como en autónomo.
1. Hacer un programa que capture un numero por tecleado e imprima si es par o
impar.
2. Hacer un programa que capture tres números e imprima cual es el mayor, el del
medio y el menor.
3. Escribir un programa que capture un número e imprima si es menor de 15, si es
mayor de 50 o sí está entre 16 y 49.
4. Hacer un programa que capture dos números e imprima la suma, la resta, la
división, la multiplicación y el residuo de la división.
5. Hacer un programa que pida al usuario digitar en hora militar la hora, los
minutos, los segundos e imprima la hora, los minutos y los segundos un segundo
después.
6. Escribir un programa que sume los números enteros de 1 a 100, utilizando las
estructura de repetición for, while, do while.
7. Escribir un programa que capture un número e imprima si dicho numero es
primo o no.
8. Escribir un programa que permita leer una cadena de caracteres e imprimir
cuantas vocales existen de cada una.
9. Escribir un programa que permita imprimir todos los números primos entre 3 y
999 inclusive.
10. Escribir un programa para imprimir la suma de los números impares menores o
iguales que n. donde n es un número digitado por teclado.
Descargar