Tecnicas de Programacion Paso A Paso Con Java - Publicado
Tecnicas de Programacion Paso A Paso Con Java - Publicado
Tecnicas de Programacion Paso A Paso Con Java - Publicado
NIVEL BASICO
GUIA PARA ESTUDIANTES
ISBN: 978-958-46-6827-1
Editor
John Calos Arrieta Arrieta
[email protected]
Primera Edición
ISBN: 978-958-46-6827-1
Derechos Reservados:
Esta obra es propiedad intelectual de sus autores y así como los derechos de
publicación en cualquier idioma. Prohibida su reproducción parcial o total por
cualquier medio, sin autorización escrita de su legítimo titular de derechos del
Copyright.
Nota Importante:
La información contenida en esta obra tiene un fin exclusivamente didáctico y
formativo, el autor aprueba su aprovechamiento a nivel profesional o industrial.
Las indicaciones técnicas y programas incluidos, han sido elaborados con gran
cuidado por el autor y reproducidos bajo estrictas normas de control. El autor no
será jurídicamente responsable por: errores u omisiones, daños y perjuicios que
se pudieran atribuir al use de la información comprendida en este libro, ni por la
utilización indebida que pudiera dársele.
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
5
John Carlos Arrieta Arrieta
Sobre el Autor.
6
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Prologo.
Este libro fue escrito como necesidad del autor de poner a disposición de sus
alumnos y personas interesad en desarrollar software, una herramienta de
aprendizaje que les permitiera desarrollar sus competencias rápidamente
mediante la didáctica de hacer y aprender mientras leen.
El libro cuanta con muchos ejemplos guiados paso a paso simples y cortos sobre
cada uno de los temas tratados y organizados en su interior, los cuales pueden
apreciarse en el respectivo índice del presente libro.
7
John Carlos Arrieta Arrieta
8
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
INDICE DE CONTENIDO
9
John Carlos Arrieta Arrieta
10
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
11
John Carlos Arrieta Arrieta
12
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Por ejemplo:
Por ejemplo:
Por ejemplo:
El software debe solicitar al docente que ingrese los datos de entrada, cada
dato debe ser almacenado en una variable con el fin de poder manipularlos
fácilmente.
Leer ESTUDIANTE
Leer ASIGNATURA
Leer NOTA1
Leer PORCENTAJE1
Leer NOTA2
Leer PORCENTAJE2
Leer NOTA3
13
John Carlos Arrieta Arrieta
Leer PORCENTAJE3
Por ejemplo:
Por ejemplo:
14
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Mostrar "Primera Nota Parcial: ", NOTA1, " * ", (PORCENTAJE1 * 100), "% =
", DEFINITIVA1
Mostrar "Segunda Nota Parcial: ", NOTA2, " * ", (PORCENTAJE2* 100), "% =
", DEFINITIVA2
Mostrar "Tercera Nota Parcial: ", NOTA3, " * ", (PORCENTAJE3 * 100), "% =
", DEFINITIVA3
15
John Carlos Arrieta Arrieta
16
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
17
John Carlos Arrieta Arrieta
Indica la información de salida, es decir, los datos que van a salir del programa
para ser enviados al exterior del PC (generalmente un menaje o información que
se envía a un dispositivo de salida, por ejemplo una pantalla, impresora,
parlantes, dispositivo de almacenamiento, red de cómputo, etc.).
Indica una operación de proceso o cálculo, la cual siempre genera un valor como
resultado y puede ser asignado a una variable.
18
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
CONDICIONAL
19
John Carlos Arrieta Arrieta
Luego el programa pasa por una seria de pruebas con el fin de determinar su
correcto funcionamiento o posibles problemas o errores y así poder corregir y
volver a probar hasta que está correctamente elaborado.
20
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
21
John Carlos Arrieta Arrieta
22
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
23
John Carlos Arrieta Arrieta
24
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
25
John Carlos Arrieta Arrieta
Imagen: Ejemplo del Algoritmo del cálculo de la Nota Definitiva escrito en Java
26
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Imagen: Ejecución y prueba del programa del Cálculo de la nota Definitiva escrito en java
27
John Carlos Arrieta Arrieta
2. Ir al menú inicio y dar clic derecho sobre el icono Equipo (en Win7) o Mi
PC (en WinXP), seleccionar y dar clic en la opción Propiedades.
28
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
29
John Carlos Arrieta Arrieta
30
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
javac CalculoNotaDefinitiva.java
pause;
java CalculoNotaDefinitiva
pause;
31
John Carlos Arrieta Arrieta
Si todo aparece tal cual, quiere decir que el código fuente Java del
programa en el archivo CalculoNotaDefinitiva.java ha sido escrito y
compilado correctamente, de lo contrario aparecerán en mensajes sobre
los posibles errores en el código fuente.
Si no hay problemas, el proceso de compilación generaría uno o varios
archivos con extensión .class, tal como aparece en la siguiente imagen:
32
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
CONDICIONAL SI-ENTONCES
Si <condición>
Entonces
<instrucciones>
Sino
<instrucciones>
FinSi
1 Las siguientes definiciones sobre SI (Condicionales) Según (Selección Multiple), Ciclo Mientras, Ciclo
Repetir y Ciclo Para fueron tomadas textualmente de la documentación suministrada en el manual de
Usuario del Software PSeInt licenciado a la fecha de 17-01-2013 como Software Libre GPL v.3,
http://pseint.sourceforge.net/index.php?page=pseudocodigo.php
33
John Carlos Arrieta Arrieta
34
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Ejemplo:
Diseñar un algoritmo que permita traducir los nombres de los días en español en
minúscula a ingles en mayúscula.
35
Línea 7 a 9 y 9 a 27: Instrucción CONDICIONAL
SI/SINO, la cual verifica SI es VERDADERO que la
variable día es igual a Lunes, en caso positivo muestra
un mensaje, en caso Negativo o FALSE, entonces,
vuelve a preguntar mediante un CONDICIONAL
ANIDADO dentro del SINO anterior SI es
VERDADERO que la variable día es igual a Martes, SI
es VERDADERO muestra un mensaje, pero SINO
ósea es FALSO, entonces vuelva a preguntar el valor
de la variable día mediante otro SI/SINO ANIDADO, y
así sucesivamente cuando haya terminado de verificar
todos los SI/SINO.
John Carlos Arrieta Arrieta
Imagen; Ejemplo de Diagrama de Flujo del Algorimto para Traducir los días de la semana a ingles
36
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
37
John Carlos Arrieta Arrieta
38
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
39
John Carlos Arrieta Arrieta
Líneas 13, 14, 15, 16 y 17: Es similar a lo explicado en las líneas 10, 12, y 18, es
decir, es otra instrucción condicional SI-SINO-FINSI anidada dentro de un SINO,
es decir, SI el día ingresado no es el martes (el SI de la línea 10 es FALSO),
entonces en la línea 13 se verifica si posiblemente ingreso el miércoles, si es
VERDADERO se muestra el mensaje de la línea 14 saltando a las líneas 17, 18,
19 y 20 finalizando el algoritmo. SINO (FALSO) línea 15, es porque el día
ingresado no es lunes, ni martes, ni miércoles, entonces se muestra un
mensaje en la línea 16, finalizando con las líneas 17, 18, 19 7 20.
40
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Como ejercicio, toma el simple reto de terminar el algoritmo con los días de la
semana que faltan, jueves, viernes, sábado y Domingo.
Cada opción está formada por uno o más números separados por comas, dos
puntos y una secuencia de instrucciones. Si una opción incluye varios números,
41
John Carlos Arrieta Arrieta
Note que las instrucciones del cuerpo del ciclo pueden no ejecutarse nunca, si al
evaluar por primera vez la Condición esta resulta ser FALSA.
42
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Repetir
<instrucciones>
Hasta Que <condición>
43
John Carlos Arrieta Arrieta
Note que, dado que la condición se evalúa al final, las instrucciones del cuerpo
del ciclo serán ejecutadas al menos una vez.
Además, a fin de evitar ciclos infinitos, el cuerpo del ciclo debe contener alguna
instrucción que modifique la o las variables involucradas en la condición de
modo que en algún momento la condición sea verdadera y se finalice la
ejecución del ciclo. Si analizamos su comportamiento con un poco más de
profundidad, podemos observar que REPETIR HASTA QUE y MIESTRAS QUE
se utilizan cuando no tenemos certeza alguna de cuantos ciclos se pueden
ejecutar, esto debido a que el Condicional está sujeto que pueda o no ser
evaluada como FALSO o VERDADERO y puede darse el caso que se ejecuten
muchos ciclos antes de que el condicional pueda ser Evaluado como FALSO
(Para el caso del MIESTRAS QUE) o VERDADERO (para el caso del REPETIR
HASTA QUE).
44
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Para <variable> <- <inicial> Hasta <final> (Con Paso <paso> ) Hacer
<instrucciones>
FinPara
45
John Carlos Arrieta Arrieta
46
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
47
John Carlos Arrieta Arrieta
Nos aparece una página en la cual debemos dar clic en la opción señalada en la
imagen anterior, luego nos aparece otra página web en la que debemos aceptar
los términos de la licencia, tal como indica en la siguiente imagen:
Para saber cuál versión del sistema operativo tenemos instalada en nuestro PC
podemos dar clic derecho en el icono Equipo que está en el Menú Inicio y
escoger la opción Propiedades, como se aprecia en la siguiente imagen:
48
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
49
John Carlos Arrieta Arrieta
50
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
51
John Carlos Arrieta Arrieta
Ir a las propiedades del EQUIPO, dando clic derecho en el icono Equipo del
menú inicio y escoger la opción Propiedades, luego escoger la opción
Configuración Avanzada del Sistema, tal como aparece en las siguientes
imágenes consecutivas:
52
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
53
John Carlos Arrieta Arrieta
54
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Luego en la ventana del D.O.S que nos aparece podemos invocar el programa
javac.exe
55
John Carlos Arrieta Arrieta
Si hasta el momento todo está bien, podemos dar enter y veremos la ayuda del
programa Javac.exe, tal como se parecía en la siguiente imagen, esta ayuda
nos proporciona información de cómo utilizar este programa y sus opciones para
poder compilar el código fuente de nuestros programas y convertirlo en código
binario (bytecode)
Si existe algún problema con los pasos hechos anteriormente, deberíamos ver
algo así:
56
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Luego repetimos los pasos que realizamos para configurar la variable PATH,
pero en este caso crearemos una nueva variable llamada CLASSPATH y le
colocamos como valor la ruta de nuestra carpeta de trabajo, esto se puede
apreciar en la siguientes tres imágenes consecutivas:
57
John Carlos Arrieta Arrieta
58
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
59
John Carlos Arrieta Arrieta
60
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Para crear el archivo de compilación procedemos a abrir una ventana del block
de notas y escribir el comando javacVentanaHora.java, es decir, invocamos el
programa javac.exe y seguidamente le pasamos el nombre del archivo de
código fuente que deseamos compile, el comando pause se utiliza en D.O.S
para pedirle al usuario que oprima una tecla e impedir que el programa se cierre
una vez termine su ejecución, esto es importante porque de lo contrario no
podremos observar los mensajes de error si los hubiese.
El archivo se debe guardar con la extensión .bat dentro de la carpeta
guias_Java, por ejemplo Compilar.bat.
Ahora tendremos dos archivos dentro de la carpeta java, el archivo de código
fuente VentanaHora.java y el archivo compilar.bat como se aprecia en la
siguiente imagen:
61
John Carlos Arrieta Arrieta
62
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
63
John Carlos Arrieta Arrieta
EJECUTAR EL PROGRAMA
64
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
65
John Carlos Arrieta Arrieta
66
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Al ejecutar este archivo se ejecutara este comando jar, al cual se le pasan los
parámetros cfmv, donde c significa create (crear), f significa file (archivo), m
significa manifest (manifiesto) y v significa view (ver), esta combinación hará
que se cree un archivo llamado miprograma.jar el cual contendrá el archivo
manifest.mf creado anteriormente y todos los archivos compilados .class dentro
de la carpeta guias_java.
Al ejecutar el archivo crear_ejecutable.batobtendremos el siguiente resultado:
67
John Carlos Arrieta Arrieta
Los archivos .JAR no son más que una especie de empaquetador (como .zip .rar
.dll .gz .cab .os .bin .dmg .iso .deb .rpm, etc) incluso pueden comprimir su
contenido.
Ahora solo tenemos que dar doble clic al archivo miprograma.jar y se ejecutara la
muestro programita, sin la fastidiosa ventana negra del D.O.S que vimos
anteriormente, y nuestra aplicación se ejecutara de una forma más sencilla:
RESUMEN:
En este capítulo aprendimos a preparar nuestro PC tener un entorno de trabajo
muy básico de aplicaciones escritas en Java, donde básicamente aprendimos
entre otras cosas:
Descargar e instalar el JSDK.
Configurar las variable de entorno PATH para que el S.O pueda conocer
la ruta donde se encuentra instalado el JDK y sus programa Java.exe,
Javac.exe, Javaw.exe y Jar.exe, de igual forma configuremos la variable
de entorno CLASSPATH, en la cual indicamos cual es la ruta de nuestra
carpeta de trabajo, de tal manera que los programas Javac.exe, Java.exe
y Jar.exe pueden encontrar las clases de nuestro programa al momento
de compilar, ejecutar y crear el archivo de distribución.
Crear y utilizar archivos .bat para compilar los archivos de código fuente
.java invocando al programa Javac.exe, para ejecutar los archivos de
68
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Ejercicio propuesto:
1. Modificar el código fuente para la aplicación pueda hacer lo siguiente:
Mostar la fecha y la hora, para ello debes investigar sobre los parámetros
de la clase SimpleDateFormat para dar formato a la fechas de la clase
Date.
Cambiar el color de fondo de la ventana por color Verde.
Cambiar el color del texto de la etiquete por el color Rojo
Mostrar la fecha y la hora a la izquierda de la ventana.
La fecha y la hora deben estar en tamaño 28 y deben estar subrayados,
para ello deben investigar sobre la clase Font, con la que se puede
cambiar el tipo de letra, su tamaño y estilo.
2. Construir otra aplicación que permita mostrar una ventana codos etiquetas
Jlabel, en la primera se debe mostrar el tu nombre completo de color Naranja
y la fecha de color Azul claro, la primera etiqueta debe aparecer en el Norte
de la ventana y la segunda en el Sur, para ello deben investigar sobre el
gestor de posicionamiento BorderLayout.
En esta sección aprenderemos a analizaremos cada una de las partes del código
fuente de la aplicación VentanaHora construida como ejemplo de la sección
anterior, de esta manera aprenderemos como está formada la estructura de una
aplicación escrita con el Lenguaje de Programación Java.
69
John Carlos Arrieta Arrieta
Objetivos:
Al culminar la lectura de esta sección comprenderemos los siguientes conceptos
de programación en Java entre otras cosas:
Que es un archivo de código fuente.
Que es una clase e identificar sus elementos (propiedades y operaciones)
Como escribir un clase adecuadamente sin violar las reglas de sintaxis de
Java.
Como nombrar clases publica igual al nombre de su archivo de código
fuente .java.
Que es un comentario de un o varias líneas.
Que es un paquete java
Como importar clases ubicadas dentro paquetes java con el fin de reutilizar
sus elementos
Como reutilizar los elementos de una clase en otra me diente el uso de la
herencia
Que es una propiedad y que es una operación
Como utilizar la clase JFrame del paquete javax.swing para crear objetos de
Interfaz Imagen de Usuario (GUI) de tipo Ventana o Marco y utilizar
propiedades y operaciones para establecerle un título, un tamaño, una
posición y hacerla visible y agregarles otro componentes GUI.
Como utilizar la clase Date del paquete java.util para obtener la fecha y hora
actual del PC.
Como utilizar la clase SimpleDateFormat del paquete java.text para dar
formato variado a una fecha y hora.
Como utilizar la clase JLabel del paquete javax.swing para crear objetos de
tipo Etiqueta y utilizar sus propiedades y operaciones para establecerle un
color de fondo, un texto, una orientación, un tipo de letra, un estilo y un color
al texto.
Como utilizar la clase SwingConstants del paquete del paquete javax.swing
para establecer algunas características de los componentes GUI.
70
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
71
John Carlos Arrieta Arrieta
Las la primera llave abierta { indica el inicio del cuerpo de la clase, mientras que
la última llave cerrada } indica el fin del cuerpo de la clase.
Observemos que el contenido o cuerpo de la clase son todas las sentencias
(definiciones, declaraciones e instrucciones) escritas dentro de la clase y
encerradas entre e inicio { y el fin }. Observemos que dentro del cuerpo de
la clase VentanaHora podemos encontrar otros bloques de código que llevan un
inicio y un fin, se trata de las definiciones de tres operaciones que pertenecen a
dicha clase:
public VentanaHora( ){
// Aquí se debe escribir el cuerpo de esta operación
}
72
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
/*
Si necesitásemos comentar o explicar algo más
O menos amplio, entonces Escribir un comentario
En varias líneas, como este ejemplo que están leyendo
*/
// Este las dos barras para explicar algo muy corto
73
John Carlos Arrieta Arrieta
import javax.swing.*;
import java.util.*;
import java.text.*;
import java.awt.*;
74
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
La siguiente línea:
75
John Carlos Arrieta Arrieta
Una gran fortaleza que poseen los lenguajes Orientados a Objetos como Java es
la capacidad de reutilizar el código de otras clases, ya sea importando o
heredando dichas clases, ambas técnicas permiten aprovechar el código java
escrito por otros programadores, incluso el código java que nosotros mismos
hemos escrito en este u otros programas.
Observemos que siguiera siendo pública pues su archivo tiene mismo nombre,
pero además observémonos que no tendría la palabra reservada extends, no el
nombre de la clase JFrame de la cual hereda.
La instrucción:
public VentanaHora( ){
76
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
}
Mientras que la cabecera o firma del método no lleva la palabra class,
} lleva paréntesis y además siempre debe ir definido dentro del cuerpo { }
de la clase
77
John Carlos Arrieta Arrieta
78
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
79
John Carlos Arrieta Arrieta
El cuerpo de la operación
El cuerpo contiene todas las instrucciones que se deben ejecutar cada vez que la
invocamos la operación. En síntesis el cuerpo es lo más importante de toda
operación, pues en su interior es donde se coloca el código java escrito para
realizar algún proceso, cálculo o actividad específica.
A continuación comprenderemos el significado de cada instrucción escrita en el
cuerpo de la operación prepararVentana( ), recordemos que para entender
cada instrucción de forma más clara y fácil debemos interpretarlas de izquierda a
derecha y viceversa.
80
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
La instrucción:
import java.text.*;
81
John Carlos Arrieta Arrieta
La instruction:
82
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
como por ejemplo el tipo de fuente o letra, su color, el estilo, tamaño y alineación,
etc.
La instrucción:
De izquierda a derecha indica que utilizamos la clase String para declarar una
variable llamada horaPC, a la cual le asignamos el texto devuelto por la llamada
o invocación de la operación format del objeto formatoFecha creado de tipo
SimpleDateFormat, la operación format recibe como parámetro un objeto de
tipo Date, en este caso fechaPC el cual contienen información sobre la fecha al
que deseamos dar el formato hh:mm:ss a.
La clase String es utilizada por trabajar con variables o literales de texto, por lo
que posee un conjunto de propiedades y operaciones para trabajar con cadenas
(sinónimo de literal ) que pueden contener cualquier cantidad o combinación de
carácter alfabéticos (de la aA a la zZ), numéricos negativos o positivos o
caracteres especiales o de puntuación (! " · % & / ( ) = ? ¿ ¡ ' ¬ #
@ | \º ª<, ; > : . - { ] } + * ^) incluyendo espacios en blanco,
por ejemplo:
83
John Carlos Arrieta Arrieta
La instrucción:
etiquetaHora.setText( horaPC );
La instrucción:
84
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
La clase Font está ubicada en el paquete java.awt incluido en el JDK, por eso
debemos importarla mediante la import java.awt.*; Esta clase es utilizada
para trabajar con diferentes tipos de Fuente o tipos de Letra, por ejemplo Arial,
Times New Roman, Calibri, Comic Sans, Helvetica, Lucida, Consola,
etc.
La instrucción:
etiquetaHora.setForeground(Color.BLUE);
La clase Color al igual que la clase Font pertenece al paquete java.awt, pero
a diferencia de Font esta clase se utiliza para trabajar con los diferentes
colores que soporta nuestro PC, esta clase posee un conjunto de propiedades
públicas cada una con el nombre de un color particular, por ejemplo
85
John Carlos Arrieta Arrieta
La instrucción:
etiquetaHora.setHorizontalAlignment(JLabel.CENTER
);
La instrucción:
86
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
La instrucción:
En la anterior instrucción indicamos que esta (this en ingles) clase posee una
operación llamada setSize, la cual al ser invocada establece (set en ingles) el
tamaño (size en ingles) de la ventana en 300 pixeles de ancho y 200 pixeles de
alto.
La instrucción:
this.setLocationRelativeTo( null );
87
John Carlos Arrieta Arrieta
this.setVisible( true );
Para que nuestro programa escrito en Java pueda ser utilizado o ejecutado como
una aplicación de escritorio, por ejemplo en los Sistemas Operativos más
populares del mundo como Windows, GNU/Linux, Mac OSx, Unix, Solaris, etc,
debemos definir una operación especial denominada PUNTO DE INICIO o
PUNTO DE EXECUCION la cual es invocada automáticamente al hacer doble
clic sobre el icono del programa.
Esta operación especial de Java y de otros lenguajes de programación como C,
C + + , C# y Visual Basic entre otros, contiene las primeras instrucciones que
serán ejecutadas al iniciar un programa.
A continuación veremos la definición de la operación Punto de Inicio de nuestro
ejemplo:
88
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
ventana.prepararVentana( );
89
John Carlos Arrieta Arrieta
90
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
91
John Carlos Arrieta Arrieta
En secciones posteriores veremos con más detalle cada una de estas palabras y
caracteres reservados del lenguaje Java.
Una aplicación Java está compuesta un conjunto (al menos uno) de algoritmo
denominados clases, estos algoritmos deben estar escritos respetando
estrictamente unas reglas propias del lenguaje de programación Java, a estas
reglas se les conoce como sintaxis.
Algunas de las reglas aplicadas en la mayoría de los programas son:
92
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
93
John Carlos Arrieta Arrieta
tipoDeDato nombreDeLaVariable;
94
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
95
John Carlos Arrieta Arrieta
Toda variable se debe declarar dentro de las llaves de una clase, pero las
variables que se declaran dentro de las { } de una clase y fuera de las
{ } de una operación, se les denomina propiedades, variable miembro,
atributos de la clase o simplemente variables globales, mientras que toda
variable que se declare dentro de las { } de una operación se le
denomina variable local, y solo es visible, existe y se puede usar dentro
de las llaves de dicha operación, no fuera de ella.
Una aplicación Java para escritorio inicia por una operación especial
denominada punto de inicio, esta operación se llama main, cuya
cabecera debe ser escrita de la siguiente manera:
96
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
97
John Carlos Arrieta Arrieta
+ + , HTML, JavaScript, CSS, SQL, XML, entre otros, integrándose con gran
facilidad motores y servidor de bases de datos, servidores web, servidores FTP,
Servidores de Correo, Servidores de Versiones y contenidos, dispositivos
móviles y emuladores móviles, etc., pero además este IDE nos permite
aumentar sus funcionalidades básicas gracias a la capacidad de integrarse
fácilmente con multitud de complementos agregados o plugins, los cuales son
módulos de software especializados, donde cada uno de ellos es desarrollado
para ofrecernos soporte y apoyo una labor específica, como por ejemplo la
edición, optimización y generación de código fuente de forma asistida o
automática, generador de instaladores y distribuidores de software, conexión y
comunicación con otros software y otro programadores en línea, etc.
Para poder iniciar con la instalación del IDE Netbeans lo primero que debemos
hacer es descargarla la versión más completa desde su sitio Web oficial
http://netbeans.org/downloads/start.html?platform=windows&lang=es&option=all
98
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
99
John Carlos Arrieta Arrieta
100
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
101
John Carlos Arrieta Arrieta
102
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
1). En esta ventana debemos indicar el Nombre del Proyecto (no puede tener
espacios, no puede tener caracteres especiales, si puede tener numero pero no
puede tenerlos al inicio, puede tener cualquier combinación de letras y números)
el cual debe ser coherente con el objetivo del proyecto.
2). Por defecto un proyecto de software hecho con el IDE NetBeans se guarda
en una carpeta llamada NetBeansProyects, pero si lo deseamos podemos
elegir otra carpeta se puede elegir otra carpeta.
3). Cuando se crea un proyecto de software NetBeans crea una carpeta con el
mismo nombre del proyecto y dentro de dicha carpeta crea una serie de
directorios y archivos que conforman la estructura de proyecto en sí mismo.
Todo proyecto de software Java que vaya a ser utilizado como aplicación del
escritorio Windows, GNU/Linux, Mac OSx, Solaris o cualquier otro sistema
operativo para PC, debe tener un archivo que contenga el código por donde
inicia o comienza la ejecución del programa, NetBeans puede crear
automáticamente dicho archivo en una carpeta cuyo nombre es igual al nombre
del proyecto, este archivo es el que contiene el punto de inicio o ejecución, el
cual corresponde al método main (visto en el capítulo 2). Antes de iniciar
necesitamos establecer algunas convenciones o acuerdos:
En este libro todos los ejemplos de proyecto Java tendrá una clase
llamada 4). Principal, la cual contendrá el método main o punto de
inicio de la aplicación.
A las carpetas donde guardamos los archivos que contienen el código
Java de nuestros programas las llamaremos Paquetes.
Al primer paquete donde se guardan el resto de paquetes de nuestro
proyecto, lo llamaremos Paquete Raíz.
Todos los proyectos los guardaremos en la carpeta por defecto de
Netbeans llamada NetbeansProyects.
Todos los paquetes, variables y métodos estarán escritos en letra
minúscula
Si el nombre de un paquete, variable, método o clase tiene varias
palabras, solo la primera letra de cada palabra debe iniciar con letra
103
John Carlos Arrieta Arrieta
Ahora el IDE nos genera un entorno de trabajo con todo lo necesario para poder
construir nuestro Software escrito en Java, algunas de las zonas más
importantes con las que contamos en el IDE son:
1). Corresponde el
nombre del proyecto al
mismo tiempo que a
su carpeta donde esta
guardado
2). Es el paquete Raiz,
1 generalmente todos
los archivos de código
fuente del proyecto los
2 ubiamos dentro de
este paquete
3 3). Es la clase Punto
4 de Inicio, la que
contiene el mentodo
5 main.
104
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
105
John Carlos Arrieta Arrieta
El Panel de Propiedades
1 2 3 4
2). Tiene el mismo objetivo del primero, pero la diferencia es que el segundo
borra o elimina todos los ejecutables creados anteriormente y en su lugar genera
uno archivo ejecutable nuevo.
4). Se utiliza para compilar (depurar línea a línea el código fuente) de nuestro
programa, si en el proceso se encuentra algún error de sintaxis en el código
fuente, el proceso suspende la compilación (generación de archivos de código
ejecutable o binario) mostrando mensajes que explican y detallan las líneas
donde se encontraron los errores, las posibles causas y unas cuantas
alternativas para darles solución, esta información se puede apreciar en el Panel
de Salida ubicado en la parte inferior de la ventana del IDE
106
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
107
John Carlos Arrieta Arrieta
Para poder tener todo muy claro, todas las piezas y elementos en orden, es
necesario hacer un breve pero necesario análisis de la situación problemita que
deseamos apoyar mediante el desarrollo de un programa, en este caso el
problema trata de realizar convertir una valor dado en pesos colombianos a su
correspondiente valor en dólares y su equivalente valor en euros, para ellos
debemos identificar tres elementos muy importantes en todo programa de
computo, estos elementos hacen referencia a los Datos de Entrada, el Proceso
a Realizar y los Datos de Salida.
Datos de Entrada:
Corresponden a todos aquellos datos o información que el programa requiere del
exterior, para poder realizar sus operaciones, esta información generalmente es
introducida atreves de un teclado, el ratón, una cámara, un escáner, un medio de
almacenamiento, desde la conexión de red, un escáner de huella dactilar, etc.
En nuestro ejemplo el único dato de entrada que requerimos es la cifra en pesos
colombianos sobre la cual deseamos calcular su equivalencia a dólares o a
euros.
Procesos a Realizar:
Corresponden a todas aquellas operaciones, procedimientos, cálculos,
actividades o tareas que debe realizar el programa con los datos de entrada, con
el fin de obtener un resultado y lograr su objetivo, en nuestro ejemplo el proceso
no es otra cosa que realizar los cálculos matemáticos necesarios para poder
convertir un valor en pesos a su equivalente en dólares y su equivalente euros,
esto se hace mediante el uso de una regla de tres simple:
Si a la fecha $1801 pesos equivale a $1 Dólar, entonces ¿X cantidad de pesos a
cuantos Dólares equivale?, simplificado quedaría así:
CO $1801 = UD $1
CO $X = UD $?
108
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
unDolarEquivalenciaEnPesos = 1801
valorEnDolareResultante =(valorEnPososConocido*1)/
unDolarEquivalenciaEnPesos
valorEnDolareResultante = valorEnPososConocido /
unDolarEquivalenciaEnPesos
unEuroEquivalenciaEnPesos = 2331
valorEnEurosResultante = valorEnPesosConocido / unEuroEquivalenciaEnPesos
Datos de Salida:
Corresponden a todos aquellos datos o información que el programa envía hacia
el exterior, como producto del resultado sus operaciones, esta información
generalmente es enviada hacia una pantalla, una impresora, parlantes, un medio
de almacenamiento, o hacia la conexión de red, etc. En nuestro ejemplo los
datos de salida son las variables valorEnDolareResultante y
valorEnEurosResultante, la primera contiene información el resultado de
convertir x cantidad conocida de Pesos a dólares, y la segunda el resultado en
euros.
Observemos que hemos hecho un análisis del problema, lo hemos dividido en
problemas más simples para poder comprender mejor cada una sus partes y
poder tener así una visión más clara de toda la situación.
La técnica más utilizada en ingeniería para poder resolver un problema consiste
en analizarlo detalladamente dividiéndolo en problemas más pequeños y simples
de resolver, si alguno de estos subproblemas no lo podemos comprender muy
109
John Carlos Arrieta Arrieta
110
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Los bloques con una flechita hacia adentro, significan Datos de Entrada,
mientras que los bloques con una flechita hacia afuera significan Datos de Salida
y los bloques que carecen de fecha significan Procesos, los cuales pueden ser
declaraciones e inicializaciones de variables, cálculos matemáticos, etc.
Si estos pasos los representamos en un lenguaje más simple como el de
Pseudocódigo, del cual podríamos obtener un algoritmo como el siguiente:
111
John Carlos Arrieta Arrieta
Observemos que primero declaramos las variables que vamos a utilizar, luego
mostramos un mensaje de salida por pantalla, seguidamente leemos o
capturamos los Datos de Entrada por teclado, luego realizamos el Proceso, es
decir los cálculos necesario con los datos de entrada y mostramos la información
resultantes como Datos de Salida utilizando un mensajes en la pantalla. Ahora
nuestro próximo paso será codificar el algoritmo en lenguaje de programación
Java. Para comenzar a escribir el programa en java utilizando el block de notas
como IDE, es importante consultar la primera sección, pues asumo que ya lo
han hecho, procedemos a realizar los siguientes pasos:
1. Crear una carpeta llamada por ejemplo convertidor_de_moneda.
2. Asignar la ruta de la carpeta en la variable de entorno CLASSPATH
3. crear un archivo de código fuente llamado por ejemplo
ConvertidorDeMoneda.java
4. Abrir el archivo de código fuente y escribir y guardar el siguiente código
Java:
/**
* @author JohnArrieta-PC
* ConvertidorDeMoneda.java
*/
112
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
float valorEnEuroResultante = 0;
float unEuroEquivalenciaEnPesos = 2331.0f;
113
John Carlos Arrieta Arrieta
114
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
115
John Carlos Arrieta Arrieta
float valorEnEuroResultante = 0;
float unEuroEquivalenciaEnPesos = 2331.0f;
Observemos que la palabra float está en minúscula y siempre debe utilizarse
antes del nombre de la variable que deseamos declarar como decimal.
Notemos que al declarar una variable local (las que se declaran dentro del
cuerpo de una operación y no fuera de ellas) siempre debemos asignarles un
valor, en este caso, como la variable es float debemos asignarle un valor
decimar terminado en letra f minúscula, por ejemplo 0.0f para indicar 0.0, o por
ejemplo 1801.0f, para indicar en este caso que el valor es 1801.0 para el
caso.
Recordemos que los nombres de las variables, de las operaciones y de las
clases no pueden tener espacios en blanco, no pueden tener ninguno de los
siguientes caracteres especiales ! " · % & / ( ) = ? ¿ ¡ ' ¬ # @ | \º
ª<, ; > : . - { ] } + * ^ y tampoco puede iniciar con número, pero si
los puede en cualquier cantidad y en cualquier parte menos al comienzo.
Los Datos de Salidas por consola, es decir por pantalla del D.O.S de Windows o
Terminal de GNU/Linux, se realizan utilizando la clase System del paquete
java.lang invocando su propiedad out, invocando a la vez su operación
println( String mensaje), la cual recibe como parámetro un literal de texto o
una variable de texto de tipo String, tal como se aprecia a continuación:
valorEnPesosConocido = entrada.nextFloat( );
116
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
unDolarEquivalenciaEnPesos = valorEnPesosConocido /
unDolarEquivalenciaEnPesos;
valorEnEuroResultante = valorEnPesosConocido / unEuroEquivalenciaEnPesos;
Enviar los Datos de Salida hacia la pantalla, mediante el flujo de salida estándar,
ósea la pantalla, esto lo hacemos invocando la operación println( String
datos) de la propiedad out de la clase System.Por último definimos la
operación o método que funciona como PUNTO DE INICIO, es decir la operación
especial main, la cual se ejecuta automática al ejecutar el programa.
Observemos que dentro del cuerpo del método main primero declaramos una
variable llamada convertidor de tipo ConvertidorDeMoneda, a la cual se
asignamos un nuevo objeto creado con el constructor de esta misma clase, luego
utilizamos la variable objeto convertidor para invocar al método u operación
convertir( ), llamada que ejecuta todo el código que está definido dentro del
cuerpo de dicha operación.
117
John Carlos Arrieta Arrieta
118
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
/**
* @author JohnArrieta-PC
* ConvertidorDeMoneda.java
*/
// IMPORTAMOS LA CLASE Scanner para capturar datos por Teclado
import java.util.Scanner;
119
John Carlos Arrieta Arrieta
do {
// Instrucciones que se repetirán siempre que
// condición_verdadera_falsa sea evaluada como
TRUE
} while( condicion_verdadera_o_falsa );
120
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
sean ejecutadas una sola vez, como por ejemplo, la instrucción donde
creamos el objeto que captura los Datos de Entrada:
entrada.close( );
Esto lo hacemos así para evitar que por cada iteración, ciclo o repetición dentro
de bloque do{ } while ( Condición) tengamos que crear un nuevo
objeto Scannes y cerrar su flujo de Lectura o Datos de Entrada.
También observamos que declaramos una nueva variable local llamada opción
de tipo entero, pero lo hacemos fuera del cuerpo de la estructura repetitiva, esta
variable la utilizaremos para almacenar el numero 0 si el usuario desea volver a
repetir el proceso de conversión o cualquier otro número si el usuario terminar la
ejecución del programa. Por lo tanto, esa decisión la comprobamos en la
condición del while, siendo que si opción == 0 es verdadero el ciclo vuelve a
iniciar desde la { llave de inicio que está justo después de la palabra do hasta la
} llave de cierre que va justamente antes de la palabra while, luego se vuelve
a verificar la decisión tomada por el usuario y si es verdadera nuevamente se
realiza otro ciclo o iteración, por el contrario, si la condición que verifica opción
== 0 es falsa, entonces el ciclo termina y no se vuelven a ejecutar más
iteraciones, continuando con la ejecución de la siguiente línea o instrucción
ubicada justo después del ; punto y coma de la palabra while. Resumiendo las
partes más importantes sobre los cambios realizados al código de la operación
convertir( ) son (Leer los comentarios):
121
John Carlos Arrieta Arrieta
122
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
123
John Carlos Arrieta Arrieta
import javax.swing.JOptionPane;
int opcion = 0;
// INICIAMOS LAS ITERACIONES O CLICLOS, EL PRIMERO SIEMPRE SE
REALIZA
do
{
// declarar las variables necesarias de tipo decimal
float valorEnPesosConocido = 0.0f;
float valorEnDolareResultante = 0.0f;
float unDolarEquivalenciaEnPesos = 1801.0f;
float valorEnEuroResultante = 0;
float unEuroEquivalenciaEnPesos = 2331.0f;
124
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
125
John Carlos Arrieta Arrieta
import javax.swing.JOptionPane;
126
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
int opcion = 0;
do
{
// aquí va el cuerpo de la estructura repetitiva
// do ... while o hacer mientras que
}
while(opcion == JOptionPane.YES_OPTION);
Cada instrucción colocada dentro de las { } del cuerpo de esta estructura cíclica
o iterativa será repetida cada vez que de verdadero o true el resultado de
evaluar la expresión que está dentro de los paréntesis del while, si el resultado
de esta expresión es falso, entonces se terminan las iteraciones, o ciclos o
repeticiones del código que está dentro de las { }, por eso a esta estructura se
le conoce como Hacer (do en ingles) Mientras que (while en ingles) el valor sea
verdadero, de lo contrario no siga repitiendo.
En este caso lo que deseamos evaluar como verdadero o falso es si la opción
escogida por el usuario es igual o diferente al valor de la propiedad YES_OPTION
de la clase JOptionPane, si son iguales, es decir verdadero, entonces
vuélvenos a ejecutar las instrucciones dentro del cuerpo de do while, si no son
127
John Carlos Arrieta Arrieta
Imagen: Programa Java del ConvertidorDeMoneda mod ificado para poder capturar datos de
una manera más cómoda y agradable
128
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
129
John Carlos Arrieta Arrieta
unDolarEquivalenciaEnPesos = valorEnPesosConocido /
unDolarEquivalenciaEnPesos;
valorEnEuroResultante = valorEnPesosConocido /
unEuroEquivalenciaEnPesos;
Esta es una sola instrucción pero los bastante larga que ocupa más de una línea,
pues observemos que tiene un solo ; punto y comal al final.
Aquí simplemente declaramos una variable local de tipo String o texto llamada
resultado, a la cual se asignamos un texto formado por partes literales (es
decir explícitamente encerado entre comillas dobles) a los cuales se le pega o
concatena (con el uso del carácter + ) el valor de las variables
valorEnPesosConocido, valorEnDolareResultante y
valorEnEuroResultante.
JOptionPane.showMessageDialog(null, resultado ) ;
Con esta operación emitimos un Dato de Salida por pantalla mostrado en una
ventana como la que se muestra a continuación:
130
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
131
John Carlos Arrieta Arrieta
JWindow: [Ventana en español] Es una ventana sin marco (ni bordes, ni barra
de titulo), esta ventana al igual que sus hijas poseen un contenedor en su interior
el cual permita colocarle diversidad de componentes (paneles y controles)
JFrame: [Marco en español] Es una ventana hija de JWindow, pero esta si
posee marco, el cual nos permite encogerla, estirarla, moverla, arrastrarla,
132
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
133
John Carlos Arrieta Arrieta
134
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
135
John Carlos Arrieta Arrieta
Componentes de tipo
JCheckBox dentro de un JPanel
Los objetos de la clase JRadioButton son muy utilizados para seleccionar una
y solo una de varias opciones de un mismo grupo, mientras que los objetos de la
clase JCheckBox se utilizan para escoger una, ninguna o varias opciones entre
de un mismo grupo, el grupo de indica con un objeto de la clase ButtonGroup,
136
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Son componentes que nos permiten trabajar con botones para iniciar le
ejecución de una operación específica, JButton es uno de los componentes
más comunes en cualquier aplicación GUI, mientras que JToggleButton es
menos común pues funciona de forma similar a un JRadioButton o un
JCheckBox, pues si este es pulsado queda hundido hasta que se vuelva
presionar nuevamente para que vuelva a su estado normal.
Es muy común verlo en aplicaciones como ofimáticas como por ejemplo el botón
de la Negrita, el de la Cursiva y el Subrayado, los cuales al ser presionado
quedan hundidos indicando que su respectiva operación está activa.
137
John Carlos Arrieta Arrieta
138
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Componente de tipo
JFrame
Componente de tipo JPanel dentro del
panel de contenidos de l JFrame
139
John Carlos Arrieta Arrieta
140
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
141
John Carlos Arrieta Arrieta
java.a
wt
javax.swi
ng
142
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Los botones de estado son objetos o elementos de Interfaz Gráfica tipo Botón
que al ser pulsados quedan en dicho estado (seleccionado) y vuelven al estado
normal (no seleccionados) cuando el usuario los vuelve a pulsar.
Java proporciona tres clases para trabajar con botones de estado, estas son
JToggleButton (Botón de Palanca), JCkeckBox (Caja o casilla de Verificación)
y JRadioButton (Botón de Radio), los objetos o instancias de estas clases
poseen métodos propios pero en su mayoría son heredados de desde la clase
AbstractButton que a su vez los hereda de JComponent.
Los métodos más utilizados al trabajar con estos objetos son:
143
John Carlos Arrieta Arrieta
144
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
if (chkPerro.isSelected( )) {
if (chkGato.isSelected( )) {
if (chkRaton.isSelected( )) {
145
John Carlos Arrieta Arrieta
etiResultado.setText(mensaje);
146
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
147
John Carlos Arrieta Arrieta
6. Ahora debes añadir tres botones de opción (botones de radio) dentro del
panel. Estos botones son objetos del tipo JRadioButton.
148
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
149
John Carlos Arrieta Arrieta
12. Acabas de asociar los tres botones de opción a un mismo grupo. Esto
produce que solo una de las tres opciones pueda estar activada.
Pruébelo ejecutando el programa.
13. Ahora interesa que la opción “Rojo” salga activada desde el principio.
Una forma de hacer esto es programando en el “Constructor” lo siguiente:
optRojo.setSelected(true);
150
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
14. El programa no está terminado aún. Interesa que cuando el usuario pulse
el botón Aceptar, en la etiqueta aparezca el color elegido. Para ello, en el
actionPerformed del botón Aceptar programe lo siguiente:
if (optRojo.isSelected( )) {
mensaje=mensaje + "Rojo";
} else if (optVerde.isSelected( )) {
mensaje=mensaje + "Verde";
} else if (optAzul.isSelected( )) {
mensaje=mensaje + "Azul";
etiResultado.setText(mensaje);
151
John Carlos Arrieta Arrieta
152
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Estos botones no son botones normales, son botones del tipo JToggleButton.
Usa este tipo de objeto para crearlos.
Estos botones, se diferencian de los
botones normales en que se quedan
pulsados cuando se hace un clic sobre
ellos, y no vuelven a su estado normal
hasta que no se vuelve a hacer clic
sobre ellos
Los tres botones se llamarán
respectivamente: tbtnInstalacion,
tbtnFormacion, tbtnAlimentacionBD.
a. Añade finalmente tres etiquetas
conteniendo los números 40, 200, 200.
La primera se llamará
etiPrecioInstalacion, la segunda
etiPrecioFormacion y la tercera etiPrecioAlimentacionBD.
153
John Carlos Arrieta Arrieta
double precio_base;
154
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
double precio_total;
precio_total = precio_base;
if (tbtnInstalacion.isSelected( )) {
if (tbtnFormacion.isSelected( )) {
if (tbtnAlimentacionBD.isSelected( )) {
155
John Carlos Arrieta Arrieta
double precio_total;
precio_total = precio_base;
if (tbtnInstalacion.isSelected( )) {
//Si se seleccionó instalación
precio_total = precio_total + precio_instal;
}
156
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
tbtnInstalacion.setSelected(true);
Los JToggleButton son botones que pueden quedarse pulsados. A través del
método isSelected podemos saber si un JToggleButton está seleccionado.
También puedes usar el método setSelected para seleccionar o no un botón de
este tipo. Realmente, estos botones no suelen ser muy usados, ya que pueden
ser sustituidos por Cuadros de Verificación (JCheckBox) que son más
conocidos.
157
John Carlos Arrieta Arrieta
158
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
JComboBox
getSelectedIndex Ninguno int Devuelve el
índice o posición
del ítem u opción
seleccionada en
la JList y
JComboBox
setSelectedIndex int Ninguno Selecciona la
opción en la
posición
específica de la
lista o del
Combo
addItem Object Ninguno Agrega un Item
a la lista,
generalmente el
tipo del Item es
String
El siguiente ejemplo nos muestra cómo trabajar con componentes de tipo JList
usando el IDE Netbeans
1. Realiza un nuevo proyecto
2. En la ventana principal debes
añadir lo siguiente:
a. Un botón “Aceptar”
llamado btnAceptar.
b. Una etiqueta con
borde llamada etiResultado.
3. Añade un cuadro de lista. Los
cuadros de listas son objetos JList.
159
John Carlos Arrieta Arrieta
160
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Verde
Azul
String mensaje;
mensaje="El color seleccionado es: " + lstColores.getSelectedValue( ).toString( );
etiResultado.setText(mensaje);
8. Observa el código:
a. Se crea una variable de cadena llamada mensaje.
b. Y dentro de esta variable se introduce una concatenación de
cadenas.
161
John Carlos Arrieta Arrieta
String mensaje;
if (lstColores.getSelectedIndex( )==-1) {
162
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
} else {
etiResultado.setText(mensaje);
163
John Carlos Arrieta Arrieta
164
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Recuerda agregar un Item por cada línea dentro del asistente para llenar
el modelo de la lista.
No dejes líneas en blanco porque estas aparecerán en la lista como
Items en blanco.
modelo.addElement("Juan");
modelo.addElement("María");
165
John Carlos Arrieta Arrieta
modelo.addElement("Luis");
lstNombres.setModel(modelo);
modelo.addElement("Ana");
modelo.addElement("Marta");
modelo.addElement("Jose");
lstNombres.setModel(modelo);
166
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
modelo.addElement("Ana");
modelo.addElement("Marta");
modelo.addElement("José");
lstNombres.setModel(modelo);
Click y cambia el
listado.
167
John Carlos Arrieta Arrieta
Esta instrucción hace que al seleccionar un elemento del cuadro de lista éste
aparezca en la etiqueta etiResultado. Recuerda que el método
getSelectedValue permite recoger el elemento seleccionado (hay que
convertirlo a cadena con toString)
11. Ejecuta el programa:
Un cuadro de lista es un
objeto que contiene a su
vez otro objeto
denominado “modelo”.
El objeto “modelo” es el que realmente contiene los datos de la lista.
Los JComboBox o Combos de Opciones al igual que los JList nos permiten
disponer de una lista vertical de Opciones o Items, pero a diferencia de los JList
dicha lista está oculta pudiéndose desplegar o hacer visible al pulsar clic en el botón
de dicho Combo.
168
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
1. Realiza un nuevo
proyecto.
2. En la ventana
principal debes añadir lo
siguiente:
3. Una etiqueta con
borde llamada
etiResultado.
4. Añade un cuadro
combinado (combo). Los
cuadros combinados son
objetos del tipo
JComboBox. Básicamente,
un combo es una lista desplegable.
169
John Carlos Arrieta Arrieta
7. Al igual que pasaba con los cuadros de lista, se pueden eliminar los
elementos que contiene el combo y añadir elementos propios. Use los
botones Añadir y Eliminar para añadir la siguiente lista de elementos:
Rojo
Verde
Azul
170
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
171
John Carlos Arrieta Arrieta
objetoCombo.setEditable( true) ;
13. Ejecuta el
programa y observa
cómo se puede escribir
dentro del combo. Al
pulsar Enter, el
programa funciona
igualmente con el texto
escrito.
172
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
campo editable, el combo valla cargando sus ítems con palabras que coincidan,
inicien o contengan las letras que vamos digitando en su campo editable,
Este tipo de funcionalidad es muy común encontrarlas en aplicaciones
modernas, sobre todo aquellas que mejan mucha información contendía en
Bases de datos.
173
John Carlos Arrieta Arrieta
int i;
for (i=0;i<10;i+=2) {
cboNumeros.setModel(modelo);
174
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
cboNumeros.setModel(modelo);
7. Ejecuta el programa y observa el funcionamiento del botón Pares.
Se pulsa y se rellena
automáticamente
int i;
175
John Carlos Arrieta Arrieta
cboNumeros.setModel(modelo);
9. La única diferencia de este código es el for, que está diseñado para que
se introduzcan los números impares comprendidos entre 0 y 10 dentro
del modelo.
10. Finalmente se programará el actionPerformed del combo para que al
seleccionar un elemento este aparezca en la etiqueta. Esto se hace con
una simple instrucción:
12. Sería interesante añadir un botón “Vaciar” llamado btnVaciar que vaciara
el contenido del combo. Esto se haría simplemente creando un modelo
vacío y asignarlo al combo. Se anima al alumno a que realice esta
mejora.
176
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Un combo, al igual que las JList, es un objeto que contiene a su vez otro objeto
denominado “modelo”. El objeto “modelo” es el que realmente contiene los datos
del combo. Combo Modelo Datos. Se puede crear un “modelo” y luego
introducir datos en él. Luego se puede asociar ese “modelo” al combo. De esta
manera se puede cambiar el contenido del combo en cualquier momento.
Un JSlider es un componente GUI que contiene una muesca que puede ser
deslizada sobre una línea recta vertical u horizontal, cada desplazamiento
representa un paso o fracción entre un los limites A y B.
La siguiente imagen es una muestra de un componente JSlider
También se puede configurar de forma que los valores mínimo y máximo sean
distintos:
177
John Carlos Arrieta Arrieta
El valor que tiene un JSlider es el valor al que apunta el recuadro del JSlider.
En la imagen anterior, el JSlider tiene un valor de 85.
A continuación mediante un ejemplo veremos las características más
interesantes de los JSlider y como programarlos, debemos seguir los siguientes
pasos:
1. Crea un nuevo proyecto.
2. Añade en él un JSLider. Su nombre será slDeslizador.
178
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
179
John Carlos Arrieta Arrieta
Medidas
cada 50
unidades
180
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Movemos aquí.
Y aparece el valor
correspondiente
aquí.
orientation
Permite cambiar la orientación del JSlider. Podrías por ejemplo hacer
que el JSlider estuviera en vertical.
181
John Carlos Arrieta Arrieta
minorTickSpacing
Permite asignar subdivisiones a las divisiones ya asignadas. Prueba por
ejemplo a asignar un 10 a esta propiedad y ejecuta el programa. Observa
las divisiones del JSlider.
snapToTicks
Cuando esta propiedad está activada, no podrás colocar el deslizador
entre dos divisiones. Es decir, el deslizador siempre estará situado sobre
una de las divisiones. Prueba a activarla.
paintTrack
Esta propiedad permite pintar o no la línea sobre la que se desliza el
JSlider. Prueba a desactivarla.
Son elementos muy comunes en los programas. A través de los dos botones
triangulares se puede hacer que el valor del cuadro aumente o disminuya.
También se puede escribir directamente un valor dentro del cuadro.
182
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
5. Interesa que cuando cambie el JSpinner (ya sea porque se pulsaron los
botones triangulares o porque se escribió dentro) aparezca el valor
correspondiente dentro de la etiqueta. Para ello, tendrá que programar el
evento stateChanged del JSpinner.
etiValor.setText("Valor : " +
spiValor.getValue( ).toString( ));
183
John Carlos Arrieta Arrieta
El usuario
modifica el valor
del JSpinner..
Y aquí aparece el
valor
seleccionado.
184
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
11. Prueba el programa y observa los valores que puede tomar el JSpinner.
12. Vamos a añadir otra mejora. Cambie el código del constructor por este
otro. (Observa que solo se ha añadido una línea):
SpinnerNumberModel nm = new
SpinnerNumberModel( );
nm.setMaximum(10);
nm.setMaximum(0);
nm.setStepSize(2);
spiValor.setModel(nm);
nm.setStepSize(2);
Esta línea usa un método del modelo del JSpinner que permite definir el
valor de cambio del JSPinner. Dicho de otra forma, esta línea hace que
los valores del JSpinner salten de 2 en 2.
14. Ejecuta el programa de nuevo y observa cómo cambian los valores del
JSpinner.
185
John Carlos Arrieta Arrieta
15. El modelo del JSpinner tiene también un método llamado setValue que
permite asignar un valor inicial al modelo. Pruebe a usar este método
para hacer que el JSpinner muestre desde el principio el valor 4.
Para definir el contenido del JSpinner es necesario crear un modelo del tipo
SpinnerNumberModel. Se le asigna al modelo los números deseados, y
finalmente se une el modelo con el JSpinner. El objeto modelo del JSpinner
permite definir el valor mínimo y el valor máximo, así como el intervalo de
aumento de los valores.
Valor mínimo
186
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
187
John Carlos Arrieta Arrieta
188
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
189
John Carlos Arrieta Arrieta
Si pulsas aquí, el
valor se incrementa
de 2 en 2, ya que el
incremento unitario
se configuró en 2.
Si pulsas aquí, el
valor se incrementa
de 20 en 20, ya que
el incremento en
bloque es de 20.
190
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
10. Tal como se ha indicado anteriormente, pasa algo raro con la barra de
desplazamiento cuando esta está al máximo. Se esperaba que alcanzara
el valor 150, y sin embargo, el valor máximo alcanzado fue de 145. La
explicación es la siguiente
5 ***
191
John Carlos Arrieta Arrieta
192
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Estas clases trabajan como una estructura anidada contenidos uno dentro del
otro, en este caso para trabajar con Menú primero se debe seguir los siguientes
pasos:
La barra de menús nos permitirá acceder a las opciones más importantes del
programa. Todo programa de gran envergadura suele tener una barra de menús.
193
John Carlos Arrieta Arrieta
194
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
10. Añada dos opciones más a la barra de menús. El inspector debe tener
ahora el siguiente aspecto:
195
John Carlos Arrieta Arrieta
12. Cambia los nombres de las dos nuevas opciones. Sus nombres serán:
menuEdicion y menuInsertar.
13. Cambia los textos de ambas opciones. Sus textos serán: “Edición” e
“Insertar”.
15. Haz clic con el botón derecho sobre el objeto menuArchivo y activa la
opción “Añadir – JMenuItem”.
196
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Los JMenuItem son objetos que representan las opciones contenidas en los
menús desplegables de la barra de menús.
16. Añade un JMenuItem más al menuArchivo y luego cambia el nombre a
ambos. Sus nombres serán menuItemAbrir y menuItemGuardar. El
aspecto del Inspector será el siguiente:
197
John Carlos Arrieta Arrieta
Los JSeparator son objetos que definen una separación entre las opciones de
un menú. Cámbiele el nombre y llámelo “separador1”:
20. Añada un nuevo JMenuItem al menú Archivo y ponle el nombre
menuSalir. El texto de esta opción será “Salir” (use su propiedad text) El
aspecto del Inspector será el siguiente:
198
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
199
John Carlos Arrieta Arrieta
this.getContentPane( ).setBackground(Color.RED);
200
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Se puede usar esta información para saber por ejemplo si se pulsó el botón
derecho del ratón, y sacar en este caso un menú contextual en pantalla.
201
John Carlos Arrieta Arrieta
Este evento recibe como parámetro un objeto llamado evt del tipo
MouseEvent (en rojo en el código) que nos permite saber en qué
condiciones se hizo clic.
if (evt.getButton( )==1) {
JOptionPane.showMessageDialog(null,"Pulso el
izquierdo");
} else if (evt.getButton( )==2) {
JOptionPane.showMessageDialog(null,"Pulso el central");
} else if (evt.getButton( )==3) {
JOptionPane.showMessageDialog(null,"Pulso el derecho");
}
202
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
14. Tienes que cambiar la propiedad text de cada opción del menú.
Recuerda que esta propiedad define lo que aparece en el menú.
Asignarás los siguientes textos: “Rojo”, “Verde” y “Azul”.
15. El menú emergente ya está construido. Ahora tenemos que hacer que
aparezca cuando el usuario pulse el botón derecho del ratón sobre el
formulario. Para ello, entraremos de nuevo en el evento mouseClicked
del formulario y cambiaremos su código por el siguiente:
203
John Carlos Arrieta Arrieta
18. Para hacer que al pulsarse una opción suceda algo, solo hay que activar
el método actionPerformed del JMenuItem correspondiente. Por
ejemplo, active el actionPerformed del menuRojo y dentro programe lo
siguiente:
this.getContentPane( ).setBackground(Color.RED);
Los menús contextuales son objetos del tipo JPopupMenu. Estos objetos
contienen JMenuItem al igual que las opciones de menú normales. Cuando se
asigna un JPopupMenu a un formulario, no aparece sobre la ventana, pero sí en
el inspector. Para hacer que aparezca el menú emergente, es necesario
programar el evento mouseClicked del objeto sobre el que quiera que aparezca
el menú. Tendrá que usar el método show del menú emergente para mostrar
dicho menú.
204
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
205
John Carlos Arrieta Arrieta
206
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
JOptionPane.showMessageDialog(null,"Activaste el botón
uno");
Nota: Busca un archivo de imagen que sea del tipo .gif o .jpg.
207
John Carlos Arrieta Arrieta
15. Una vez colocadas las imágenes a los botones, se puede quitar el texto
de estos. Un ejemplo de cómo podría quedar la barra de herramientas es
este:
208
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Alguno de los métodos más utilizados para trabajar con ventanas son:
Métodos Parámetros Retorno Descripción
setVisible Booleano Ninguno Si recibe true la ventana
será presentada en la
pantalla del PC, si recibe
false la ventana será
ocultada
setLocation Int x, int y Ninguno Recibe las coordenadas
x,y de la pantalla donde
será colocada la esquina
superior de la Ventana
setLocationRelativT JComponent Ninguno Recibe el componente
o GUI sobre el cual será
centrada la Pantalla
cuando sea visible, si
recibe null la Ventana
será centrada sobre la
209
John Carlos Arrieta Arrieta
pantalla del PC
setExtendedState int Ninguno Recibe
JFrame.MAXIMIZE_BOT
H para maximizar la
Ventana conforme al
ancho y alto de la
Pantalla.
pack Ninguno Ninguno Le da el tamaño a la
ventana conforme al
tamaño de los elementos
que contiene.
getContentPane Ninguno JContaine Devuelve el Panel
r contenedor donde se
colocan los elementos
dentro de la Ventana
setLayout LayoutManage Ninguno Establece el Layout
r (Lienzo) que determinara
la posición, número y
organización de los
elementos dentro de la
Ventana
setResizable Boolean Ninguno Si recibe un parámetro
true la ventana podrá
cambiar de tamaño, false
para un tamaño fijo
setImageIcon ImageIcon Ninguno Permite cambiar el icono
de la ventana
setTitle String Ninguno Establece el título que
tendrá la ventana
210
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Otra forma de crear Ventanas es diseñando una clase que herede de JFrame:
Las ventanas de dialogo son Hijas de las JFrame, su clase se llama JDialog
debido a que se utilizan especialmente para diseñar formularios con
Componentes GUI para Entrada o captura de Datos y así como para Salida o
presentación de datos. Estas ventanas tienen la calidad de estar en estado
Modal o no Modal. Si la ventana está en estado Modal indica que la Ventana que
está detrás de la misma no podrá utilizarse mientras la ventana de Dialogo Modal
este abierta, el caso contrario permite poder interactuar tanto con la Ventana de
Dialogo como con la Ventana desde la cual fue abierta dicha ventana de dialogo.
211
John Carlos Arrieta Arrieta
212
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
213
John Carlos Arrieta Arrieta
214
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
double unidades;
double precio;
double total; //total
double cantiva; //cantidad iva
double cantdes; //cantidad descuento
double totalsiniva; //total sin iva
215
John Carlos Arrieta Arrieta
total = totalsiniva+cantiva-cantdes;
10. Los JDialog son objetos ocultos, es decir, objetos que se colocan en la
parte del Inspector llamada Otros Componentes, al igual que sucede con
los menús contextuales o los JFileChooser. Observa tu inspector, allí
verás el JDialog que has añadido:
La variable de
tipo JDialog
216
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
217
John Carlos Arrieta Arrieta
Haces clic
sobre
Configuració
n y aparece
el diálogo
218
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
dialogoConfiguracion.setSize(250,200);
dialogoConfiguracion.setLocation(100,100);
dialogoConfiguracion.setVisible(true);
219
John Carlos Arrieta Arrieta
19. Los botones Aceptar y Cancelar del cuadro de diálogo aún no hacen
nada. Así que los programaremos. Empezaremos por el más sencillo, el
botón Cancelar.
20. El botón Cancelar de un cuadro de diálogo simplemente cierra dicho
cuadro de diálogo. Para ello, debes añadir el siguiente código en el
actionPerformed del botón Cancelar del diálogo:
dialogoConfiguracion.dispose( );
descuento=Double.parseDouble(txtDescuento.getText( ));
dialogoConfiguracion.dispose( );
220
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
a. Pulsa el botón
Configurar. Aparecerá el
cuadro de diálogo.
b. Pulsa sobre la
ventana.
c. Observarás que la
ventana se activa,
colocándose sobre el
cuadro de diálogo.
221
John Carlos Arrieta Arrieta
f. Ahora ejecuta el
programa de nuevo y haz que se
visualice el cuadro de diálogo de
configuración. Podrás comprobar
que se puede activar la ventana
e incluso escribir en sus cuadros
de textos, y que el cuadro de
diálogo sigue visible:
222
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
31. Para convertir nuestro cuadro de diálogo en modal, será necesario que lo
selecciones en el inspector y busques la propiedad modal. Debes activar
esta propiedad.
223
John Carlos Arrieta Arrieta
Las opciones Abrir y Guardar son opciones muy comunes en las aplicaciones.
Estas opciones permiten buscar en el árbol de carpetas del sistema un archivo
en concreto y abrirlo, o bien guardar una información dentro de un archivo en
alguna carpeta. Java proporciona una clase llamada JFileChooser (elegir
Archivo) que permite mostrar la ventana típica de Abrir o Guardar:
224
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
225
John Carlos Arrieta Arrieta
226
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
9. Una vez hecho esto, ya podemos programar la opción Abrir del menú.
Activa el evento actionPerformed de la opción “Abrir” y programa dentro
de él lo siguiente:
int resp;
resp=elegirArchivo.showOpenDialog(this);
if (resp==JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(null,elegirArchivo.getSelectedFile( ).toString( ));
} else if (resp==JFileChooser.CANCEL_OPTION) {
JOptionPane.showMessageDialog(null,"Se pulsó la opción Cancelar");
}
10. Ejecuta el código y prueba la opción “Abrir” del menú. Prueba a elegir
algún archivo y abrirlo. Prueba a cancelar la ventana de apertura. Etc
11. Analicemos el código anterior:
int resp;
resp = elegirArchivo.showOpenDialog(this);
227
John Carlos Arrieta Arrieta
if (resp==JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(null,elegirArchivo.getSelectedFile( ).toString( ));
} else if (resp==JFileChooser.CANCEL_OPTION) {
JOptionPane.showMessageDialog(null,"Se pulsó la opción Cancelar");
}
12. Hay que volver a dejar claro que el cuadro de diálogo “Abrir” realmente
no abre ningún archivo, sino que devuelve el camino del archivo elegido
usando el código:
elegirArchivo.getSelectedFile( ).toString( )
228
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
229
John Carlos Arrieta Arrieta
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
public class Principal {
230
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
});
ventana.getContentPane( ).add(boton,BorderLayout.NORTH);
ventana.setVisible(true);
}
}
231
John Carlos Arrieta Arrieta
232
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
String: es el
Mensaje que
mostraremos
como Alerta
233
John Carlos Arrieta Arrieta
la respuesta JOptionPane.YES_OPTIO
seleccionada N, o retorna 0 si la
por el usuario respuesta es NO, lo que
equivale a
JOptionPane.NO_OPTIO
N. Esta ventana estará
centrada sobre el
componente que le
pasemos como parámetro,
mostrando el mensaje que
igual le pasemos como
parámetro.
showOptionDialog JComponent Object Es igual a las anteriores
e, String, con la diferencia de que le
Object [ ] Correspond podemos configurar y
e a la cambiar cuales y cuantas
Opción opciones puede escoger el
escogida usuario como respuesta,
por el las opciones deben ir como
usuario un Arreglo de tipo Object
que bien podrían ser String
o Números, etc
* Cada uno de los métodos anteriormente descritos esta sobre cardado (posee
más de una versión o firma, los cuales se diferencian en el número, orden y de
sus parámetros de entrada), favor consultar la documentación de JSDK online
para conocer más al respecto.
Los siguientes ejemplos nos permitirán observar lo fácil que es trabajar con estas
ventanas:
El siguiente código nos presenta un ejemplo de cómo podemos trabajar con los
métodos de la clase JOptionPane para mostrar pequeñas ventanas de Alerta o
Informativa:
1. Importamos las clases necesarias JOptionPane y Color del paquete
javax.swing.
2. Definimos una clase llamada Principal la cual posee un único método,
en este caso el método main o método de ejecución de la aplicación.
3. Dentro del cuerpo método main declaramos mostramos una ventana de
mensaje tipo información.
234
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
import javax.swing.JOptionPane;
if(opcion == JOptionPane.YES_OPTION){
235
John Carlos Arrieta Arrieta
Luego nos aparece una ventana de pregunta, la cual muestra por defecto 3
botones.
Al cerrar la ventana anterior nos aparece otra nueva ventana, pero esta vez es
una ventana de Entrada de Datos, la cual viene acompañada de un mensaje y un
campo de texto para introducir la información que se nos pida.
236
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Todo programa tiene una interfaz gráfica de usuario (GUI) la cual permite a este
manejar el programa de forma sencilla. La interfaz gráfica de usuario consta de
la ventana principal, cuadros de diálogo, botones, cuadros de texto, etc…
Según el tipo de interfaz que tenga el programa, las aplicaciones se suelen
dividir en dos tipos: Aplicaciones SDI y Aplicaciones MDI.
237
John Carlos Arrieta Arrieta
238
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
239
John Carlos Arrieta Arrieta
240
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Llamada a un método
ConfiguracionVentana
241
John Carlos Arrieta Arrieta
242
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
243
John Carlos Arrieta Arrieta
Método para
acceder a la
etiqueta
etiImagen
244
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
Se pretende ahora programar la opción Abrir del menú de forma que se elija el
archivo de imagen a mostrar y se muestre este en una ventana interna.
La opción Cerrar del menú permitirá cerrar la ventana interna activa en un
momento determinado.
245
John Carlos Arrieta Arrieta
2.
if (boton==JFileChooser.APPROVE_OPTION) {
246
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
247
John Carlos Arrieta Arrieta
vi.setResizable(true);
vi.setMaximizable(true);
vi.setIconifiable(true);
vi.setClosable(true);
panelInterno.add(vi);
vi.setImagen(camino);
vi.setTitle(camino);
vi.setVisible(true);
248
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
249
John Carlos Arrieta Arrieta
250
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
251
John Carlos Arrieta Arrieta
Esto se hace, claro está suponiendo que haya alguna ventana activa, por
eso se comprueba que getSelectedFrame no haya devuelto null,
porque en ese caso es que no hay ventana interna activada y por tanto
no se puede cerrar.
252
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
253
John Carlos Arrieta Arrieta
JInternalFrame v[ ] = panelInterno.getAllFrames( );
254
Tecnicas de programación paso paso con Java – Nivel Basico
Una guía para el Estudiante
JInternalFrame v[ ] = panelInterno.getAllFrames( );
255
John Carlos Arrieta Arrieta
El panel interno posee diversos métodos que permiten acceder a las ventanas
actualmente abiertas dentro de él. Entre estos métodos podemos destacar:
Gracias a estos dos métodos podemos acceder a las ventanas internas y actuar
sobre ellas.
Todos los componentes GUI vistos hasta ahora requieren ser colocados dentro
otros componentes de tipo Contenedor, los cuales fueron diseñado
especialmente para poder colocarles otros componentes incluso otros
contenedores, por ejemplo:
Si diseñamos un formulario de login para iniciar sesión en nuestras
aplicaciones, como mínimo necesitamos de los siguientes componentes:
256
Contenedor de tipo JFrame
Campo de JPasswordField
Dos botones de tipo JButton, uno para la acción Aceptar y otro para la
acción Cancelar.
JFrame ventana
JRootPanel panelDeVentana
JLabel etiquetaID
JLabel etiquetaClave
JTextField campoID
JPasswordField campoClave
JButton botonAceptar
JButton botonCancelar
257
Las dos Etiquetas de Texto, los dos Campos de Texto y los dos Botones
de Acción fueron agregados a un Contenedor de tipo JRootPanel, el
cual se encuentra ubicado a su vez dentro de otro contenedor de tipo
Ventana JFrame.
JWindow: Una ventana sin marco, sin barra de título, ni botones para
maximizar, restaurar, minimizar y cerrar. No podemos incluir o agregar
una ventana dentro de otra ventana, solo podemos agregarle
Contenedores y Componentes.
JDialog: Una ventana hija de JFrame, solo posee un boton para cerrar y
carece de los otros dos botones.
258
JTabbedPane: Es un panel especial al cual solo le podemos agregar
otros paneles y estos se visualizan en forma de pestañas o tarjetas.
259
JScrollPane: Este panel solo nos permite agregarle un solo elemento, si
el tamaño del elemento es más grande que el tamaño del mismo panel,
entonces este agrega de forma automática dos barras de
desplazamiento, una pera poder desplazarlo horizontalmente y otro para
desplazarlo verticalmente, de manera que podamos observar todo el
elemento.
260
5. Si observas el Inspector
verás claramente la distribución de
los objetos:
Observa como tienes un
JScrollPane que contiene una
etiqueta.
9. Esta imagen es tan grande que no se podrá ver entera dentro del panel
de desplazamiento. Ejecuta el programa y observarás el uso de las
barras de desplazamiento dentro del panel.
261
10. Puedes mejorar el programa si agrandas el panel de desplazamiento de
forma que ocupe todo el formulario:
262
3. Ahora añade dentro del JScrollPane un panel normal (JPanel). En la
ventana no notarás ninguna diferencia, pero en el Inspector debería
aparecer esto:
4. Como ves, el
JScrollPane contiene a un
objeto JPanel.
5. Aprovechemos para
cambiar el nombre a ambos
objetos. Al JScrollPane lo
llamaremos scpDatos y al
JPanel lo llamaremos panelDatos.
263
8. En la pantalla aparecerá únicamente el JPanel, para que puede ser
diseñado aparte de la ventana completa:
Para distinguirlo de
lo que es en sí la ventana,
haremos las siguientes
cosas con el panel:
Cambia el color de
fondo y asígnale un color
verde.
Añade en él una
etiqueta con el texto
“Panel de Datos”.
Añade varias
etiquetas y cuadros de
textos correspondientes a
los días de la semana.
Agranda el panel.
El panel debería quedar así. Toma
como referencia esta imagen:
9. Haz doble clic sobre el JFrame (en el Inspector) para poder ver
globalmente la ventana. En la pantalla debería aparecer esto:
264
Los objetos JScrollPane son
paneles de desplazamiento.
Estos paneles pueden contener
objetos mayores que el propio
panel de desplazamiento.
Cuando esto sucede, el panel
muestra barras de
desplazamiento para poder
visualizar todo el contenido del
panel.
Los JScrollPane son ideales para
mostrar imágenes, paneles y
otros elementos cuyo tamaño
pueda ser mayor que la propia
ventana.
265
Utilizando uno o varios Layout (lienzo)
Supongamos que deseamos construir un formulario para iniciar sesión tal y
como se muestra en la siguiente imagen:
panelVentana.setLayout(null);
266
JLabel etiquetaClave = new JLabel(“Password”);
JTextField campoID = new JTextField ();
JPasswordField campoClave = new JPasswordField ();
JButton botonEntrar = new JButton(“Login”);
JButton botonRegistrar = new JButton(“Register”);
int x = 10;
int y = 10;
int ancho = 70;
int alto = 30;
etiquetaID.setBounds( x, y, ancho, alto); // 10,10, 70,30
campoID.setBounds( x+90, y, ancho+50, alto);
// 100, 10, 120, 30
etiquetaClave.setBounds( x, y+40, ancho, alto);
// 10, 50, 70, 30
campoClave.setBounds( x+90, y+40, ancho+50, alto);
//100, 150, 120, 30
botonEntrar.setBounds( x, y+90, ancho, alto);
// 10, 100, 70, 30
botonRegistrar.setBounds( x+90, y+90, ancho, alto);
//100, 100, 70, 30
panelVentana.add(etiquetaID);
panelVentana.add(campoID);
panelVentana.add(etiquetaClave);
panelVentana.add(campoClave);
panelVentana.add(botonEntrar);
panelVentana.add(botonRegistrar);
ventana.setLocationRelativeTo(null);
267
8. Mostrar la ventana
ventana.setVisible(true);
Como veras, todo esto es tedioso muy tedioso, ya que debemos llevar la cuenta
de las coordenadas que aplicamos a cada componente para que no queden
montados uno sobre el otro, pero además debemos tener en cuenta que las
dimensiones y coordenadas no superen las dimensiones del componente.
Por ejemplo:
ventana.setSize(250, 150);
La ventana tiene un ancho de 250 pixeles de ancho y 150 pixeles de alto, por lo
tanto la primera coordenada del eje X es 0 y la última es 249, mientras que las
coordinadas del eje Y van desde 0 hasta 149.
int x = 10;
int y = 10;
panelVentana.setLayout(null);
268
coordenada Y, el tercero es el ancho en pixeles del componente sobre el eje X
partiendo de la coordinada X, el cuarto y último parámetro es el alto en pixeles
del componente sobre el eje Y de la ventana, igualmente partiendo del valor de
la coordinada Y.
El campoID lo vamos colocar en el pixel 100 del eje X y el pixel 10 del eje Y,
tendrá un ancho de 120, y un grosor de 30, esto quiere decir que entre la
etiquetaID y el campoID habrán 10 pixeles de especio que los separe, ya que
en la etiquetaID estará ubicada desde el punto 20 hasta el en el eje X
mientras que el campoID está ubicado desde el punto 100 hasta el punto 220 en
el mismo eje.
Para el caso del campoClave, este lo debemos desplazar hasta el pixel 100 del
eje X y desde allí tendrá un ancho de 120 pixeles, es decir que ira desde el 100
269
hasta el 220 sobre el eje X. Su grosor iniciara desde el pixel 50 del eje Y y
avanzara 30 pixeles hacia abajo hasta llegar al pixel 80 en el eje Y.
Partiendo de esta explicación es fácil calcular los datos para los dos botones.
270
Seguidamente establecemos que este será el lienzo para panel contenedor de la
ventana.
panelVentana.setLayout( rejilla );
// …
panelVentana.add( etiquetaID );
panelVentana.add( campoID );
panelVentana.add( etiquetaClave );
panelVentana.add( campoClave );
panelVentana.add( botonEntrar );
panelVentana.add( botonRegistrar ) ;
271
El uso de layout tiene muchos beneficios para mejorar la portabilidad de nuestras
aplicaciones, entre los que se encuentran:
Los componentes siempre estarán en la posición donde deseamos que
estén, sin importar el sistema operativo donde estemos ejecutando la
aplicación o el tipo de pantalla que tenga instalado el PC.
Si la ventana o contenedor aumenta o disminuye su tamaño, los
componentes en su interior se ajustaran al nuevo tamaño.
No es necesario dar dimensiones a la Ventana invocando el método
setSize, en su lugar se invoca el método pack() el cual calcula
automáticamente el tamaño que debe tener la ventana según las
dimensiones de los componentes en su interior
272
3. Las líneas azules que aparecen indican con qué otro elemento está
relacionado un componente de la ventana. La situación de un elemento
dependerá siempre de la situación del otro.
Dicho de otra forma, las líneas azules indican las distancias que siempre
se respetarán. Observa la siguiente imagen:
El botón siempre
estará a esta
distancia de la
etiqueta…
El botón siempre
estará a esta distancia
del borde inferior de la
ventana…
273
5. Este comportamiento de los elementos en la ventana viene dado por una
opción del NetBeans llamada Diseño Libre (Free Design)
El Diseño Libre permite que los elementos de una ventana mantengan una
distribución relativa da igual el tamaño que tenga la ventana. Dicho de otra
forma, los elementos se redistribuyen al cambiar el tamaño de la ventana. El
problema del Diseño Libre es el poco control que se tiene sobre los elementos
que se añaden a la ventana. Se puede observar como a veces los elementos no
se colocan en la posición que deseamos o como cambian de tamaño de forma
inesperada. Todo esto es debido a la necesidad de dichos elementos de
mantener unas distancias relativas con otros elementos de la ventana. Cuantos
más elementos tengamos en una ventana, más difícil será el colocarlos usando
el Diseño Libre.
El Diseño Libre es la opción que está activada por defecto cuando se crea un
proyecto en NetBeans. Sin embargo, esta opción se puede cambiar por distintos
“Layouts” o “Distribuciones”.
274
2. El Inspector tendrá la siguiente forma ahora en su árbol de jerarquía de
componentes agregados a la Ventana:
275
4. La ventana de definir una distribución AbsoluteLayout es la facilidad para
colocar cada elemento en la ventana (no tendrás los problemas del
Diseño Libre). Sin embargo, la desventaja es que los elementos no
mantienen una distribución relativa respecto al tamaño de la ventana.
5. Ejecuta el programa y reduce su ancho. Observa lo que ocurre:
Verás que los elementos de la ventana son inamovibles aunque la
ventana cambie de tamaño. En cambio, en el Diseño Libre los elementos
intentaban siempre estar dentro de la ventana.
276
1. Observa como el layout “AbsoluteLayout” es sustituido por la distribución
“FlowLayout”. Un elemento solo puede tener un tipo de distribución a la
vez.
277
3. Si seleccionas el FlowLayout en el Inspector, podrás acceder a sus
propiedades (los layout son objetos como los demás) Una de las
propiedades del FlowLayout se llama alineación y permite que los
elementos estén alineados a la izquierda, derecha o centro. El
FlowLayout tiene una alineación centro por defecto.
En el FlowLayout,
los elementos
intentan siempre
estar dentro de la
ventana, aunque
esta se cambie de
tamaño…
278
3. Marca el GridLayout y cambia sus propiedades Filas y Columnas.
Asigna a la propiedad Filas un 2 y a la propiedad Columnas un 3.
279
4. Al asignar 2 filas y 3 columnas al GridLayout, conseguiremos que los
elementos de la ventana se distribuyan en una tabla como la siguiente:
280
6. En un GridLayout, los elementos estarán situados siempre en una
casilla de la rejilla, ocupando todo su espacio. El programador no tiene
mucho control sobre la disposición de los elementos.
281
Zona norte (parte superior de la ventana)
Zona sur (parte inferior de la ventana)
Zona este (parte derecha de la ventana)
Zona oeste (parte izquierda de la ventana)
Zona centro.
282
3. Como se puede observar, cada botón se ha colocado en una zona, y su
tamaño ha variado hasta ocupar la zona entera. Tenemos un botón en el
norte, otro al sur, uno al este, otro al oeste y uno en el centro.
El programador no tiene mucho control sobre la disposición de los
elementos en la ventana al usar esta distribución.
4. Ejecuta el programa y observa como los elementos siempre se
mantienen dentro de la ventana aunque esta cambie de tamaño.
283
El diseño de la ventana viene definido por los Layouts o distribuciones.
284
Normalmente, al JFrame se le asigna un layout que lo divida en zonas, como
puede ser el BorderLayout o el GridLayout. Luego, dentro de cada una de
estas zonas se introduce un panel (objeto JPanel). Y a cada uno de estos
paneles se le asigna el layout que más le convenga al programador
(FlowLayout, Diseño Libre, AbsoluteLayout, etc…) Finalmente, dentro de cada
panel se añaden los componentes de la ventana.
JFrame
(BorderLayout o GridLayout)
Componentes Componentes
285
3. El BorderLayout divide la ventana principal en zonas. Ahora añade un
panel (JPanel) a la zona norte de la ventana. (Propiedades )
286
NOTA. A veces resulta complicado agregar un panel en una zona de la ventana
cuando tenemos un BorderLayout. Puedes entonces hacer clic con el derecho
sobre JFrame en el Inspector y activar la opción Agregar desde paleta – Swing
– JPanel.
287
10. Cada panel puede ser diseñado de forma individual, simplemente
haciendo doble clic sobre él. Así pues, empezaremos diseñando el panel
panelBotonera. Haz doble clic sobre él.
288
(No nos vamos a preocupar en este ejercicio de los nombres de los
componentes)
13. Ahora diseña el panel panelVerificación haciendo doble clic sobre él.
14. Asígnale también un layout AbsoluteLayout.
15. Coloca en él cuatro casillas de verificación. El aspecto del panel al
terminar debe ser parecido al siguiente:
289
17. En este caso se le añadirá un FlowLayout. Recuerda que este layout
hace que cada elemento se coloque uno detrás de otro.
18. Añade al panel dos etiquetas como las que siguen. Ponle un borde a
cada una:
Observa las líneas “guía”. Indican que las etiquetas dependen de la parte
derecha del panel. A su vez cada una depende de la otra. Es como si
estuvieran “enganchadas”, como los vagones de un tren.
20. El panelDatos lo vamos a complicar un poco. Haz doble clic sobre él para
diseñarlo y asígnale un GridLayout.
290
21. Marca el GridLayout y asígnale 2 filas y 2 columnas, para que
interiormente tenga forma de una rejilla como esta:
23. Asignaremos a cada uno de los cuatro paneles los siguientes nombres:
panelEtiqueta1, panelCuadro1, panelEtiqueta2, panelCuadro2. El panel
quedará así en el Inspector.
291
Así pues, el panel panelDatos tiene forma de rejilla con cuatro celdas, y
en cada celda hay un panel. Puede imaginarse el panelDatos así:
panelDatos
PanelEtiqueta1 PanelCuadro1
PanelEtiqueta2 PanelCuadro2
Para el diseño de ventanas muy complejas, ser suelen definir layouts que dividan
en zonas el JFrame , como por ejemplo el BorderLayout o el GridLayout.
Dentro de cada una de dichas zonas se añade un JPanel, al que se le asigna un
AbsoluteLayout, un FlowLayout o se mantiene el Diseño Libre.
292
Es posible asignar a un panel un layout de zonas, como el GridLayout, y, a su
vez, introducir en él nuevos paneles, y así sucesivamente.
Clase Principal
293
4. Esta ventana contiene lo siguiente:
294
Esta variable contendrá en todo momento los coches que hay
actualmente en el Parking. Esta variable podrá ser usada desde
cualquier evento.
7. Para crear una variable global haz clic en el botón “Origen” para acceder
al código:
8. Luego busca, al comienzo del código una línea que comenzará por
public class
295
Declaración de una
variable global int
llamada coches.
Inicialización de la
propiedad coches.
296
Por ejemplo, empezaremos programando la pulsación del botón “Entró
un coche”. Acceda a su evento actionPerformed y programe esto:
coches=coches+1;
etiCoches.setText(“”+coches);
Pulsas, y aparece
aquí el valor de la
propiedad coches.
if (coches>0) {
coches=coches-1;
etiCoches.setText(“”+coches);
297
Como ves, se accede igualmente a la propiedad coches pero esta vez
para restarle una unidad. Luego se muestra el valor actual de coches en
la etiqueta correspondiente.
14. Ejecuta el programa y prueba los dos botones. Observa como la cantidad
de coches del parking aumenta o disminuye.
Al pulsar aquí
aumentas en uno la
propiedad coches.
Al pulsar aquí
disminuyes en uno la
propiedad coches.
coches=0;
etiCoches.setText(“0”);
298
Simplemente introduzco el valor cero en la variable global y actualizo la
etiqueta.
Evento 1
Código A
Evento 2
Código B
Evento 3
Código A
Lo mejor es que el código que tenga que ser ejecutado desde distintos eventos
aparezca solo una vez, y sea llamado desde cada evento:
299
Evento 1
Evento 2 Código A
Evento 3
Veamos algunos ejemplos en los que el código se puede repetir y como evitar
esta repetición.
2. La VentanaCalculos debe
estar diseñada de la siguiente
forma:
X4
300
contiene un JMenu con el texto “Calcular” y que se puede llamar
menuCalcular
301
f. Si elige la opción del menú Calcular-Restar entonces se calculará
la resta.
g. Si elige la opción del menú Calcular-Borrar entonces se borrarán
ambos cuadros de texto.
h. Si se pulsa enter en alguno de los dos cuadros de texto se
debería calcular la suma.
6. Para que el código esté “centralizado”, es decir, que aparezca solo una
vez, será necesario construir en la clase un método. Un método en java
es el equivalente de una función o procedimiento en C. Veamos cómo
hacerlo:
8. Un buen sitio para programar tus procedimientos puede ser debajo del
constructor. Puedes distinguir fácilmente al constructor porque tiene el
mismo nombre que la clase que estás programando, o dicho de otro
modo, tiene el mismo nombre que la ventana que estás programando:
VentanaCalculos.
302
Este es el Método
Constructor de Instancias u
Objetos de esta Clase
Este es un buen sitio para
crear tus propios
procedimientos o metodos
303
10. Si observas el código, es el típico procedimiento de C, cuya cabecera
comienza con void y el nombre que le hayas asignado (en nuestro caso
Sumar)
void Sumar() {
....
}
Si estudias las líneas del código, verás que lo que hace es recoger el
contenido de los dos cuadros de texto en dos variables de cadena
llamadas cad1 y cad2.
11. Hay que destacar que este código no pertenece ahora mismo a ningún
evento en concreto, por lo que no tiene efecto ninguno sobre el
programa. Será necesario pues asociar los eventos correspondientes
con este procedimiento.
12. Interesa que al pulsar el botón “Sumar” se ejecute la suma, así pues
entre en el evento actionPerformed del botón “Sumar” y añada la
siguiente línea:
Sumar();
13. Como también interesa que al pulsar la opción del menú “Calcular-
Sumar” se ejecute la suma, entre en el evento actionPerformed de la
opción del menú “Sumar” y añade de nuevo la siguiente línea:
Sumar();
14. También se quiere que al pulsar la tecla enter en el cuadro de texto del
número 1 se ejecute la suma. Por lo tanto, en el evento actionPerformed
del cuadro de texto txtNumero1 hay que añadir la siguiente línea:
304
Sumar();
Sumar();
actionPerformed btnSumar
actionPerformed menuSumar
Método o Procedimiento
Sumar()
actionPerformed txtNumero1
actionPerformed txtNumero2
305
Pulsar Botón Restar
Codigo de este
Método o
procedimiento.
306
19. El código de este procedimiento es prácticamente idéntico al del
procedimiento Sumar, así que no se comentará.
20. Ahora, es necesario que cuando se activen los eventos indicados antes,
estos hagan una llamada al procedimiento Restar para que se efectúe la
resta. Así pues, entre en el evento actionPerformed del botón “Restar” y
añada esta línea de código:
Restar();
Restar();
actionPerformed btnRestar
Restar
actionPerformed menuRestar
307
24. Ahora programa las llamadas al procedimiento borrar desde los distintos
eventos. En el evento actionPerformed del botón “Borrar” y en el evento
actionPerformed de la opción del menú “Borrar” programa la siguiente
llamada:
Borrar();
Hasta este punto del libro, desdese el Capítulo 4 en adelante, hemos aprendido
a Diseñar y construir GUI (Interfaces Graficas de Usuario) trabajado con los
elementos más importantes y comunes como Ventanas, Contenedor y
Componentes, pero todo lo hemos hecho de la manera WYSIWYG ( What You
See Is What You Get) que he español significa LO QUE VES ES LO QUE
OPTINES. Esta técnica avanzada provista por la mayoría de IDE nos ofrece una
forma un tanto transparente de desarrollar GUI, en nuestro caso en la mayoría
de los ejemplos utilizamos el Diseñador de GUI (Interfaces Graficas de Usuario)
que nos proporciona el IDE NetBeans.
Esta herramienta es muy poderosa a la hora de desarrollar aplicaciones en el
ámbito profesional, ya que nos ofrece un buen número de ventajas como lo son:
308
Acceso rápido y documentado a las propiedades de cada elemento GUI,
con el fin de configurar o establecer sus respectivos valores según
nuestra necesidad.
Esta herramienta de Diseño GUI es una gran herramienta que nos permite
diseñar formularios de forma relativamente sencilla. Simplemente tenemos que
añadir los componentes del formulario: botones, etiquetas, cuadros de textos,
etc, y cambiar sus propiedades según nos interese.
Todo esto tiene un código asociado que se genera de forma automática, y del
que no nos hemos preocupado hasta el momento.
Por ejemplo, cada vez que añades un botón o una etiqueta, se generan
automáticamente las instrucciones de código que permiten crear dicho botón o
dicha etiqueta. También se genera el código que permite cambiar el texto del
botón, o cambiar el texto de la etiqueta.
Bueno, tal y como lo esperas, vamos a explicar todo mediante ejemplos simples,
que nos permiten comprobar lo descrito anteriormente:
309
4. Todas estas operaciones que
has realizado tienen asociado unas
instrucciones de código que se han
generado automáticamente. Para
estudiar estas instrucciones, activa el
botón Origen en la parte superior de
la pantalla:
310
6. El código generado (señalado en azul) no puede ser modificado, sin
embargo es interesante estudiarlo para entenderlo. En él puedes
encontrar como se crean los componentes, como se asigna el texto a
éstos etc.
311
Nombre del proyecto.
Nombre del paquete.
Nombre del formulario.
También verás otro comentario donde aparece el nombre del autor. Este comentario se
puede cambiar para que aparezca tu nombre.
312
2. Un proyecto en java está formado por módulos denominados CLASES.
El proyecto que acabamos de crear tiene un solo módulo: el JFrame que
define la ventana principal, llamado precisamente ventanaprincipal. Por
tanto, se puede decir que nuestro proyecto tiene una clase llamada
ventanaprincipal.
El proyecto operaciones
tiene una clase llamada
ventanaprincipal, que
pertenece al paquete
ventanas.
…programación de la clase…
}
313
automáticamente. Si quieres verlo, solo tienes que desplegar la parte de
Código Generado:
Cuerpo de la
Clase
ventanaprincipal
314
315
C. DISEÑO DE LA VENTANA DESDE CÓDIGO
Vamos ahora a diseñar la ventana de nuestro programa (sin usar la ventana de
diseño, solo a partir de código). Al final de esta explicación, la ventana del
Para conseguir esto, sigue los siguientes pasos:
6. Para realizar el diseño de la ventana, crearemos un método propio al que
llamaremos por ejemplo CreacionVentana. Un buen sitio para colocar
este método puede ser debajo del constructor:
El método donde
diseñaremos nuestra
ventana…
316
Usa el método setTitle de la ventana para definir el texto de la barra de
título.
Usa el método setSize de la ventana para definir un tamaño de 500x300.
Usa el método setLocation de la ventana para definir la posición de la
ventana en la posición (100,100) de la pantalla.
317
9. Ya puedes ejecutar el programa. En el momento en que se ejecuta el
programa, el constructor llama al método CreacionVentana y se definen
las características programadas.
318
Podrás usar la bombilla del NetBeans para agregar el import
correspondiente automáticamente.
Importación de la librería
para el objeto JLabel, que
define las etiquetas.
(Agregada
automáticamente al pulsar
la bombilla del NetBeans)
319
La primera línea construye la etiqueta llamada etiNum1 que fue
delarada antes.
etiNum1 = new JLabel();
Generalizando: para crear un objeto llamado xxx del tipo tipoobjeto,
se tendrá que hacer lo siguiente:
tipoobjeto xxx;
o Luego, dentro de la clase, se construye el objeto siguiendo la
siguiente sintaxis:
etiNum1.setText(“Número 1: “);
Hay que definir la posición que tendrá el objeto y el tamaño. Para
ello, se usará el método setBounds. Este método recibe la posición
(x, y) del objeto y el ancho y el alto. En el ejemplo, la etiqueta está
situada en la posición (10,10) de la ventana y tiene un ancho de 100
y un alto de 20:
etiNum1.setBounds(10,10,100,20);
Finalmente, hay que colocar la etiqueta en el panel de contenidos de
la ventana. Para ello, se usa el método add del panel de contenidos.
Recuerda que para obtener este panel se usa el método
getContentPane:
this.getContentPane().add(etiNum1);
15. Es buena idea que ejecutes el programa para ver el aspecto de la
ventana ahora.
16. Hemos añadido una etiqueta. Ahora añadiremos la siguiente. Para ello,
primero tienes que declarar la etiqueta en la zona de las variables
globales:
320
17. Luego, en el método ConstruirVentana, añadiremos el siguiente código:
321
20. Sigamos añadiendo elementos. Ahora añadiremos un cuadro de texto
llamado txtNum1. Primero declara la variable del cuadro de diálogo en la
zona de variables globales:
322
La primera línea construye el cuadro de texto llamado txtNum1. Los
JTextField son objetos del tipo cuadro de texto.
Esta línea se subrayará en rojo ya que será necesario añadir el import
para la librería de los JTextField.
La siguiente línea introduce la cadena “0” dentro del cuadro de texto.
La siguiente línea asigna la posición y el tamaño a través del método
setBounds.
Y finalmente, la última línea añade el cuadro de texto al panel de
contenidos de la ventana.
323
26. Ejecuta el programa y comprueba cómo va el diseño de la ventana:
27. Ahora le toca el turno a los botones. Primero declararemos una variable
del tipo JButton en la zona de variables globales (será necesario añadir
el import correspondiente a la clase JButton a través de la bombilla). El
botón se llamará btnSumar:
324
28. Y a continuación construiremos y le daremos forma al botón, añadiendo
el siguiente código en el método ConstruirVentana:
325
32. Tienes que escribir el siguiente código:
33. El código es prácticamente igual que el del primer botón. Solo cambia el
nombre del botón, el texto y la posición y tamaño del botón.
34. Ejecuta el programa para ver cómo queda la ventana.
326
La ventana de diseño de NetBeans es una herramienta que nos permite diseñar
las ventanas sin tener que programar código.
Es posible prescindir de la ventana de diseño y realizar todo el diseño de la
ventana programando.
El diseño de la ventana se tiene que hacer en el constructor de la clase.
Los componentes de una ventana son variables globales cuyo tipo se
corresponde a distintas clases de objetos: JLabel, JTextField, JButton, etc...
Para construir un objeto hay que declararlo como una variable global:
TipoObjeto NombreObjeto;
Y luego, dentro de la clase, construirlo, usando la siguiente sintaxis:
NombreObjeto = new TipoObjeto();
Luego se pueden usar distintos métodos del objeto para trabajar con él.
327
El objeto oyente/adaptador hay que asociarlo al elemento sobre el que
sucede el evento.
Etc.
Cada una de las acciones anteriorer son Eventos, para los cuales Java posee
una clase generica o Super Clase para ellos, llamada Event, de ella derivan o
herredan todos los eventos especializados en un suceso especifico.
Java tambien proporciona otras clases denominadas Oyentes de Eventos o
Listener, las cuales tienen como propocito escuchar y detectar eventos de tipo
Event, cada evento tiene relacionado un Oyente especifico, los cuales poseen
328
una serie de metodos (funciones u operaciones) que reaccionan
automanticamente jusnto cuando el Oyente detecta la ocurrencia de un Evento
de su interes. A estos metodos se les conoce como Manejadores de Eventos o
Disparadores, mientras que el codigo que colocamos en su interior (denominado
Adaptador) es el encargado de manejar o realizar las acciones que deseamos se
ejecuten cuando ocurra X evento.
Nuestra tarea al trabajar con Eventos conciste basicamente en:
1. Identificar los Elementos o procesos susceptibles de generar Eventos
(botones, Item de Menu, Campos de Texto, Listas, Tablas, archivos, etc).
Por otro lado, la sintaxis de programación para los eventos es distinta a lo que se
ha visto hasta ahora, por lo que puede resultar bastante oscura, aunque por otro
lado, siempre sigue el mismo patrón.
Para simplificar el estudio de la programación de eventos, nos limitaremos a los
eventos más usados, los cuales pueden clasificarse en los siguientes grupos:
NOMBRE DEL
NOMBE DE LA CLASE MOMENTO EN QUE SE DISPARA O
METODO
OYENTE EJECUTA
MANEJADOR
ActionListener Cuando deseamos Activar un
actionPerformed
(Eventos de Acción) componente (pulsación de botón,
enter en un cuadro de texto)
KeyListener Cuando Se pulsó una tecla, pero no
keyPressed
(Eventos de Teclado) se soltó.
329
WindowListener windowOpened Cuando Se abrió la ventana
(Eventos de Ventana) windowActivated Cuando Se activó la ventana
Disparador Oyente/Adaptador
actionPerformed Se programa dentro de ActionListener
330
} El metodo disparador del Oyente
}); que actuara automaticamente Este es el Manejador del Evento, en
cuando el vento ocurra. Recibe caso dentro del cuerpo del metodo
como argumento una instancia del Disparador invocamos otro metodo
El código anterior
Evento permite
ocurridocrearla y cual
asignar el evento que
esta actionPerformed al botón
contiene el código que realizara
btnSumar, pero no programa
representada por laelvariable
evento. las el
evtPara programar acciones
evento que deseamos se
es necesario
crear el procedimiento cuya llamada se incluye ejecuten cuando
dentro delel evento
eventoocurra
actionPerformed:
public void btnSumarActionPerformed(ActionEvent evt) {
… aquí se programa el evento actionPerformed del botón btnSumar …
}
A pesar de lo complicado que resulta, hay que tener en cuenta que siempre se
programa de la misma forma. Solo hay que cambiar el componente que se
quiere programar y asignar un nombre a la función donde se programará el
evento.
Hay que tener en cuenta que en el código expuesto antes participan nuevas
clases como son ActionEvent y ActionListener, y se tendrán que agregar los
import correspondientes.
El siguiente ejemplo nos puede ilustrar major el proceso de programar un Oyente
de Evento y su respectivo método manejador
1. Abra el proyecto Operaciones que se hizo en el ejercicio guiado de la
hoja anterior.
2. En el ejercicio guiado anterior se diseñó desde código la ventana de
dicho proyecto. Esta ventana tiene el siguiente aspecto (Se indica
también el nombre de los distintos componentes):
331
txtNum1 y txtNum2 son
los cuadros de texto.
btnSumar es el btnRestar es el
botón Sumar botón Restar
public ventanaprincipal() {
En el constructor hacemos una
llamada a nuestro método
initComponents(); CreacionVentana
CreacionVentana();
332
public void CreacionVentana() {
Programamos
this.setTitle("Programa Operaciones"); algunos detalles
de la ventana
principal…
this.setSize(500,300);
this.setLocation(100,100);
etiNum1.setBounds(10,10,100,20);
this.getContentPane().add(etiNum1);
etiNum2.setText("Número 2:");
Creamos la etiqueta
“Número 2”…
etiNum2.setBounds(10,60,100,20);
this.getContentPane().add(etiNum2);
txtNum1.setBounds(110,10,100,20);
this.getContentPane().add(txtNum1);
333
txtNum2 = new JTextField();
Creamos el segundo…
txtNum2.setText("0");
txtNum2.setBounds(110,60,100,20);
this.getContentPane().add(txtNum2);
btnSumar.setText("Sumar");
btnSumar.setBounds(10,120,100,20);
this.getContentPane().add(btnSumar);
btnRestar.setText("Restar");
btnRestar.setBounds(150,120,100,20);
this.getContentPane().add(btnRestar);
334
btnSumar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
btnSumarActionPerformed(evt);
}
});
(Recuerda que el código es siempre igual, solo hay que indicar el nombre
del botón y el nombre del procedimiento al que se llama)
6. Será necesario añadir un import para el objeto oyente ActionListener y
para la clase ActionEvent.
Hay que
programar el
método al que
llama el evento…
335
8. Es precisamente en este nuevo procedimiento que hemos creado donde
se programa el evento actionPerformed del botón btnSumar. Lo que se
pretende que haga el programa es que aparezca un JOptionPane con la
suma de los números introducidos. Para ello, añade el siguiente código:
Programa el
código de lo que
tiene que hacer el
evento.
336
btnRestar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
btnRestarActionPerformed(evt);
}
});
337
método btnRestarActionPerformed que realiza la operación de
Restar
338
Cada evento pertenece a un objeto oyente, y es el oyente el que se asigna al
componente de la ventana que se quiere programar.
El evento actionPerformed pertenece al oyente ActionListener.
Para enlazar el oyente ActionListener a un componente XXX hay que usar el
siguiente código:
XXX.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
XXXActionPerformed(evt);
}
});
El enlace de un evento a un componente se hace en el constructor. Esta
asignación hace una llamada a un procedimiento XXXActionPerformed, (donde
XXX representa el nombre del componente que se programa) Es en este
procedimiento donde realmente se programa el evento.
339
Como se dijo en la hoja anterior, todos los eventos pertenecen a un objeto
“oyente” o “adaptador”. En este caso concreto, todos los eventos del ratón
pertenecen a un objeto “adaptador” llamado MouseAdapter.
Cada uno de los eventos se programará dentro del adaptador MouseAdapter.
Cada evento es en realidad un procedimiento que recibe un parámetro con
información sobre el evento. Este parámetro, en el caso de los eventos del ratón,
es del tipo MouseEvent.
Cada evento a su vez hace una llamada a un procedimiento, y es en este
procedimiento donde realmente se programa la respuesta al evento.
Todo esto resulta complicado al principio, pero verás que en realidad siempre es
igual. Solo hay que conocer el nombre de cada evento, el adaptador u oyente al
que pertenece y el tipo de parámetro que recibe cada evento.
XXX.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent evt) {
XXXMouseEntered(evt);
}
341
La llamada...
La propiedades o variables
globales o miembros de la clase.
342
Configuramos las
propiedades de la
ventana
Creamos la
instancai de la
primera etiqueta y
configuramos sus
propiedades, la
agregamos al
contenido de la
ventana
Igual hacemos con
la segunda etiqueta
343
7. El objetivo del programa es simple. Queremos que al entrar el ratón
dentro de la superficie de la etiqueta roja, aparezca un mensaje en la otra
etiqueta indicándolo. También queremos que aparezca un mensaje al
salir el ratón de la etiqueta. Y también al pulsar un botón del ratón sobre
la etiqueta.
344
etiZona instancia de
tipo JLabel le
agregamos un de
Oyente de Eventos
del Ratón, para ello
creamos una
instancia de tipo
MouseAdapter o de
MouseListener.
Implementamos los
Disparadores y n su
interior escribimos e
código del
manejador o
invoamos un metodo
con dicho código
345
(Llave que cierra el método CreacionVentana)
Debemos
programar
estos tres
metodos
que seran
los
Manejador
es de cada
Evento y
seran
invocador
por los
disparador
es
13. Vamos a añadir una pequeña mejora que nos servirá para estudiar ese
objeto llamado evt del tipo MouseEvent que llevan todos los eventos de
ratón como parámetro.
Se dijo antes que este parámetro contiene información sobre la acción
del ratón. Por ejemplo, nos puede servir para saber cuantas veces se
pulsó el ratón, con qué botón, etc. Aprovecharemos este parámetro para
indicar qué botón del ratón es el que se ha pulsado sobre la etiqueta.
Cambia el procedimiento etiZonaMousePressed y déjalo de la siguiente
forma:
346
14. En el código anterior aprovechamos los métodos que tiene el objeto
MouseEvent para averiguar que botón se ha pulsado. Usamos el método
getButton que nos dice el botón pulsado. Aprovechamos las constantes
de la clase MouseEvent para saber si se pulsó el botón izquierdo, central
o derecho.
15. Ejecuta el programa y comprueba el funcionamiento.
347
A la hora de programar eventos sobre un componente concreto, será necesario
tener en cuenta lo siguiente:
Primero hay que enlazar el componente con el oyente o adaptador
correspondiente al evento.
El oyente o adaptador contendrá aquellos eventos que interesen
programar.
Cada evento tiene un parámetro asociado con información sobre el
evento.
Cada evento realiza una llamada a un procedimiento y es en este
procedimiento donde se programa la respuesta al evento.
etiTexto.addMouseListener(new MouseAdapter() {
348
public void mouseEntered(MouseEvent evt) {
etiTextoMouseEntered(evt);
}
public void mouseExited(MouseEvent evt) {
etiTextoMouseExited(evt);
}
public void mousePressed(MouseEvent evt) {
etiTextoMousePressed(evt);
}
public void mouseReleased(MouseEvent evt) {
etiTextoMouseReleased(evt);
}
public void mouseClicked(MouseEvent evt) {
etiTextoMouseClicked(evt);
}
});
EVENTOS DEL TECLADPO
Los eventos de teclado controlan las pulsaciones de tecla. Entre ellos, podemos
mencionar a los siguientes:
349
asignar dicho adaptador/oyente, el nombre de los eventos, y el tipo de objeto que
llevan como parámetro.
Sabiendo estos datos, la programación siempre se hace igual.
El problema que se plantea en cambio es el siguiente:
Si surge un nuevo evento X el cual quiero usar desde código, ¿cómo puedo
saber cual es su adaptador/oyente, el método para asignar dicho
adaptador/oyente al componente, y el tipo de datos del parámetro?
Para este caso, se aconseja crear un proyecto de prueba desde la ventana de
diseño y asignar el evento X que se quiere estudiar a un componente. Luego
simplemente hay que analizar el código generado por el NetBeans.
EN RESUMEN
Para programar desde código un evento es necesario conocer lo siguiente:
El nombre del evento / eventos del mismo grupo.
350
CAPITULO 6: ESTRUCTURA DE DATOS (VECTORES)
Declaración de un vector
Para declarar un vector se seguirá la siguiente sintaxis:
tipodatos nombrevector[];
- tipodatos es el tipo de datos de los elementos del vector (int, double,
String, etc.)
- nombrevector es el nombre que le quieras darle a tu vector.
int v[];
Como puedes ver, en la declaración de un vector no se indica la dimensión, de
éste, es decir, el número de elementos que tiene. Esto se hace en la
construcción del vector.
Construcción de un vector
Para construir un vector que ya haya sido declarado se sigue la siguiente
sintaxis:
351
nombrevector = new tipodatos[dim];
v = int[10];
v = int[num];
for (i=0;i<10;i++) {
v[i]=0;
}
Longitud de un vector
Una forma rápida de saber la longitud que tiene un vector es usar lo siguiente:
nombrevector.length
352
Por ejemplo, si el vector se llama v, su longitud (el número de elementos que
tiene) sería:
v.length
for (i=0;i<v.length;i++) {
v[i]=0;
}
ARREGLOS DE COMPONENTES
353
veti[i]= new JLabel(); //se construye cada etiqueta
veti[i].setBounds(10,10+i*30,100,20); //se asigna posición y tamaño
veti[i].setText(“Etiqueta “+i); //se asigna un texto
this.getContentPane().add(veti[i]); //se coloca en la ventana
}
Comencemos la practica explicando todo mediante un ejemplo simple:
1. Empecemos definiendo desde código las características de la ventana.
Crearemos el método CreacionVentana, y lo llamaremos desde el
constructor del proyecto:
354
3. La construcción de los vectores de componentes, se realiza en el mismo
constructor (en nuestro caso en el método CreaciónVentana, que es
llamado desde el constructor). Construiremos el vector de forma que
contenga 10 JCheckBox
355
4. Se acaba de construir un vector con 10 cuadros de verificación. Ahora,
es necesario construir cada uno de los cuadros del vector y asignarle
ciertas propiedades. Esto se hace con un for que recorre los elementos
del vector. (Añade el siguiente código dentro de CreacionVentana):
356
5. Analiza este código que se acaba de añadir:
a. Observa como cada elemento del vector debe ser construido:
b. El texto que tendrá cada elemento será: “Opción 0”, “Opción 1”,
etc…
vcuadros[i].setText(“Opción “+i);
357
7. Mejoremos la presentación de los cuadros cambiando los rótulos de cada
uno. Para ello, será necesario usar otro vector auxiliar que contenga los
textos de cada uno de los cuadros. Modifica el código anterior de forma
que quede así:
358
8. En este código puedes observar como se usa un vector de String que se
crea conteniendo 10 colores. Luego, ese vector se usa para asignar cada
color al texto de cada cuadro. Si ahora ejecutas el programa, verás que
cada cuadro tiene su texto correspondiente a un color.
359
9. Ahora añade un botón con su evento actionPerformed. Añade en la zona
de variables globales lo siguiente:
JButton btnAceptar;
Y luego, dentro de CreacionVentana, añade el siguiente código:
360
10. Ahora programaremos la respuesta al evento actionPerformed de forma
que el programa diga cuantos cuadros hay seleccionados. Para ello, se
tendrá que programar el procedimiento btnAceptarActionPerformed, cuya
llamada se encuentra en el código anterior (la línea que da error):
11. En este código se puede observar como se usa un for para recorrer
fácilmente el vector de cuadros y averiguar cuales de ellos está activado.
Aumentamos un contador y lo demás es sencillo.
361
En Java, los vectores debe declararse y luego construirse. Es en la construcción
del vector cuando a este se le asigna un número de elementos.
Los vectores en Java pueden ser usados de la misma forma que en C.
En Java se pueden crear vectores de componentes: etiquetas, botones, etc,
facilitando luego el trabajo con todos estos elementos en conjunto y facilitando
las labores de diseño.
362
En Java se pueden crear vectores de componentes, como ya se vio
anteriormente anterior. Estos vectores pueden contener un grupo de etiquetas, o
botones, cuadros de textos, etc.
Gracias a los vectores de componentes se pueden crear rápidamente por código
estos componentes y trabajar sobre ellos sin tener que usar muchas líneas de
código.
En esta sección se verá cómo se pueden asignar eventos a los componentes de
un vector.
El siguiente ejemplo aprenderemos cómo hacerlo:
1. Crea un nuevo proyecto en java.
363
3. Dentro del procedimiento CreacionVentana construiremos el vector y
construiremos cada uno de los botones que contiene, asignando las
distintas características de cada uno. Debes añadir el siguiente código a
CreacionVentana:
364
Ahora, interesaría asignar un evento actionPerformed a cada botón. Esto se hará
aprovechando el que todos los botones pertenezcan a un vector, usando un
bucle for. Añade el siguiente código al final de CreacionVentana:
Este código asigna a cada botón un evento actionPerformed que hace una
llamada a un procedimiento al que se le ha llamado botonesActionPerformed.
(Esta llamada da error porque aún no ha sido programado el procedimiento. Esto
se hará a continuación.)
Hay que tener en cuenta que cuando se pulse cualquiera de los botones, se
ejecutará el procedimiento botonesActionPerformed. Programa este
procedimiento (fuera de CreacionVentana, por supuesto) de la siguiente forma:
365
El procedimiento botonesActionPerformed sirve como respuesta para todos los
botones. El problema que plantea esto es, ¿cómo saber qué botón se ha
pulsado? Es aquí donde entra en funcionamiento el parámetro evt que suelen
llevar todos los eventos.
Modifica el procedimiento botonesActionPerformed de forma que quede así:
Este código resulta muy interesante. El parámetro evt tiene siempre un método
llamado getSource que devuelve el componente de la ventana sobre el que ha
sucedido el evento. De esta manera obtenemos el botón que ha sido pulsado.
(Observa que es necesario hacer un cast) Aprovechamos esto para introducir el
botón en una variable auxiliar que hemos llamado botonPulsado.
Luego solo hay que usar la variable botonPulsado como un botón normal y
corriente. Por ejemplo, la usamos en el JOptionPane mostrando el texto que
contiene el botón pulsado con el método getText.
Ejecuta el programa y observa el resultado.
EN RESUMEN
Se pueden asignar eventos a los elementos de un vector a través de un for que
recorra los distintos elementos del vector y le asigne el evento o eventos
necesarios.
Cuando se asigna un mismo procedimiento de respuesta a eventos a varios
componentes, es necesario usar el parámetro evt junto con el método getSource
para averiguar el componente sobre el que ha sucedido el evento.
La forma general de acceder al elemento sobre el que sucedió el evento es la
siguiente:
TipoComponente variable = (TipoComponente) evt.getSource();
La variable variable contendrá el componente activado.
366
CAPITULO 7: FUNDAMENTOS DE ORIENTACIÓN A OBJETOS
DEFINICIÓN DE OBJETOS
En Java todo son objetos. Veamos algunos ejemplos de uso de objetos en Java:
PRIMER EJEMPLO
Supongamos que tenemos una etiqueta llamada etiTexto. Esta etiqueta es un
objeto.
Como objeto que es, la etiqueta etiTexto tiene una serie de características, como
por ejemplo: el color de fondo, el tamaño, la posición que ocupa en la ventana, el
ser opaca o no, el ser invisible o no, etc… Son las propiedades de la etiqueta.
367
A una etiqueta le podemos dar órdenes, a través de métodos.
A través de los métodos podemos por ejemplo cambiar las características del
objeto. Por ejemplo, se puede cambiar el tamaño y posición de la etiqueta
usando el método setBounds:
etiTexto.setBounds(10,20,100,20);
Normalmente, los métodos que permiten cambiar las características del objeto
son métodos cuyo nombre empieza por set.
Los métodos también permiten pedirle al objeto que me de información. Por
ejemplo, podríamos usar el conocido método getText para recoger el texto que
contenga la etiqueta y almacenarlo en una variable:
String texto;
texto = etiTexto.getText();
Los métodos que le piden información al objeto suelen tener un nombre que
empieza por get.
Los métodos también sirven para ordenarle al objeto que haga cosas. Por
ejemplo, podemos ordenar a la etiqueta etiTexto que se vuelva a pintar en la
ventana usando el método repaint:
etiTexto.repaint();
Segundo ejemplo
Supongamos que tenemos un cuadro de texto llamado txtCuadro. Como todo en
Java, un cuadro de texto es un objeto.
368
Otros métodos que le piden información al cuadro de texto son:
getWidth - te dice la anchura que tiene el cuadro de texto
getHeight - te dice el alto que tiene el cuadro de texto
getSelectedText - te devuelve el texto que está seleccionado dentro del
cuadro de texto
getToolTipText - te dice el texto de ayuda que tiene asociado el cuadro de
texto
etc…
También se le puede dar al objeto simplemente órdenes para que haga algo. Por
ejemplo, podemos ordenar al cuadro de texto txtCuadro que seleccione todo el
texto que contiene en su interior a través del método selectAll:
txtCuadro.selectAll();
Otros métodos que ordenan al cuadro de texto son:
repaint - le ordena al cuadro de texto que se vuelva a pintar
copy - le ordena al cuadro de texto que copie el texto que
tengaseleccionado
cut - le ordena al cuadro de texto que corte el texto que tenga
seleccionado
paste - le ordena al cuadro que pegue el texto que se hubiera
copiado o cortado
etc…
DEFINICIÓN DE CLASE
Todo objeto es de una “clase” determinada, o dicho de otra forma, tiene un “tipo
de datos” determinado.
Por ejemplo, las etiquetas que se usan en las ventanas son objetos que
pertenecen a la clase JLabel. Los cuadros de texto en cambio son objetos de la
clase JTextField.
Para poder usar un objeto hay que declararlo y construirlo.
Declarar un Objeto
La declaración de un objeto es algo similar a la declaración de una variable. Es
en este momento cuando se le da un nombre al objeto. Para declarar un objeto
se sigue la siguiente sintaxis:
Clase nombreobjeto;
Por ejemplo, para declarar la etiqueta del ejemplo 1, se usaría el siguiente
código:
JLabel etiTexto;
Para declarar, en cambio, el cuadro de texto del ejemplo 2, se usaría el siguiente
código:
369
JTextField txtCuadro;
Construir un Objeto
En el momento de la “construcción” de un objeto, se le asignan a este una serie
de propiedades iniciales. Es decir, unas características por defecto. Se puede
decir que es el momento en que “nace” el objeto, y este nace ya con una forma
predeterminada, que luego el programador podrá cambiar usando los métodos
del objeto.
Es necesario construir el objeto para poder usarlo. La construcción del objeto se
hace a través del siguiente código general:
nombreobjeto = new Clase();
Por ejemplo, para construir la etiqueta del ejemplo 1, se haría lo siguiente:
etiTexto = new JLabel();
Para construir el cuadro de texto del ejemplo 2, se haría lo siguiente:
txtCuadro = new JTextField();
NOTA. En algunos casos, la sintaxis de la declaración y la construcción se une
en una sola línea. Por ejemplo, supongamos que queremos declarar la etiqueta
etiTexto y construirla todo en una línea, entonces se puede hacer lo siguiente:
JLabel etiTexto = new JLabel();
En general, para declarar y construir un objeto en una sola línea se sigue la
siguiente sintaxis:
Clase nombreobjeto = new Clase();
370
etiResultado.setText(“Error”);
etiDato.setBackground(Color.BLUE);
etiDato.setText(“Cadena”);
En el ejemplo se le ha dado, usando el método setBackground, un color a cada
etiqueta. Y se ha cambiado el texto de cada una. Se le da forma a cada etiqueta.
Tercer Ejemplo
Hasta ahora ha usado objetos aunque no tenga mucha conciencia de ello. Por
ejemplo ha usado botones. Como ejercicio se propone lo siguiente:
371
En la construcción de un objeto se asignan unas propiedades (características)
por defecto al objeto que se construye, aunque luego, estas características
pueden ser cambiadas por el programador.
372
trabajar con él. Dicho de otra forma, debemos pensar en qué características
debe tener el objeto y qué órdenes le podré dar.
Para crear objetos propios hay que programar la Clase del objeto. Una vez
programada la Clase, ya podremos generar objetos de dicha clase,
declarándolos y construyéndolos como si de cualquier otro objeto se tratara.
A continuación se propondrá un caso práctico de creación de objetos propios,
con el que trabajaremos en las próximas hojas.
Lo que viene a continuación es un planteamiento teórico de diseño de una Clase
de Objetos.
Los requerimientos
Los Multicines Avenida nos encargan un programa para facilitar las distintas
gestiones que se realizan en dichos multicines.
El multicine cuenta con varias salas, y cada una de ellas genera una serie de
información. Para facilitar el control de la información de cada sala
programaremos una Clase de objeto a la que llamaremos SalaCine.
La Clase SalaCine
La Clase SalaCine definirá características de una sala de cine, y permitirá crear
objetos que representen salas de cine. Cuando la Clase SalaCine esté
programada, se podrán hacer cosas como las que sigue:
Los Multicines Avenida tienen una sala central donde se proyectan normalmente
los estrenos. Se podría crear un objeto llamado central de la clase SalaCine de
la siguiente forma:
SalaCine central;
Por supuesto, este objeto puede ser construido como cualquier otro:
central = new SalaCine();
El objeto central representará a la sala de cine central de los Multicines Avenida.
Otro ejemplo. Los Multicines Avenida tienen una sala donde proyectan versiones
originales. Se podría crear un objeto llamado salaVO de la clase SalaCine de la
siguiente forma:
SalaCine salaVO; //declaración
salaVO = new SalaCine(); //construcción
373
Para este ejemplo supondremos que de cada sala de cine nos interesa tener
conocimiento de las siguientes características (propiedades):
Aforo: define el número de butacas de la sala (un número entero).
Ocupadas: define el número de butacas ocupadas (un número entero).
Película: define la película que se está proyectando en el momento en la
sala (una cadena de texto)
Entrada: define el precio de la entrada (un número double)
Aforo: 100
Ocupadas: 0
Película: “” (la cadena vacía)
Entrada: 5,00
En este momento (en el que el objeto central está recién construido) este objeto
tiene asignado un aforo de 100, el número de butacas ocupadas es 0, la película
que se proyecta en la sala central es “” y la entrada para esta sala es de 5 euros.
Los valores por defecto que se asignan a los objetos de una clase son valores
arbitrarios que el programador decidirá según su conveniencia.
374
Métodos de cambio de propiedades (Métodos set)
setAforo - asignará un aforo a la sala de cine
setOcupadas - asignará una cantidad de butacas ocupadas a la sala de cine
setLibres - asignará una cantidad de butacas libres a la sala de cine
setPelicula - asignará un título de película a la sala de cine
setEntrada - fijará el precio de las entradas a la sala de cine
Gracias a estos métodos podemos dar forma a un objeto SalaCine recién
creado.
Por ejemplo, supongamos que queremos crear el objeto que representa la sala
de versiones originales. Resulta que esta sala tiene de aforo 50 localidades, que
se está proyectando la película “Metrópolis” y que la entrada para ver la película
es de 3 euros. La sala está vacía de momento.
Para crear el objeto, se usaría el siguiente código:
//Se construye el objeto
SalaCine salaVO;
salaVO = new SalaCine();
//Se le asignan características
salaVO.setAforo(50); //aforo 50
salaVO.setPelicula(“Metrópolis”); //la película que se proyecta
salaVO.setEntrada(3); //entrada a 3 euros
Al construir el objeto salaVO tiene por defecto los valores siguientes en sus
propiedades:
Aforo: 100
Ocupadas: 0
Película: “”
Entrada: 5,00
Gracias a los métodos disponibles hemos asignados estos nuevos valores:
Aforo: 50
Ocupadas: 0
Película: “Metrópolis”
Entrada: 3,00
375
Estos métodos nos permitirán obtener información de un objeto del tipo
SalaCine. Por ejemplo, supongamos que tenemos el objeto llamado central
(correspondiente a la sala principal del multicine), para obtener la película que se
está proyectando en dicha sala solo habría que usar este código:
String peli; //una variable de cadena
peli = central.getPelicula();
O, por ejemplo, para saber los ingresos producidos por la sala central…
double ingresos;
ingresos = central.getIngresos();
Métodos para dar órdenes al objeto
Se programarán los siguientes métodos para dar órdenes a los objetos de la
clase SalaCine.
vaciar
- Este método pondrá el número de plazas ocupadas a cero y le asignará
a la película la cadena vacía.
entraUno
- Este método le dice al objeto que ha entrado una nueva persona en la
sala. (Esto debe producir que el número de plazas ocupadas aumente en
uno)
RESUMEN SALACINE
He aquí un resumen de la Clase de objetos SalaCine, la cual se programará en
la próxima hoja:
Clase de objetos: SalaCine
Propiedades de los objetos SalaCine:
Aforo - número entero (int)
Ocupadas - número entero (int)
Película - cadena (String)
Entrada - número decimal (double)
Valores por defecto de los objetos del tipo SalaCine:
Aforo: 100
Ocupadas: 0
Película: (cadena vacía)
Entrada: 5
Métodos de los objetos del tipo SalaCine:
Métodos de asignación de propiedades (set)
setAforo - modifica la propiedad Aforo
setOcupadas - modifica la propiedad Ocupadas
setLibres - modifica la propiedad Ocupadas también
setPelicula - modifica la propiedad Película
setEntrada - modifica la propiedad Entrada
Métodos de petición de información (get)
getAforo - devuelve el valor de la propiedad Aforo
376
getOcupadas - devuelve el valor de la propiedad Ocupadas
getLibres - devuelve el número de butacas libres
getPorcentaje - devuelve el porcentaje de ocupación de la sala
getIngresos - devuelve los ingresos obtenidos por la venta de entradas
getPelicula - devuelve el valor de la propiedad Película
getEntrada - devuelve el valor de la propiedad Entrada
Métodos de orden
Vaciar - vacía la ocupación de la sala y borra la película
entraUno - le indica al objeto que ha entrado una persona más en la
sala
Ejercicio Propuesto
Supongamos que programamos una Clase de objetos llamada Rectangulo, la
cual permitirá construir objetos que representen a rectángulos.
1. ¿Cómo declararía y construiría un objeto llamado suelo del tipo
Rectangulo?
377
Valores iniciales que tendrán las propiedades cuando se construya cada
objeto.
Métodos de orden
CLASE SALACINE
Nombre de la Clase: SalaCine
Propiedades de los objetos SalaCine:
Aforo - número entero (int)
Ocupadas - número entero (int)
Película - cadena (String)
Entrada - número decimal (double)
Valores por defecto de los objetos del tipo SalaCine:
Aforo: 100
Ocupadas: 0
Película: (cadena vacía)
Entrada: 5
Métodos de los objetos del tipo SalaCine:
Métodos de asignación de propiedades (set)
setAforo - modifica la propiedad Aforo
setOcupadas - modifica la propiedad Ocupadas
setLibres - modifica la propiedad Ocupadas también
setPelicula - modifica la propiedad Película
setEntrada - modifica la propiedad Entrada
Métodos de petición de información (get)
getAforo - devuelve el valor de la propiedad Aforo
378
getOcupadas - devuelve el valor de la propiedad Ocupadas
getLibres - devuelve el número de butacas libres
getPorcentaje - devuelve el porcentaje de ocupación de la sala
getIngresos - devuelve los ingresos obtenidos por la venta de entradas
getPelicula - devuelve el valor de la propiedad Película
getEntrada - devuelve el valor de la propiedad Entrada
Métodos de orden
Vaciar - vacía la ocupación de la sala y borra la película
entraUno - le indica al objeto que ha entrado una persona más en la
sala
Fichero de la Clase
La programación de una clase de objetos se realiza en un fichero aparte, cuyo
nombre es exactamente el mismo que el de la propia clase, y cuya extensión es
.java.
Por ejemplo, si queremos programar la clase SalaCine, esto se debe hacer en un
fichero llamado:
SalaCine.java
Cuando programemos esta clase dentro de NetBeans, veremos las facilidades
que nos proporciona este para la creación de la clase. De momento, solo
veremos de forma teórica como hay que programar la clase. (No tiene que
introducir lo que viene a continuación en ningún sitio)
Propiedades de la Clase
Lo primero que se debe introducir en la clase que se está programando son las
propiedades. Las propiedades de una clase son básicamente variables globales
379
de ésta. Si introducimos las propiedades de la clase SalaCine, esta nos quedaría
así:
public class SalaCine {
// ESTAS SON LAS PROPIEDADES
int Aforo;
int Ocupadas;
String Película;
double Entrada;
}
Constructor de la Clase
Cuando se planteó la clase SalaCine, se tuvo que decidir qué valores iniciales
deberían tener las propiedades de la clase. Para asignar estos valores iniciales,
es necesario programar lo que se denomina el Constructor. El Constructor de
una clase es un método (un procedimiento para entendernos) un poco especial,
ya que debe tener el mismo nombre de la clase y no devuelve nada, pero no
lleva la palabra void. Dentro del constructor se inicializan las propiedades de la
clase. En general, la programación del constructor sigue la siguiente sintaxis:
public NombreDeLaClase() {
propiedad1 = valor;
propiedad2 = valor;
etc…
}
La clase SalaCine, añadiendo el Constructor, tendrá el siguiente aspecto:
public class SalaCine {
// ESTAS SON LAS PROPIEDADES
int Aforo;
int Ocupadas;
String Película;
double Entrada;
// ESTE ES EL CONSTRUCTOR
public SalaCine() {
Aforo = 100;
Ocupadas = 0;
Pelicula = “”;
Entrada = 5.0;
}
}
380
Métodos del tipo set
Todas las clases suelen contener métodos del tipo set. Recuerda que estos
métodos permiten asignar valores a las propiedades de la clase.
Debes tener en cuenta también que cuando se habla de método de una clase,
en realidad se está hablando de un procedimiento o función, que puede recibir
como parámetro determinadas variables y que puede devolver valores.
Los métodos del tipo set son básicamente procedimientos que reciben valores
como parámetros que introducimos en las propiedades. Estos métodos no
devuelven nada, así que son void.
Se recomienda, que el parámetro del procedimiento se llame de forma distinta a
la propiedad que se asigna.
Veamos la programación del método setAforo, de la clase SalaCine:
public void setAforo(int afo) {
Aforo = afo;
}
Observa este método:
Es void, es decir, no devuelve nada (el significado de la palabra public se
verá más adelante)
El método recibe como parámetro una variable del mismo tipo que la
propiedad que queremos modificar (en este caso int) y un nombre que se
recomienda que no sea igual al de la propiedad (en nuestro caso, afo, de
aforo)
Puedes observar que lo que se hace simplemente en el método es
asignar la variable pasada como parámetro a la propiedad.
381
Hay un método set de la clase SalaCine llamado setLibres cuya misión es
asignar el número de localidades libres del cine. Sin embargo la clase SalaCine
no tiene una propiedad “Libres”. En realidad, este método debe modificar el
número de localidades ocupadas. Observa su programación:
//Método setLibres
public void setLibres(int lib) {
int ocu;
ocu = Aforo – lib;
Ocupadas = ocu;
}
//Método setOcupadas
public void setOcupadas(int ocu) {
Ocupadas = ocu;
}
//Método setPelicula
382
public void setPelicula(String peli) {
Pelicula = peli;
}
//Método setEntrada
public void setEntrada(double entra) {
Entrada = entra;
}
//Método setLibres
public void setLibres(int lib) {
int ocu;
ocu = Aforo – lib;
Ocupadas = ocu;
}
}
383
}
Todos estos métodos son iguales. Solo tienes que fijarte en el tipo de datos de la
propiedad que devuelven.
Existen otros métodos get que devuelven cálculos realizados con las
propiedades. Estos métodos realizan algún cálculo y luego devuelven el
resultado. Observa el siguiente método get:
//Método getLibres
public int getLibres() {
int lib;
lib = Aforo – Ocupadas;
return lib;
}
No existe una propiedad Libres, por lo que este valor debe ser calculado a partir
del Aforo y el número de localidades Ocupadas. Para ello restamos y
almacenamos el valor en una variable a la que hemos llamado lib. Luego
devolvemos dicha variable.
Los dos métodos get que quedan por programar de la clase SalaCine son
parecidos:
//Método getPorcentaje
public double getPorcentaje() {
double por;
por = (double) Ocupadas / (double) Aforo * 100.0;
return por;
}
Este método calcula el porcentaje de ocupación de la sala (es un valor double)
//Método getIngresos
public double getIngresos() {
double ingre;
ingre = Ocupadas * Entrada;
return ingre;
}
384
public SalaCine() {
Aforo = 100;
Ocupadas = 0;
Pelicula = “”;
Entrada = 5.0;
}
//Métodos set
//Método setAforo
public void setAforo(int afo) {
Aforo = afo;
}
//Método setOcupadas
public void setOcupadas(int ocu) {
Ocupadas = ocu;
}
//Método setPelicula
public void setPelicula(String peli) {
Pelicula = peli;
}
//Método setEntrada
public void setEntrada(double entra) {
Entrada = entra;
}
//Método setLibres
public void setLibres(int lib) {
int ocu;
ocu = Aforo – lib;
Ocupadas = ocu;
}
//Métodos get //Método getAforo
public int getAforo() {
return Aforo;
}
//Método getOcupadas
public int getOcupadas() {
return Ocupadas;
}
//Método getPelicula
385
//Método getEntrada
public double getEntrada() {
return Entrada;
}
//Método getLibres
public int getLibres() {
int lib;
lib = Aforo – Ocupadas;
return lib;
}
//Método getPorcentaje
public double getPorcentaje() {
double por;
por = (double) Ocupadas / (double) Aforo * 100.0;
return por;
}
//Método getIngresos
public double getIngresos() {
double ingre;
ingre = Ocupadas * Entrada;
return ingre; } }
Métodos de orden
Para finalizar la programación de la clase SalaCine, se programarán los dos
métodos de orden que hemos indicado en el planteamiento de la clase. Estos
métodos suelen realizar alguna tarea que involucra a las propiedades de la
clase, modificándola internamente. No suelen devolver ningún valor, aunque
pueden recibir parámetros.
Veamos la programación del método Vaciar, cuyo objetivo es vaciar la sala y
quitar la película en proyección:
//Método Vaciar
public void Vaciar() {
Ocupadas = 0;
Película = “”;
}
386
public void entraUno() {
Ocupadas++;
}
387
return Aforo; Métodos Get
}
//Método getOcupadas
public int getOcupadas() {
return Ocupadas;
}
//Método getPelicula
public String getPelicula() {
return Película;
}
//Método getEntrada
public double getEntrada() {
return Entrada;
}
//Método getLibres
public int getLibres() {
int lib;
lib = Aforo – Ocupadas;
return lib;
}
//Método getPorcentaje
public double getPorcentaje() {
double por;
por = (double) Ocupadas / (double) Aforo * 100.0;
return por;
}
//Método getIngresos
public double getIngresos() {
double ingre;
ingre = Ocupadas * Entrada;
return ingre;
}
//Métodos de orden //Método Vaciar
public void Vaciar() {
Ocupadas = 0;
Película = “”; }
//Método entraUno
public void entraUno() {
Ocupadas++;
}
}
Ejercicios Propuesto
388
Supongamos que tenemos una clase llamada Rectangulo que nos permitirá
generar objetos de tipo rectángulo.
Sea el planteamiento de la clase Rectangulo el que sigue:
CLASE RECTANGULO
Nombre de la clase: Rectangulo
Propiedades de los objetos de la clase Rectangulo:
Base (double)
Altura (double)
Valores iniciales de las propiedades de los objetos de la clase Rectangulo:
Base – 100
Altura – 50
Métodos:
Métodos set:
setBase – permite asignar un valor a la propiedad Base.
setAltura – permite asignar un valor a la propiedad Altura.
Métodos get:
getBase – devuelve el valor de la propiedad Base
getAltura – devuelve el valor de la propiedad Altura
getArea – devuelve el área del rectángulo
getPerímetro – devuelve el perímetro del rectángulo
Otros métodos:
Cuadrar – este método debe hacer que la Altura tenga el valor de la Base
389
390
391