Base de Datos con Java

Anuncio
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
Incluyen programas tareas ejemplo y aplicación arreglos y Access.
CONTENIDO
Sección: AC4
Revisión: 05
Abril 2009
UNIDAD I: ELEMENTOS BASICOS
1.- INTRODUCCION
2.- MODELO DE SOLUCION
3.- VARIABLES
4.- TIPOS DE DATOS
5.- CLASES NUMERICAS
6- OPERADORES ARITMETICOS
7.- OPERADOR CAST Y CONVERSIONES
8.- JERARQUIA DE OPERACIONES
9.- APLICACIONES
10.- APLICACIONES POR CONSOLA
11.- APLICACIONES (CONTINUACION)
II UNIDAD .- APLICACIONES VISUALES Y APPLETS
1.- APLICACIONES VISUALES Y APPLETS
2.- FRAME PROPIEDADES
3.- FRAME Y METODOS
4.- ENTRADA/SALIDA
5.- LABEL
6.- TEXTFIELD
7.- BUTTON
8.- PRACTICA
9.- LAYOUTS
10.- PANELES
11.- PANEL
12.- JSPLITPANE
13.- JSCROLLPANE
14.- JTABBEDPANE
15.- JTOOLBAR
16.- JCOMBOBOX
III UNIDAD: APLICACIONES EN RED
1.- INTRODUCCION
2.- APPLET Y JAPPLET
3.- APPLET Y JAPPLET CONTINUACION
4.- SERVLETS
5.- SERVLETS CONTINUACION
6.- JAVA SERVER PAGE (JSP)
7.- JSP CONTINUACION I
8.- JSP CONTINUACION II
Alejandro Huapaya Sànchez
Pág. 1 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
Incluyen programas tareas ejemplo y aplicación arreglos y Access.
CONTENIDO
Sección: AC4
Revisión: 05
Abril 2009
IV UNIDAD.- CONTROL DE PROGRAMA
1.- INTRODUCCION
2.- INSTRUCCIONES CONDICIONALES
3.- CONDICIONES SIMPLES
4.- INSTRUCCION IF()
5.- IF() CONTINUACION
6.- CONDICIONES COMPUESTAS
7.- INSTRUCCION SWITCH()
8.- COMPONENTES VISUALES DE SELECCION Y DECISION
9.- COMPONENTE CHECKBOX
10.- COMPONENTE JRADIOBUTTON
11.- MENUS
12.- POPUPMENU
13.- CICLO FOR
14.- CICLO WHILE
15.- CICLO DOWHILE
16.- CONCLUSIONES DE CICLOS
V UNIDAD.- ARREGLOS
1.- INTRODUCCION
2.- ARREGLOS TRADICIONALES
3.- ARREGLOS TIPO LISTA
4.- LISTAS(CONTINUACION)
5.- COMPONENTE LIST
6.- LISTAS EN SEVLETS Y JSP
7.- ARREGLOS TIPO TABLA
VI UNIDAD.- OOP
1.- PROCEDIMIENTOS Y FUNCIONES
2.- PARAMETROS
3.- VARIABLES LOCALES Y GLOBALES
4.- FUNCIONES
5.- INT A OOP
6.- CLASES
7.- CLASES PROPIAS
VII UNIDAD.- REGISTROS Y ARCHIVOS SECUENCIALES
1.- INTRODUCCION
2.- REGISTROS
3.- ARCHIVOS
4.- ARCHIVO SECUENCIAL
Alejandro Huapaya Sànchez
Pág. 2 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
Incluyen programas tareas ejemplo y aplicación arreglos y Access.
CONTENIDO
Sección: AC4
Revisión: 05
Abril 2009
5.- GRABACION
6.- LECTURA
7.- BUSQUEDA
8.- FILTROS O CONDICIONES
9.- BAJAS O ELIMINACION
10.- EDICION O MODIFICACION
IX.- BASES DE DATOS
1.- INTRODUCCION
2.- ACCESS Y ODBC
3.- CONSULTA
4.- INSERCCION
5.- BUSQUEDA
6.- FILTROS O CONDICIONES
7.- BAJAS O ELIMINACION
8.- EDICION O MODIFICACION
X UNIDAD.- MULTIPROCESAMIENTO
Alejandro Huapaya Sànchez
Pág. 3 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
JAVA 1.- INTRODUCCION
En el mundo moderno, las necesidades de información se han incrementado bastante en la vida diaria de
los individuos asi como de las organizaciones.
Esta nueva necesidad se esta cubriendo con la integracion y participacion personal y de las empresas,
hacia la red de redes, el Internet I, y esperen a internet2.
Nuevos paradigmas de programacion se ocupan para la creacion de nuevos sisJAVA TEMA s y
necesidades creativas de informacion.
Java un lenguaje de programacion moderno implementado en su versión final por la compañía
www.java.sun.com a a finales de 1996, se ha convertido en el lenguaje estandar, para la construccion de
aplicaciones basadas en internet.
Los nuevos sisJAVA TEMA s de información son costosos en tiempos y recursos, la solución moderna de
sisJAVA TEMA s de información exigen nuevas herramientas y metodologías para resolver rápida,
económica y eficiente los problemas de información planteados por las organizaciones.
Aun mas el pleno potencial del hardware no es aprovechado plenamente y existe un considerable retraso
con el software y sus aplicaciones, generando lo que se conoce como "crisis del software".
En programación tradicional, modular o estructurada un programa describe una serie de pasos a ser
realizados para la solución de un problema, es decir es un algoritmo.
En programación orientada a objetos ( OOP ) un programa es considerado como un sisJAVA TEMA de
objetos interactuando entre sí, ambientes de desarrollo visuales facilitan aun más la construcción de
programas y solución de problemas, porque permiten abstraer al ingeniero de software de todo el GUI
(interfase gráfica) del problema, que constituye más del 60% del código normal de un programa.
Es decir, en programación modular o estructurada un problema sencillo de información es descompuesto
en una serie de módulos(llamados procedimientos o funciones) donde cada uno de ellos realiza una tarea
específica, por ejemplo uno de ellos captura los datos, otro resuelve operaciones, etc.
En OOP todo problema aun aquellos sencillos de información, se consideran y resuelven como módulos de
código gigante (clase) que contiene todo el código necesario(variables, procedimientos, funciones,
interfaces, etc.) para solucionar el problema.
En programación visual( que también es heredera de OOP ),la interfase con el usuario( pantallas) son
generadas por el propio compilador y el ingeniero de software solo se concentra en resolver el problema
planteado.
En programacion java basica, se tiene la mezcla de lo mejor de estos tres mundos, es decir construimos
programas, aplicaciones y sisJAVA TEMA s de informacion usando tecnivas estructuradas, contruyendo
objetos y diseñando sisJAVA TEMA s graficos, y todo orientado a la construcción de sisJAVA TEMA s de
información basados en redes de cualquier tipo o tamaño.
2.- JAVA MODELO DE SOLUCION
En general un problema de información es posible entenderlo, analizarlo y descomponerlo en todos sus
componentes o partes que de una u otra manera intervienen tanto en su planteamiento como en su
solución.
Alejandro Huapaya Sànchez
Pág. 4 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
Una herramienta rápida que nos permite descomponer en partes un problema para su solución, es el
llamado modelo de solución, este consiste de una pequeña caja que contiene los tres elementos más
básicos en que se puede descomponer cualquier problema sencillo de información, estas tres partes son:
a. LA PRIMERA PARTE son todos los datos que el computador ocupa para resolver el problema, estos
datos son almacenados internamente en la memoria del computador en las llamadas variables de
entrada.
b. LA SEGUNDA PARTE son todas las operaciones generalmente algebraicas necesarias para
solucionar el problema, generalmente esta parte del modelo es una formula (o igualdad matemática, ej.
X= y + 5).
c. LA TERCERA PARTE es el resultado o solución del problema que generalmente se obtiene de la parte
de operaciones del modelo y dichos datos están almacenados en las llamadas variables de salida.
En resumen para todo problema sencillo de información es necesario plantearse las siguientes preguntas:
* Que datos ocupa conocer el computador para resolver el problema y en cuales variables de entrada se
van a almacenar ?
* Que procesos u operaciones debe realizar el computador para resolver el problema planteado ?
* Que información o variables de salida se van a desplegar en pantalla para responder al problema
planteado originalmente?
Como nota importante no confundir los términos datos, variables e información;
Datos se refiere a información en bruto, no procesada ni catalogada, por ejemplo "Tijuana", "calle primera #
213","15 años", " $2,520.00", etc.
Variables es el nombre de una localidad o dirección interna en la memoria del computador donde se
almacenan los datos, ejemplo de variables para los casos del inciso anterior, CIUDAD, DIRECCION,
EDAD, SUELDO, ETC.
Información son datos ya procesados que resuelven un problema planteado.
EJEMPLO DE MODELO DE SOLUCION
Construir un modelo de solución que resuelva el problema de calcular el área de un triángulo con la formula
área igual a base por altura sobre dos.
ENTRADA
Operación
Salida
BASE
ALTURA
AREA= BASE * ALTURA / 2
AREA
PROBLEMA 2.- CONVERTIR LA EDAD EN AÑOS DE UNA PERSONA A MESES.
PROBLEMA 3.- CONVERTIR PESOS A DOLARES.
PROBLEMA 4.- CALCULAR EL AREA DE UN CIRCULO CON LA FORMULA
AREA = PI * RADIO2
PROBLEMA 5.- EVALUAR LA FUNCION Y = 5 X2 – 3X + 2 PARA CUALQUIER VALOR DE X.
Observar para el caso de constantes fijas o conocidas (PI) no se debe dar como dato de entrada su valor,
en cambio colocar directamente su valor dentro de la formula, en la parte de operaciones del problema.
Alejandro Huapaya Sànchez
Pág. 5 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
Pero recordar también que existirán problemas sencillos donde:
No se ocupan entradas o no se ocupan operaciones, pero todos ocupan salida.
Una formula grande o muy compleja puede ser más segura y fácil de resolver, si es descompuesta y
resuelta en partes, juntando al final los parciales para obtener el resultado final.
Un problema puede tener más de una solución correcta.
El problema no esta suficientemente explicado o enunciado, entonces, estudiarlo, analizarlo y construirlo de
manera genérica.
TAREAS JAVA
Construir los modelos de solución de los siguientes problemas para construir despues programas java:
PROBLEMA 6.- Convertir millas a kilómetros(caso normal)
PROBLEMA 7.- Convertir 125 metros a centímetros(no ocupa entradas)
PROBLEMA 8.- Se calcula que en promedio hay 4.7 nidos en cada árbol en la UABC, también se calcula
que en cada nido existen un promedio de 5.8 pájaros, se pide calcular la cantidad total de nidos y de
pájaros en los 227 arboles que existen en la UABC. (no ocupa entradas)
PROBLEMA 9.- La gorda Sra. López y sus 8 hijos solo compran una vez al mes su mandado en conocido
supermercado, en dicha tienda el kilogramo de frijol cuesta $8.75, el paquete de tortillas cuesta $3.55 y el
frasco de café vale $14.25, si solo compran de estos tres productos para su mandado, calcular su gasto
total. ( problema no claro)
PROBLEMA 10.- Capturar y desplegar los cinco datos mas importantes de un automóvil(no ocupa
operaciones)
PROBLEMA 11.- La distancia Tijuana - Ensenada es de 110 kilómetros. Si un automóvil la recorre a una
velocidad constante de 30 millas por hora, cuanto tiempo tarda en llegar. ( 1 milla = 1.609 Km.) (dos
maneras correctas de
resolverlo).
PROBLEMA 12.-Evaluar la función Y = 3X2 + 2X – 5 para cualquier valor de x.(caso normal).
PROBLEMA 13.-Evaluar la función Y = – 5X3 – 3X2 + 8 para cuando x vale 4 . (no ocupa entradas).
3.- JAVA VARIABLES
Identificadores son conjuntos de letras y/o números que se utilizan para simbolizar todos los elementos que
en un programa, son definibles por el usuario (programador o ingeniero de software) del mismo, como son
las variables donde se almacenan datos, funciones( pequeños módulos con código), etiquetas, clases,
objetos, etc.
En java un identificador es una palabra compuesta de letras y/o números de hasta 32 caracteres
significativos, empezando siempre con una letra.
Una variable se define como un identificador que se utiliza para almacenar todos los datos generados
durante la ejecución de un programa.
En java jsp y servlets existen ciertas reglas en cuanto a variables:
• Claras y con referencia directa al problema.
• No espacios en blanco, ni símbolos extraños en ellas.
• Se pueden usar abreviaturas, pero solo de carácter general.
No deben ser palabras reservadas del lenguaje.
Ejemplos de buenas variables:
Nombre, Edad, SdoDiario, IngMensual, Perímetro, Calif1, etc.
Alejandro Huapaya Sànchez
Pág. 6 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
4.- TIPOS DE DATOS
A toda variable que se use en un programa, se le debe asociar (generalmente al principio del programa) un
tipo de dato específico.
Un tipo de dato define todo el posible rango de valores que una variable puede tomar al momento de
ejecución del programa y a lo largo de toda la vida útil del propio programa.
Los tipos de datos más comunes en java son:
Primitive Data Types
Keyword
Description
Size/Format
byte
Byte-length integer
8-bit two's complement
short
Short integer
16-bit two's complement
int
Integer
32-bit two's complement
long
Long integer
64-bit two's complement
(integers)
(real numbers)
float
Single-precision floating point
32-bit IEEE 754
double
Double-precision floating point
64-bit IEEE 754
(other types)
char
A single character
16-bit Unicode character
boolean
A boolean value (true or false)
true or false
•
TABLA TOMADA DE JAVA.SUN.COM DOCUMENTATION
Como se observa es muy similar a las de c o c++.
Para el caso de strings se debera usar la Clase String que tiene dos constructores, de momento
entenderemos esto ultimo como dos maneras de crearse, ej;
a. String nombre= new String();
b. String ciudad= new String("Tijuana");
Con JAVA en este ultimo caso se crea la string y se inicializa con un dato o valor.
5. JAVA CLASES ESPECIALES
En java como lenguaje de programacion orientado a objetos, existen aparte de la clase String, vista en el
JAVA TEMA anterior cuatro clases especiales, desendientes de la clase numbers, que contienen una serie
de metodos que facilitan la interaccion con los usuarios de nuestras aplicaciones en captura y despliegue
de datos numericos.
Alejandro Huapaya Sànchez
Pág. 7 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
Sin embargo su caracteristica mas importante a tomar en cuenta, es que objetos numericos derivados de
estaS clase, no pueden entrar a operaciones DIRECTAMENTE, ni recibir el resultado de operaciones.
Class Integer
public final class java.lang.Integer extends java.lang.Number
{
// Fields
public final static int MAX_VALUE;
public final static int MIN_VALUE;
// Constructors
public Integer(int value);
public Integer(String s);
// Methods
public double doubleValue();
public boolean equals(Object obj);
public float floatValue();
public static Integer getInteger(String nm);
public static Integer getInteger(String nm, int val);
public static Integer getInteger(String nm, Integer val);
public int hashCode();
public int intValue();
public long longValue();
public static int parseInt(String s);
public static int parseInt(String s, int radix);
public static String toBinaryString(int i);
public static String toHexString(int i);
public static String toOctalString(int i);
public String toString();
public static String toString(int i);
public static String toString(int i, int radix);
public static Integer valueOf(String s);
public static Integer valueOf(String s, int radix);
}
Esta clase convierte un dato de tipo int a un objeto.
Este objeto contiene un solo campo de tipo int.
Pero tambien el objeto contiene una serie de metodos para convertir un valor int a una String y tambien
para convertir una String a int.
Ademas de otros metodos de igual utilidad.
Alejandro Huapaya Sànchez
Pág. 8 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
** Clase y notas tomadas directamente de java.sun
Class Double
public final class java.lang.Double extends java.lang.Number
{
// Fields
public final static double MAX_VALUE;
public final static double MIN_VALUE;
public final static double NaN;
public final static double NEGATIVE_INFINITY;
public final static double POSITIVE_INFINITY;
// Constructors
public Double(double value);
public Double(String s);
// Methods
public static long doubleToLongBits(double value);
public double doubleValue();
public boolean equals(Object obj);
public float floatValue();
public int hashCode();
public int intValue();
public boolean isInfinite();
public static boolean isInfinite(double v);
public boolean isNaN();
public static boolean isNaN(double v);
public static double longBitsToDouble(long bits);
public long longValue();
public String toString();
public static String toString(double d);
public static Double valueOf(String s);
}
** La misma fuente y las mismas notas de la clase anterior
Class Float
public final class java.lang.Float extends java.lang.Number
{
// Fields
public final static float MAX_VALUE;
public final static float MIN_VALUE;
Alejandro Huapaya Sànchez
Pág. 9 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
public final static float NaN;
public final static float NEGATIVE_INFINITY;
public final static float POSITIVE_INFINITY;
// Constructors
public Float(double value);
public Float(float value);
public Float(String s);
// Methods
public double doubleValue();
public boolean equals(Object obj);
public static int floatToIntBits(float value);
public float floatValue();
public int hashCode();
public static float intBitsToFloat(int bits);
public int intValue();
public boolean isInfinite();
public static boolean isInfinite(float v);
public boolean isNaN();
public static boolean isNaN(float v);
public long longValue();
public String toString();
public static String toString(float f);
public static Float valueOf(String s);
}
*** La misma fuente y notas anteriores
Class Long
public final class java.lang.Long extends java.lang.Number
{
// Fields
public final static long MAX_VALUE;
public final static long MIN_VALUE;
// Constructors
public Long(long value);
public Long(String s);
// Methods
public double doubleValue();
Alejandro Huapaya Sànchez
Pág. 10 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
public boolean equals(Object obj);
public float floatValue();
public static Long getLong(String nm);
public static Long getLong(String nm, long val);
public static Long getLong(String nm, Long val);
public int hashCode();
public int intValue();
public long longValue();
public static long parseLong(String s);
public static long parseLong(String s, int radix);
public static String toBinaryString(long i);
public static String toHexString(long i);
public static String toOctalString(long i);
public String toString();
public static String toString(long i);
public static String toString(long i, int radix);
public static Long valueOf(String s);
public static Long valueOf(String s, int radix);
}
*** fuente JAVA SUN
6.- OPERADORES ARITMETICOS
Un operador es un símbolo especial que indica al compilador que debe efectuar una operación matemática
o lógica.
Java reconoce los siguientes operadores aritméticos:
Operador Operación
+ Suma
- Resta
* Multiplicación
/ División
% Residuo o Módulo
Como notas importantes a recordar siempre;
En problemas de division entre enteros, java trunca la parte residual, ej;
Desplegar---> 13/5 ---> el resultado es 2
Mas adelante se dira como resolver este problema.
Para resolver los problemas de potencias y raíces, se usan ciertas instrucciones especiales que
proporciona el lenguaje, llamadas funciones matemáticas, en java existe toda una librería de instrucciones
o funciones matemáticas.
Recordar que todas las funciones reciben uno o más datos o valores y regresan siempre un resultado, una
de estas funciones matemáticas es:
Alejandro Huapaya Sànchez
Pág. 11 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
import java.lang.math ;
public static double pow(double a, double b);
Esta función ocupa dos valores o datos( base y exp) ambos de tipo double, y regresa un resultado también
de tipo double, ejemplo;
•
resolver el problema de calcular
import java.io.*;
import java.lang.Math;
public class ejemplo1
{public static void main(String args[])
{ double base =5;
double exponente=3;
double potencia =0;
potencia = Math.pow(base, exponente);
System.out.println("potencia =" +potencia);
}// cerrar main
} //cerrar clase
En java jsp y servlets para resolver el problema de raíces, se aprovecha una de las mas elementales y
conocida de las leyes de exponentes que dice:
n a m
= a m/ n
Es decir una raíz cualquiera se puede transformar a una potencia con un exponente fraccionario.
Ejemplo:
problema
y = 3  x esto es equivalente a
y = 3⋅x1 /2
entonces
// Usando la función pow y = 3*Math.pow(x, 0.5);
• En este ejemplo no funcional se esta dando por supuesto que no interesa el tipo de dato que
requiere la función pow() para trabajar correctamente
Para realizar operaciones con objetos numéricos, recordar que no se pueden hacer directamente
operaciones con ellos ni tampoco pueden recibir resultados en ellos, lo que se debe hacer es usar una
variable temporal de tipo apropiado, hacer la operacion con dicha variable y al final si se quiere convertir
esta variable al objeto numerico apropiado(esto ultimo se vera en el siguiente JAVA TEMA ), como lo
muestra el siguiente ejemplo;
Integer alfa = new Integer(20);
Double zeta = new Double(5);
double alfa1=0, zeta1=0;
alfa1=alfa.doubleValue();
zeta1=zeta.doubleValue();
alfa1=alfa1 + zeta1;
desplegar alfa1;
Como se observa se crearon dos objetos numericos, luego dos variables numericas normales, luego estas
dos ultimas variables se cargan con los objetos numericos que emplean metodos propios para convertirlos
a datos normales.
Alejandro Huapaya Sànchez
Pág. 12 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
En java jsp y java servlets la libreria maJAVA TEMA tica completa incluye:
Class Math
public final class java.lang.Math
extends java.lang.Object
{ // Fields
public final static double E;
public final static double PI;
// Methods
public static double abs(double a);
public static float abs(float a);
public static int abs(int a);
public static long abs(long a);
public static double acos(double a);
public static double asin(double a);
public static double atan(double a);
public static double atan2(double a, double b);
public static double ceil(double a);
public static double cos(double a);
public static double exp(double a);
public static double floor(double a);
public static double IEEEremainder(double f1, double f2);
public static double log(double a);
public static double max(double a, double b);
public static float max(float a, float b);
public static int max(int a, int b);
public static long max(long a, long b);
public static double min(double a, double b);
public static float min(float a, float b);
public static int min(int a, int b);
public static long min(long a, long b);
public static double pow(double a, double b);
public static double random();
public static double rint(double a);
public static long round(double a);
public static int round(float a);
public static double sin(double a);
public static double sqrt(double a);
public static double tan(double a);
}
Alejandro Huapaya Sànchez
Pág. 13 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
fuente tomada de java sun com
7.- JAVA OPERADOR CAST y CONVERSIONES
En java se puede forzar un dato, variable o una expresión a convertirse o cambiarse a un nuevo tipo de
dato.
El operador cast realiza este proceso, es decir convierte datos, variables o expresiones a un nuevo tipo de
dato, su formato es:
(nvotipo) dato , var, exp;
Ejemplo:
// declaración
int alfa;
// Asignación
alfa = 20;
// Cambio de tipo
(float) alfa;
Ejemplo:
(int) 3.1416;
•
en este ejemplo se está convirtiendo un float a int, recordar que en este caso ya no se tendrán los
decimales.
• Como nota importante se puede hacer cast solo con tipos de datos, no entre tipos de datos y
objetos de una clase numerica.
Como nota importante este operador resuelve los dos problemas pendientes:
a. El de la división entre enteros.
b. El tipo de dato especifico que requieren las funciones.
Ejemplos:
a) // Declaración
float alfa;
// Operación
alfa = (float)23/5;
// Pero en estos casos es preferible
alfa=23/5.0;
En toda división recordar agregar a uno de los dos valores el (.0), solo que los dos elementos sean
variables entonces usar el operador cast con una de ellas.
// Declaración
double potencia;
// Operación
potencia = Math.pow ( (double)5, (double)3);
Como se observa en el ejemplo, se puede usar pow(), directamente con los datos, argumentos o
parámetros requeridos , si estos son numéricos, pero transformándolos con el operador cast.
Alejandro Huapaya Sànchez
Pág. 14 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
Esto también va a permitir evaluar expresiones matemáticas de manera mas directa y sencilla, solo
recordando usar un pow() por cada potencia y cada raíz de la ecuación, ejemplo:
sea
dentro de un programa esto se resuelve con;
// área de declaración de variables
double y, x;
// área de captura de datos
capturar el valor de x;
// área de operaciones
y = 3 * Math.pow(x, (double)3) - Math.pow(x, (1/3.0)) + 4 * Math.pow(x, (double)2));
// área de despliegue de resultados
desplegar x, y
En java jsp y java servlets para convertir tipos de datos numericos a objetos numericos y viseversa
se deberan usar los metodos que traen las clase numericas de manera apropiada, en general
existen tres casos generales difrentes, considerando datos o variables numericas, objetos
numericos y strings que es un caso especial y comun:
a.1) Variable numerica a variable numerica
Usar el operador cast ejemplo:
//var to var
int alfa1=10; double alfa2=3.1416;
alfa1= (int)alfa2;
 observar que valores decimales deben declararse como doubles
a.2) variable numérica a string
ejemplo;
// var to string
int zeta=50;
String alfa= String.valueOf(zeta);
a.3) variable numerica a objeto numerico
caso 1: usando constructor
int zeta=80;
Float alfa4 = new Float(zeta);
caso 2: ya existe el objeto numerico
Double alfa5 = new Double(0);
Int zeta=30;
alfa5=Double.valueOf(String.valueOf(zeta));
b.1) Objeto Numerico a Variable numerica
todos los objetos numericos deben crearse inicializados aunque sea a (0)
Integer alfa = new Integer(300);
Int zeta = alfa.intValue();
Alejandro Huapaya Sànchez
Pág. 15 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
b.2) Objeto numérico a String
Float alfa = new Float("3.45");
String beta = new String(" ");
Beta = alfa.toString();
b.3) Objeto Numerico a Objeto Numerico
Integer alfa=new Integer(50);
Double beta=new Double(0);
beta = beta.valueOf(alfa.toString());
c.1) String to variable numerica
String alfa= new String("3.5");
double beta= 0;
beta= Double.parseDouble(alfa);
c.2) String to Objeto Numerico
String alfa8=new String("50");
Double alfa9=new Double(0);
alfa9 = alfa9.valueOf(alfa8);
TAREAS JAVA POW ():
1.
2.
2.
8.- JERARQUIA DE OPERACIONES
En java jsp y java servlets el problema de no tomar en cuenta la jerarquía u orden de los operadores al
plantear y resolver una operación casi siempre conduce a resultados muchas veces equivocados como
estos:
Ejemplos:
a. 2+ 3* 4 = 20(incorrecto) = 14 (correcto)
b) si calif1=60 y calif2=80
entonces en programa se usa
promedio=calif1 + calif2/2
da como resultado promedio = 100
Recordar siempre, que antes de plantear una formula en un programa se deberá evaluar contra el
siguiente:
Orden de operaciones:
1.- Paréntesis
2.- Potencias y raíces
Alejandro Huapaya Sànchez
Pág. 16 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
3.- Multiplicaciones y divisiones
4.- Sumas y restas
5.- Dos o más de la misma jerarquía u orden, entonces resolver de izquierda a derecha
Nota: Si se quiere alterar el orden normal de operaciones, entonces usar paréntesis.
Nota: Tampoco es bueno usar paréntesis de mas en una operación, esto solo indica que no se evalúo bien
la formula, como en el siguiente ejemplo;
aquí los paréntesis están de mas, porque por orden de operaciones, multiplicación y división tienen la
misma jerarquía y entonces se resuelven de izquierda a derecha, en otras palabras ni que falten paréntesis
ni que sobren paréntesis en ningun programa java jsp o java servlet.
9.- APLICACIONES
Recordar que JAVA es un lenguaje de programación moderno, que esta enfocado a la construcción de
sisJAVA TEMA s de informacion que se ejecutarán en una plataforma muy diversa de procesadores y
sisJAVA TEMA s operativos.
Esto indica la necesidad de construir diversos tipos de aplicaciones, programas o sisJAVA TEMA s, en
general, este curso se centra alrededor de los sguientes tipos de aplicaciones basicas:
1.- Aplicaciones o programas que se ejecuten en "consolas", es decir ambientes del tipo msdos, linux,
terminales tontas, etc.
2.-Aplicaciones o sisJAVA TEMA s que se ejecuten en ambientes graficos o de tipo "ventanas:, ejemplo
windows, kde o gnome de linux, sistem 8 de apple, etc.
3.- Aplicaciones de tipo APPLETS, que tambien son programas en java que se mandan a una pc remota o
lejana, donde esa pc se encarga de correrla o ejecutarla o compilarla y correrla.
Este applet lo manda un servidor de paginas(web server) junto con la pagina correspondiente, cada vez
que un usuario se conecta al web server y requiere la pagina que contiene el applet.
Para el caso de applets, estos se ejecutan no en consola, tampoco en una ventana, sino dentro de el
browser de la maquina remota que puede ser el internet explorer de microsoft o el netscape.
Por supuesto que el browser del cliente debe estar preparado para ejecutar applets, esto se hace teniendo
constantemente actualizado el browser (internet explorer o netscape) y estando sobre todo seguro que en
la actualización del browser se incluya la maquina virtual de java.
4.-Aplicacion de tipo SERVLETS, que son programas en java que se ejecutan direcatemente en el servidor
de paginas o web server, que al ser invocado o llamado por una pc remota, el web server ejecuta el servlet,
ya ejecutado se mandan generalmente los resultados a la maquina remota, estos resultados se mandan en
forma de una pagina html, para que la maquina remota los vea en su propio browser.
Una vez que el web server o servidor de paginas ejecuta un servlet, lo mantiene vivo o despierto, para
responder de manera mas rapida a las peticiones siguientes que se hagan del servlet.
5.- Aplicaciones JSP (Java Server Pages), tecnologia que combina codigo html y codigo java en un solo
programa o aplicación, cuando al web server le piden un jsp, lo compila, lo convierte a servlet con todas las
implicaciones que se mencionarón en el inciso anterior y manda los resultados a la pc remota que lo
solicitó.
6.- Beans y Java Beans, tecnologias de tipo servlet pero que estan especializadas principalmente en
mantener enlaces constantes a bases de datos de cualquier marca (access, oracle, mysql, etc), esto
Alejandro Huapaya Sànchez
Pág. 17 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
permite que una serie de varios programas o aplicaciones a la vez esten interactuando con el mismo java
bean y por consiguiente con la base de datos.
7.-Existen otra serie de aplicaciones diferntes que se pueden construir con java, tales como aplicaciones
rmi, aplicaciones en tiempo real, ejb , pero de momento estan fuera del alcance de estas notas.(estarse
pendiente de la siguiente actualizacion de este texto)
En general las aplicaciones a desarrollar en este curso ( consola, graficas, applets y servlets, jsp, beans )
todas tienen en comun el lenguaje e instrucciones de programacion de java.
El compilador a usar es el SDK (standard development kit) de Java, este kit estandar de desarrollo de
programas se encuentra en http://www.java.sun.com/j2se/, de aqui bajarlo e instalarlo.
Solo renombrar el folder de default donde se instala a c:\jdk1.3 en lugar del que trae que es c:\Jdk1.3.0_02
10.- APLICACIONES POR CONSOLA
Empezemos con el programa clasico de los lenguajes de programacion:
class holamundo {
public static void main(String[] args) {
System.out.println(" HOLA MUNDO ");
} // cierra main
} // cierra clase
1.- Se debera construir usando el mejor editor del mundo, el NOTEPAD de windows, y se debera grabar en
un nuevo folder, con el nombre de la clase (holamundo) y la extension de .java, es decir en notepad usar
save as holamundo.java (respetar mayusculas y minusculas que se hayan puesto en la clase), tener
cuidado con notepad porque en ocasiones lo graba como holamundo.java.txt, si esto sucede no se puede
compilar o sdk informa que no lo encuentra, en notepad seleccionar tipo=all files o irse a msdos y
renombrarlo a .java solamente.
2.- Para compilarlo abrir una sesion de msdos dentro de windows y navegar hasta el folder donde esta
holamundo.java y compilarlo con la siguiente instruccion:
c:\jdk1.3\bin\javac holamundo.java
observar que jdk1.3 es el folder que renombraron cuando instalaron el sdk que bajaron de java.sun.com, si
no tendran que escribir el nombre largo del folder donde se instalo sdk.
JAVAC es el compilador de java y lo que hace aparte de mostrar los errores que puede tener el programa
es crear un nuevo archivo con extensión .class, es decir en este ejemplo , en el folder ahora aparte de tener
holamundo.java, debera haber un archivo llamado holamundo.class, que es el equivalente a los
archivos.exe o executables de windows.
3.-El tercer paso es ejecutar el programa, esto se hace con la instruccion:
c:\jdk1.3\bin\java holamundo
Observar que ahora es java quien executa y el archivo ya no tiene extension.
Un problema muy comun al tiempo de ejecución, es que java mande un mensaje de classnotfound, si esto
pasa al querer ejecutar el programa, solo irse al prompt de msdos y escribir la orden:
C:>SET CLASSPATH=
Y volver a ejecutar el programa.
CARACTERISTICAS DE PROGRAMAS O APLICACIONES EN JAVA
1.- Todos los programas en java son y empiezan con una clase.
Alejandro Huapaya Sànchez
Pág. 18 de 125
Desarrollo e
Investigación de
Sistemas de
Cómputo
Tutorial Java
Programación Swing Applets Servlet Jsp
UNIDAD I ELEMENTOS BASICOS
Sección: AC4
Revisión: 05
Setiembre 2009
2.- Todos los programas en java, deben llevar un metodo principal, llamado main() quien es quien contiene
el codigo normal del programa.
3.- La clase y el metodo main deben abrir y cerrar sus propias llaves {}
4.- Las instrucciones terminan con punto y coma (;)
5.- Java tambien es "case sensitive", es decir diferencía mayusculas y minusculas.
Problema .- bajar, instalar el sdk java y construir, compilar y ejecutar este programa de ejemplo
11.- APLICACIONES CONSOLA JAVA JSP Y JAVA SERVLETS (CONTINUACION)
Entradas y salidas de datos son las tareas mas comunes en cualquier lenguaje de programación.
En aplicaciones de consola, estos procesos se ejecutan con las siguientes instrucciones:
Programa ejemplo:
import java.lang.*;
import java.io.*;
class ejemplo1 {
public static void main(String[] args) {
int alfa=0;
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
// se crea teclado que es un objeto para que lea la string que se captura
try {
System.out.println("dame numero entero: ");
//teclado lee una string y la convierte a variable dato numerico normal
alfa = Integer.parseInt(teclado.readLine());
} catch(IOException varerror) {System.out.println("error");}
alfa= alfa+5;
System.out.println(alfa);
} // cierra main
} // cierra clase
En java generalmente todo se maneja mediante objetos, primero se esta creando un objeto llamado teclado
que tenga capacidad de leer una string, desde el dispositivo de entrada estandar (teclado o System.in).
Se esta usando la instruccion System.out.println(string); para mandar mensajes al ususario
Se esta usando el metodo readline() que tiene el objeto teclado, para leer la string del teclado fisico.
Se esta usando Integer.parseInt, visto en el JAVA TEMA del operador cast y conversiones, para convertir la
string a una variable numerica
Se esta usando una instruccion try-catch, para detectar o prevenir problemas con los datos que proporcione
el usuario del programa, por ejemplo que en lugar de dar un numero, proporcione letras.
Como se observa es bastante sencillo, hacer programas de entrada-salida en consola en java
TAREAS JAVA
1.-CONSTRUIR APLICACIONES JAVA DE CONSOLA PARA TODOS LOS MODELOS DE SOLUCION
RESUELTOS
Alejandro Huapaya Sànchez
Pág. 19 de 125
UNIDAD 2: JAVA APLICACIONES GRAFICAS
JAVA TEMA I.- INTRODUCCION JAVA APPLETS
Java es un lenguaje de programacion desarrollado para una multitud de plataformas y procesadores.
Aplicaciones o programas graficos deberan tomar en cuenta estos aspectos, para propositos de este libro,
consideramos los dos tipos de aplicaciones graficas mas comunes .
a. Frames.-Es el equivalente a una aplicacion grafica comun en los diversos lenguajes de
programacion visuales, tales como el visualbasic, cbuilder, delphi, etc.
b. Applets.-Que en principio se pueden considerar como aplicaciones graficas o visuales normales,
excepto que estos applets se empotran o incluyen dentro de una pagina html, misma que a su vez
es enviada, junto con el applet a una maquina o pc remota en un intranet o internet, para que dicha
maquina remota despliegue la pagina html y ejecute el programa que va en el applet.
Modelos de Frames y Applets, se pueden construir usando cualquiera de las dos galerias de componentes
visuales que proporciona java, estas librerias visuales, son:
1.- JAVA AWT es la libreria visual mas antigua de java usando esta libreria, se podran construir los tres
tipos de programas mas comunes como son FRAME, WINDOW y APPLET.
2.- JAVA SWING es la libreria de componentes visuales mas nueva que proporciona java, usando esta
libreria se podran construir los tres tipos de programas o aplicaciones que son JFRAME, JWINDOW y
JAPPLET.
PARA PROPOSITOS DE ESTE CURSO NOS CONCENTRAMOS EN JAVA FRAME Y JAVA APPLET
derivados de JAVA AWT (la libreria visual antigua), por la triste razón de que el modelo de ejecución de
estos programas, esta muy asociado al compilador de java que traen los browsers.
Otra vez, un applet es un programa un java que se manda a una maquina o pc remota para que lo ejecute
o lo corra, cuando este applet le llega a la maquina remota via un browser, dicho browser es quien activa la
maquina virtual de java que esta en la pc remota y esta maquina virtual ya da la orden de compilación y
ejecución, es decir java programa.applet.
Entonces es importante que la maquina virtual de java, que se encuentra en la pc remota, tenga capacidad
de incluir todas las librerias de java, como la de math, la de awt, la de lang, etc.
La triste historia, es que la maquina virtual de java (revisen su folder program files o windows y ahi la
encuentran), les llega a travez de microsoft a las pc remotas, y por el pleito sun-microsoft, estos ultimos
estan mandando una maquina virtual de java antigua que solo tiene incluido awt y no swing.
Entonces no tiene caso que hagan un programa applet muy bonito con componentes swings, lo manden a
una pc remota y esta ultima no lo pueda compilar y ejecutar porque no reconoce la libreria swing.
Lo que esta haciendo la compañia sun para resolver este problema es proporcionar a quien lo pida una
maquina virtual de java actualizada (llamada webstar ) gratis y a quien la quiera, pero no podemos construir
progamas o applets que no vayan a correr en todas las pcs, mientras ellos arreglan el pleito, estamos
condenados a usar JAVA AWT
UNIDAD 2: JAVA APLICACIONES GRAFICAS
JAVA TEMA 2: JAVA FRAME PROPIEDADES
JAVA Frame es el componente, control u objeto principal de una aplicacion visual o grafica en java.
Es el equivalente a FORM1 en los demas lenguajes visuales, como todos ellos Frame es un objeto normal
que se deriva de una clase apropiada, tiene sus propiedades y se le pueden asociar sus eventos.
Todo Programa Visual en java, empieza creando un objeto de este tipo, cargando y asignando sus
propiedades como lo muestra el siguiente ejemplo:
Ejemplo 1)
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog1 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
// en este caso un solo objeto la ventana
static Frame ventana= new Frame();
// parte principal de programa
public static void main(String[] args)
{
// area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setBackground(java.awt.Color.pink);
ventana.setSize(200,250);
ventana.setVisible(true);
// se agrega un escuchador para que cierre la ventana con la x de arriba
ventana.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);} });
}; // termina main
} // termina clase
CORRIDA:
Como ya se indico, todo programa en java, debe ser un clase y toda aplicación o programa debe tener un
metodo main.
El programa empieza creando un objeto llamado ventana, derivado de la clase FRAME, observar y
aprender el formato de creacion, es formato similar para cuando se crean mas objetos.
Es el objeto ventana quien debera cargarse con los demas componentes y o controles que tendra la
aplicación.
En este programa ejemplo, se muestra como asociar eventos a el objeto ventana, primero se quiere
aclarar algunas cuestiones.
Las propiedades o metodos derivados de la clase superior component de FRAME son:
action,
add,
addComponentListener,
addFocusListener,
addHierarchyBoundsListener,
addHierarchyListener,
addInputMethodListener,
addKeyListener,
addMouseListener,
addMouseMotionListener, addPropertyChangeListener, addPropertyChangeListener, bounds, checkImage,
checkImage, coalesceEvents, contains, contains, createImage, createImage, disable, disableEvents,
dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, getBackground,
getBounds, getBounds, getColorModel, getComponentOrientation, getCursor, getDropTarget, getFont,
getFontMetrics, getForeground, getGraphics, getHeight, getInputMethodRequests, getLocation,
getLocation, getLocationOnScreen, getName, getParent, getPeer, getSize, getSize, getTreeLock, getWidth,
getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isDisplayable, isDoubleBuffered,
isEnabled, isFocusTraversable, isLightweight, isOpaque, isValid, isVisible, keyDown, keyUp, list, list, list,
location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move,
nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent,
processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent,
processMouseEvent, processMouseMotionEvent, removeComponentListener, removeFocusListener,
removeHierarchyBoundsListener,
removeHierarchyListener,
removeInputMethodListener,
removeKeyListener, removeMouseListener, removeMouseMotionListener, removePropertyChangeListener,
removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, reshape, resize, resize,
setBackground, setBounds, setBounds, setComponentOrientation, setDropTarget, setEnabled,
setForeground, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, size,
toString, transferFocus
Como se observa, en el programa ejemplo solo se usan muy poquitas de ellas.
Pero aún hay mas, FRAME tambien puede usar las siguientes propiedades y metodos de la clase superior
container y son:
add, add, add, add, add, addContainerListener, addImpl, countComponents, deliverEvent, doLayout,
findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt,
getComponentAt, getComponentCount, getComponents, getInsets, getLayout, getMaximumSize,
getMinimumSize, getPreferredSize, insets, invalidate, isAncestorOf, layout, list, list, locate, minimumSize,
paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, remove,
removeAll, removeContainerListener, setFont, setLayout, update, validate, validateTree
De aqui tambien se tomarón algunas para el programa ejemplo.
Pero sigue la mata dando, FRAME tambien puede usar metodos y propiedades de la clase superior
windows:
addWindowListener,
applyResourceBundle,
applyResourceBundle,
dispose,
getFocusOwner,
getGraphicsConfiguration, getInputContext, getListeners, getLocale, getOwnedWindows, getOwner,
getToolkit, getWarningString, hide, isShowing, pack, postEvent, processEvent, processWindowEvent,
removeWindowListener, setCursor, show, toBack, toFront
Observar que tambien de aqui se tomarón varias para el programa ejemplo.
Pero!!! FRAME tambien tiene sus propias propiedades y metodos que son:
Method Summary
void
addNotify()
Makes this Frame displayable by connecting it to a native screen resource.
protected void
finalize()
We have to remove the (hard) reference to weakThis in the Vector, otherwise the
WeakReference instance will never get garbage collected.
AccessibleContext
getAccessibleContext()
Gets the AccessibleContext associated with this Frame.
int
getCursorType()
Deprecated. As of JDK version 1.1, replaced by Component.getCursor().
static Frame[]
getFrames()
Returns an array containing all Frames created by the application.
Image
getIconImage()
Gets the image to be displayed in the minimized icon for this frame.
MenuBar
getMenuBar()
Gets the menu bar for this frame.
int
getState()
Gets the state of this frame.
String
getTitle()
Gets the title of the frame.
boolean
isResizable()
Indicates whether this frame is resizable by the user.
protected String
paramString()
Returns the parameter String of this Frame.
void
remove(MenuComponent
Removes the specified menu bar from this frame.
void
removeNotify()
Makes this Frame undisplayable by removing its connection to its native screen
resource.
void
setCursor(int
cursorType)
Deprecated. As of JDK version 1.1, replaced by Component.setCursor(Cursor).
void
setIconImage(Image
Sets the image to displayed in the minimized icon for this frame.
void
setMenuBar(MenuBar
Sets the menu bar for this frame to the specified menu bar.
void
setResizable(boolean
Sets whether this frame is resizable by the user.
void
setState(int
Sets the state of this frame.
void
setTitle(String
Sets the title for this frame to the specified string.
m)
image)
mb)
resizable)
state)
title)
Como notas finales:
1.- tambien de aqui se tomarón algunas para el programa ejemplo.
2.- Todo este material acerca de metodos y propiedades, lo encuentran buscando la clase correspondiente
( en este caso FRAME) en doc y api que estan en el sitio de www.java.sun.com
3.-Es necesario que localizen este material, para que lo tengan a la mano, pueden bajar el api completo del
sitio:
http://java.sun.com/j2se/1.3/docs.html
4.- Es la ultima vez que se muestran todas la propiedades y metodos de un componente, de aqui en
adelante deberan tener la documentación del componente a la mano (inciso anterior), para poder usar un
componente a plenitud en sus programas o aplicaciones
UNIDAD 2: JAVA APLICACIONES GRAFICAS
JAVA TEMA 3: JAVA FRAME Y METODOS
En programacion visual java jsp y java servlets a los objetos se les asocia directamente los metodos, por
ejemplo:
Ej a) private sub command1_click() codigo a realizar etc
Ej b) button1_click() codigo a realizar etc
A este modelo de objeto-evento se le conoce como modelo orientado a eventos (event driven).
Por supuesto que como buenos programadores como son todos los lectores de estas notas, uno siempre
cuida todas las posibles situaciones que se le pueden presentar al usuario, por ejemplo, que tal si la
maquina del usuario no tiene raton, la respuesta es sobrecargar el programa o aplicacion de eventos
posibles y todos ellos llamando a la misma unidad de codigo es decir:
Ej:
Command1_click() codigo
Command1_keypressed() mismo codigo o llamado
Command1_UpArrow() lo mismo etc.
Command1_usuarioestornudo() igual etc
JAVA usa un modelo nuevo de asociacion de objeto-evento, llamado de "Delegacion de Eventos", en este
modelo se crea un objeto especializado en escuchar por eventos e informar a un objeto normal de cuando
el evento sucede para que este ultimo active el metodo o codigo necesario para procesar el evento.
Objetos escuchadores de este tipo, pueden ser raton, teclado, etc, y existe un objeto de este tipo muy
generico, capaz de escuchar hasta cuando el usuario estornuda llamado "ACTION".
Cada uno de estos escuchadores, tienen tambien cada uno sus propios metodos, por ejemplo el objeto
raton, tiene metodos para detectar el click del raton, o el dobleclick del raton etc, mas adelante se presenta
una relacion de estos objetos y los metodos que contienen.
En un programa como en el siguiente ejemplo, uno crea el objeto escuchador y se lo agrega el objeto del
programa que lo ocupa.
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog2 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
// en este caso un solo objeto la ventana
static Frame ventana= new Frame();
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setBackground(java.awt.Color.pink);
ventana.setSize(200,150);
ventana.setCursor(new Cursor(Cursor.HAND_CURSOR) );
ventana.setVisible(true);
// area de asociacion de objetos-escuchadores
ventana.addWindowListener( new WindowAdapter()
{ public void windowClosing(WindowEvent e){ System.exit(0); }} );
// otro escuchador con un evento asociado a FRAME
ventana.addKeyListener( new KeyAdapter()
{ public void keyPressed(KeyEvent e){
ventana.setBackground(java.awt.Color.blue);
}} );
// otro escuchador con un evento asociado a FRAME
ventana.addMouseListener( new MouseAdapter()
{ public void mouseExited(MouseEvent e){
ventana.setBackground(java.awt.Color.cyan);
ventana.setTitle("adios ratoncito");
}} );
}; // termina main
} // termina clase
Como se observa al objeto ventana le estamos agregando tres tipos de escuchadores diferentes (windows,
raton, teclado) esto se hace con la instrucción(.ADDESCUCHADOR) y a cada escuchador se le esta
cargando de codigo o instrucciones a alguno de sus metodos.
Para usar ADDESCUCHADOR, se debera crear el objeto-escuchador apropiado usando la instruccion
NEW OBJETOLISTENER.
Pero observar que en su lugar se uso NEW OBJETOADAPTER, esto es porque si se crea
OBJETOLISTENER java exige que se escriban o codifique todos los metodos del LISTENER ( y creanlo
son muchos de cada uno)aunque no se ocupen.
OBJETOADAPTER es similar que OBJETOLISTENER excepto que en la aplicacion solo se escribe el
metodo que realmente se ocupe, en jerga tecnica ADAPTER es LISTENER con metodo que se ocupe
sobrecargado.
Los principales (no unicos) escuchadores y sus principales metodos son:
Escuchador Metodos
WINDOW WindowActivated(), WindowClosed(),
WindowClosing(), WindowDeactivated(),
WindowOpened().
MOUSE MouseClicked(), MouseDragged(),
MouseEntered(), MouseExited(),
MouseMoved(), MousePressed().
MouseReleased().
KEY KeyPressed(), KeyReleased(), KeyTyped().
POPUPMENU investigar en ayuda de java
FOCUS investigar en ayuda de java
CONTAINER investigaren ayuda de java
COMPONENT investigar en ayuda de java
CHANGE investigar en ayuda de java
CARET investigar en ayuda de java
UNIDAD 2: JAVA APLICACIONES GRAFICAS
JAVA TEMA 4: JAVA ENTRADA/SALIDA
Procesos de entrada o captura de datos y procesos de salida de información son procesos basicos en
cualquier programa o aplicacion de cualquier lenguaje de programacion.
Para aplicaciones por consola ya se vieron las instrucciones respectivas, para el caso de aplicaciones
visuales, este problema de e/s se resuelve usando componentes o controles especializados en cada una
de las tareas respectivas.
En particular en java para una aplicacion sencilla se ocupan los siguientes objetos:
1.- Un contenedor apropiado para todos los demas objetos, para este caso un objeto de tipo JAVA
FRAME, que ya se analizo en los dos JAVA TEMA s anteriores.
2.-Componentes o controles que permitan desplegar textos o mensajes estaticos, JAVA LABEL.
3.-Componentes o controles que permitan capturar datos y/o desplegar datos o información, JAVA
TEXTFIELD.
4.-Componentes o controles que permitan controlar o dirigir las conductas y codigos de los demas
elementos de la aplicacion o programa, BUTTON.
UNIDAD 2: JAVA APLICACIONES GRAFICAS
JAVA TEMA 5.- JAVA LABEL
Este componente se utiliza para desplegar textos o mensajes estáticos dentro de las formas, textos tales
como encabezados, solicitud al usuario del programa para que proporcione algún dato o información(edad,
dame sueldo, etc.), en cierta forma hace las funciones de printf, cout, writeln, print, display, etc., pero solo
cuando se consideran en su parte de mensajes.
También es un objeto en java y por tanto tiene asociados sus propias propiedades y objetos-eventos, al
mismo tiempo como se está usando dentro del objeto FRAME, muchas propiedades que se definan para el
objeto FRAME, el objeto Label las va a heredar.
Es la propiedad TEXT, la que lleva el contenido del mensaje que se quiere desplegar, misma que se
cargara de manera igual que con FRAME, es decir LABEL.setPROPIEDAD(parametros, en muchos de los
casos;
Algunas de sus propiedades mas importantes son:
Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(), Name(), Opaque(), Text(),
ToolTipText(), Visible()
El listado completo de sus propiedades y metodos ya lo deben tener en la documentacion (api) que
ya bajarón de java.sun ?o no es asi?
Recordar que las propiedades se inicializan y se usan en codigo con .SETpropiedad.
Algunos de sus escuchadores con sus metodos mas importantes son:
WINDOW:
WindowActivated(),
WindowClosed(),
WindowClosing(),
WindowDeactivated(),
WindowOpened().
MOUSE:
MouseClicked(),
MouseDragged(),MouseEntered(),
MouseExited(),MouseMoved(),
MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped().
UNIDAD 2: JAVA APLICACIONES GRAFICAS
JAVA TEMA 6.- JAVA TEXTFIELD
En Java este componente es un importante componente visual, su función principal es manejar todos los
procesos de entrada y salida (input/output) al programa.
Este componente TEXTFIELD es el equivalente a las variables en cualquier lenguaje de
programación mas la instrucción de captura o despliegue correspondiente, es decir;
a) En BASIC, Input Edad -> Text1
b) En PASCAL, Read(Ciudad) -> Text2
c) En C, printf("%d", sueldo) -> Text3
d) En C++, cin.get(nombre,30) -> Text4
e) En Cobol Display metros -> Text5
Su principal propiedad es TEXT(), que es la propiedad que contiene el dato de tipo STRING que se
manipulara en los programas o aplicaciones.
El dato dentro de esta propiedad es de tipo STRING y por tanto se tendra que convertir a datos numericos
normales para poder efectuar procesos numericos con ellos como se vio en el JAVA TEMA de CAST y
CONVERSIONES.
Aparte de esta propiedad TEXT, tiene otras propiedades que se pueden inicializar con el comando SET
como ya se ha visto en los JAVA TEMA s de FRAME y LABEL.
Algunas de sus propiedades mas importantes son:
Background(), Border(), Bounds(),Columns(), Cursor(),Editable(), Enabled(), Font(), Foreground(), Name(),
Opaque(), Text(), ToolTipText(), Visible()
Espero que ya tengan la documentación completa en su disco duro.
Recordar que las propiedades se inicializan y se usan en codigo con .SETpropiedad.
Algunos de sus escuchadores con sus metodos mas importantes son:
WINDOW:
WindowActivated(),
WindowClosed(),
WindowClosing(),
WindowDeactivated(),
WindowOpened().
MOUSE:
MouseClicked(),
MouseDragged(),MouseEntered(),
MouseExited(),MouseMoved(),
MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped().
UNIDAD 2: APLICACIONES GRAFICAS
JAVA TEMA 7.- JAVA SWING BUTTON
En java es el control principal de la forma, contiene el código principal del programa y su activación por el
usuario provoca que se realicen los principales procesos del problema planteado (aquí es donde se
capturan datos, se realizan operaciones, etc.).
De este control se maneja su propiedad TEXT para etiquetarlo con la palabra "OK" o "ACEPTAR" o "EXE" y
su evento Click para activarlo, es en dicho evento donde se construye el código del programa.
Recordar que aunque no es un control necesario en los programas, ya que el código se puede
asociar o pegar a cualquier escuchador-evento de cualquier forma, o control del programa, pero
Microsoft ya acostumbro a todos los usuarios al botón OK, de acuerdo, OK.
PROPIEDADES
Background(), Border(), Bounds(),Columns(), Cursor(),Editable(), Enabled(), Font(), Foreground(), Name(),
Opaque(), Text(), ToolTipText(), Visible()
Pensaba poner la nota de bajar la documentación de java sun pero me arrepenti.
Recordar que las propiedades se inicializan y se usan en codigo con .SETpropiedad.
ESCUCHADORES-EVENTOS
WINDOW:
WindowActivated(),
WindowClosed(),
WindowClosing(),
WindowDeactivated(),
WindowOpened().
MOUSE:
MouseClicked(),
MouseDragged(),MouseEntered(),
MouseExited(),MouseMoved(),
MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped().
UNIDAD II: JAVA APLICACIONES GRAFICAS
JAVA TEMA 8: JAVA PRACTICA
Se da el ejemplo clasico de programa o aplicacion con entrada/salida, convertir años a meses:
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog3 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static Frame ventana= new Frame();
static Label l1 = new Label("dame edad :");
static TextField t1 = new TextField(12);
static Button b1 = new Button("años a meses");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setLayout(new FlowLayout());
ventana.add(l1); ventana.add(t1); ventana.add(b1);
ventana.pack(); ventana.setVisible(true);
//area de asociacion de objeto-eventos
b1.addMouseListener( new MouseAdapter()
{ public void mousePressed(MouseEvent e){
int alfa = Integer.parseInt(t1.getText());
alfa = alfa * 12;
t1.setText(String.valueOf(alfa)); }} );
ventana.addWindowListener( new WindowAdapter()
{ public void windowClosing(WindowEvent e){ System.exit(0); }} );
}; // termina main
} // termina clase
CORRIDA:
Notas:
El 12 en el constructor de TextField, es un parametro para indicarle de cuantos caracteres tendra la cajita.
Se esta usando un layout nuevo (flowLayout), para acomodar los componentes dentro del panel de
contenido, un layout (null) es para aomodarlos en coordenadas xy especificas esto no es recomendable por
java, en virtud de que el programa o aplicación puede y debe ejecutarse en procesadores-sisJAVA TEMA s
operativos diferentes, en el siguiente JAVA TEMA se tratan todos los layouts que tiene java.
UNIDAD 2: APLICACIONES GRAFICAS
JAVA TEMA 9: JAVA LAYOUTS
Recordar que java esta enfocado a programas y aplicaciones que se estaran ejecutando en una plataforma
muy amplia de procesadores y sisJAVA TEMA s operativos diferentes.
Una cuestión pertinente a este problema, es que el metodo normal de construcción de interfases para el
usuario ya no es suficiente, en este metodo normal es comun acomodar los controles o componentes de
acuerdo a coordenadas XY predifinadas en la forma, desgraciadamente esto ya no es conveniente, porque
diversos sisJAVA TEMA s operativos no tienen las mismas resoluciones que sisJAVA TEMA s operativos
"normales".
Pare resolver de mejor manera este problema java utiliza "layouts" que son maneras predefinidas de
acomodar controles o componentes visuales en formas o ventanas visuales.
En ninguno de los layouts se permite especificar una coordenada xy para un componente o control visual,
solo se permite especificar si va primero o va al norte etc.
Los layouts mas comunes de java son:
A) BorderLayout: Arregla los componentes en posiciones CENTER, NORTH, SOUTH, EAST, WEST.
Prog ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog4 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static Frame ventana= new Frame();
static Label l1 = new Label("norte");
static Label l2 = new Label("sur");
static Label l3 = new Label("este");
static Label l4 = new Label("oeste");
static Button b1 = new Button("CENTRO");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setLayout(new BorderLayout());
ventana.add(l1,BorderLayout.NORTH);
ventana.add(l2,BorderLayout.SOUTH);
ventana.add(l3,BorderLayout.EAST);
ventana.add(l4,BorderLayout.WEST);
ventana.add(b1,BorderLayout.CENTER);
ventana.pack();
ventana.setVisible(true);
//area de asociacion de objeto-eventos
ventana.addWindowListener( new WindowAdapter()
{ public void windowClosing(WindowEvent e){ System.exit(0); }} );
}; // termina main
} // termina clase
corrida:
B) FlowLayout: acomoda los componentes de izquierda a derecha, hasta que se acaba la pantalla y
entonces empieza en el siguiente renglon:
Este layout es el default de FRAME y en el programa3 se esta demostrando.
Corrida
C) GridLayout: Acomoda los componentes en columnas y renglones de tamaño fijo, su constructor ocupa
como parametros la cantidad de renglones y de columnas.
Programa ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog6 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static Frame ventana= new Frame();
static Label l1 = new Label("label1");
static Label l2 = new Label("label2");
static Label l3 = new Label("label3");
static Label l4 = new Label("label4");
static Button b1 = new Button("buton1");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setLayout(new GridLayout(0,3));
ventana.add(l1); ventana.add(l2); ventana.add(l3);
ventana.add(l4); ventana.add(b1);
ventana.pack(); ventana.setVisible(true);
//area de asociacion de objeto-eventos
ventana.addWindowListener( new WindowAdapter()
{ public void windowClosing(WindowEvent e){ System.exit(0); }} );
}; // termina main
} // termina clase
Corrida
UNIDAD 2: APLICACIONES GRAFICAS
JAVA TEMA 10.- PANEL
Construir directamente programas o aplicaciones directamente en un FRAME, produce rapidamente un
amontonamiento de controles o componentes en la propia forma.
Es mas conveniente usar componentes de agrupamiento visuales que faciliten la separación fisica y logica
de las diversas partes que componen un programa o aplicación.
Estos controles de agrupamiento son conocidos como paneles, aunque en visual basic se conocen como
frames (no confundirlos con frame de java).
Java tiene los siguientes tipos de paneles, PANEL, SPLITPANE, SCROLLPANE, TABBEDPANE,
TOOLBAR
Recordar ademas que los panels pueden y deben usar su propio layout para acomodar los componentes
visuales que contendra.
En particular frame usando su layout acomoda sus paneles y panel usando su layout acomoda los
componentes.
UNIDAD 2: APLICACIONES GRAFICAS
JAVA TEMA 11: JAVA PANEL
Es el componente mas común de agrupamiento su trabajo consiste en ser el contenedor del resto de los
componenentes del programa.
Su layout de default es FlowLayout.
Es tarea común poner en un FRAME una serie de paneles, cada uno de estos enfocado a una tarea
especifica:
Las propiedades son:
Autoscrolls(), Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(),Insets(),
Layouts(), Name(), Opaque(), ToolTipText(), Visible(), VisibleRect().
Sus escuchadores son:
WINDOW:
WindowActivated(),
WindowClosed(),
WindowClosing(),
WindowDeactivated(),
WindowOpened().
MOUSE:
MouseClicked(),
MouseDragged(),MouseEntered(),
MouseExited(),MouseMoved(),
MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped().
Programa ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog7 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static Frame ventana= new Frame();
static Panel panel1 = new Panel();
static Panel panel2 = new Panel(new GridLayout(0,2));
static Panel panel3 = new Panel();
static Label jl1 = new Label("flow label1");
static Label jl2 = new Label("flow label2");
static Label jl3 = new Label("grid label3");
static Label jl4 = new Label("grid label4");
static Label jl5 = new Label("grid label5");
static Label jl6 = new Label("flow label6");
static Label jl7 = new Label("flow label7");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
// los layouts tambien se pueden asignar con la propiedad .set
// agregando controles a paneles
panel1.add(jl1);panel1.add(jl2);
panel2.add(jl3);panel2.add(jl4);panel2.add(jl5);
panel3.add(jl6);panel3.add(jl7);
// los panels se tienen que agregar a frame y frame su layout default es borderlayout
// abajo coordenadas de posicion en pantalla y tamaño en pixels
ventana.setBounds(100,100,200,400);
ventana.add(panel1,BorderLayout.NORTH);
ventana.add(panel2,BorderLayout.EAST);
ventana.add(panel3,BorderLayout.SOUTH);
ventana.pack(); ventana.setVisible(true);
//area de asociacion de objeto-eventos
ventana.addWindowListener( new WindowAdapter()
{ public void windowClosing(WindowEvent e){ System.exit(0); }} );
}; // termina main
} // termina clase
Corrida:
UNIDAD 2: APLICACIONES GRAFICAS
JAVA TEMA 12: JSPLITPANE
Lo siento JSPLITPANE solo existe en swing, no lo pueden usar en awt, se queda este JAVA TEMA ,para
que tengan algunos programas swing de referencia.
JsplitPane se usa para dividir con una barrita divisoria dos y solo dos componentes, mismos que pueden
ser alineados de izquierda a derecha o de arriba hacia abajo.
Sus propiedades mas importantes son:
Autoscrolls(), Background(), Border(), Bounds(), Cursor(), DividerSize(), Enabled(), Font(),
Foreground(),Insets(), Layouts(), Name(), Opaque(), Orientation(), Text(), ToolTipText(), Visible(),
VisibleRect().
Sus escuchadores mas importantes son:
WINDOW:
WindowActivated(),
WindowClosed(),
WindowClosing(),
WindowDeactivated(),
WindowOpened().
MOUSE:
MouseClicked(),
MouseDragged(),MouseEntered(),
MouseExited(),MouseMoved(),
MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped().
Text: TEXT_VALUE_CHANGED
Programa Ejemplo:
import java.lang.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class prog8 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static JFrame ventana= new JFrame();
// abajo se creando con orientacion vertical u horizontal
static JSplitPane panel1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
static JLabel jl1 = new JLabel("en split1 label1");
static JLabel jl2 = new JLabel("en split2 label2");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
//cargando splitpanel panel1 con sus dos componentes
panel1.add(jl1); panel1.add(jl2);
// cargando la ventana con splitpanel
ventana.getContentPane().add(panel1,BorderLayout.CENTER);
ventana.pack();
ventana.setVisible(true);
//area de asociacion de objeto-eventos
}; // termina main
} // termina clase
Corrida:
UNIDAD 2: APLICACIONES GRAFICAS
JAVA TEMA 13: JSCROLLPANE
Tambien es swing.
Cuando un componente ocupa mucho espacio en pantalla o contiene mucha información, un
JSCROLLPANE permite asociarle una pequeña vista o ventana deslizable o corrediza que permite solo que
se vea una parte de dicho componente.
Un JSCROLLPANE, tambien puede asociarse a otros tipos de panels que contengan muchos
componentes.
Algunas sus propiedades mas importantes son:
Autoscrolls(), Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(),Insets(), Name(),
Opaque(), ToolTipText(), ViewPortBorder(), Visible(), VisibleRect().
Sus escuchadores mas importantes son:
WINDOW:
WindowActivated(),
WindowClosed(),
WindowClosing(),
WindowDeactivated(),
WindowOpened().
MOUSE:
MouseClicked(),
MouseDragged(),MouseEntered(),
MouseExited(),MouseMoved(),
MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped().
Programa ejemplo:
import java.lang.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class prog9 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static JFrame ventana= new JFrame();
static JScrollPane panel1 = new JScrollPane();
static JTextField jt1 = new JTextField(80);
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
//cargando scrollpane panel1 con un componente grandote
panel1.setViewportView(jt1);
// cargando la ventana con el scrollpanel
ventana.getContentPane().add(panel1,BorderLayout.CENTER);
ventana.pack(); ventana.setVisible(true);
//area de asociacion de objeto-eventos
}; // termina main
} // termina clase
De momento el unico componente grandote a usar es el textfield con muchos caracteres, mas adelante se
estudiaran componentes mas apropiados para este tipo de panel.
Corrida:
UNIDAD 2: APLICACIONES GRAFICAS
JAVA TEMA 14: JTABBEDPANE
Tampoco estoy seguro si es de awt tambien, pero pueden intentarlo.
Es un componente que permite a un usuario estarse intercambiando entre grupos de componentes que se
encuentran en una especie de folders, cada uno de ellos con su propia pestaña(tab).
Solo se puede poner un componente en cada folder o tab, asi que de preferencia, si se puede poner un
panel en cada folder.
Tabs/componentes son añadidos a este panel usando los metodos addTab e insertTab.
Cada Tab(folder) tiene asociado un numero indice y el primer tab tiene como indice el numero 0 (cero).
Algunas de sus propiedades mas importantes son:
Autoscrolls(), Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(),Insets(), Name(),
Opaque(), SelectedComponent(), SelectedIndex(), TabCount(), TabPlacement(), TabRunCount(), Titles(),
ToolTipText(), Visible(), VisibleRect().
Algunos de sus escuchadores-eventos mas importantes son:
WINDOW:
WindowActivated(),
WindowClosed(),
WindowClosing(),
WindowDeactivated(),
WindowOpened().
MOUSE:
MouseClicked(),
MouseDragged(),MouseEntered(),
MouseExited(),MouseMoved(),
MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped().
Programa ejemplo:
import java.lang.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class prog10 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static JFrame ventana = new JFrame();
static JTabbedPane folders = new JTabbedPane();
static JPanel panel1 = new JPanel();
static JLabel jl1= new JLabel("label1");static JLabel jl2= new JLabel("label2");
static JLabel jl3= new JLabel("label3");static JLabel jl4= new JLabel("label4");
static JLabel jl5= new JLabel("label5");static JLabel jl6= new JLabel("label6");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
//cargando panel con sus componentes
panel1.add(jl1); panel1.add(jl2);
//cargando tabbedpane con un componente y titulo = componente
folders.add(jl3);
//cargando tabbedpane con un segundo componente usando indice
folders.add(jl4,1);
//cargando tabbedpane con un titulo y un componente
folders.add(" pestaña 1 ",jl5);
//Adds a component represented by a title and no icon Cover method for insertTab
folders.addTab("pestaña 2",jl6);
//cargando tabbedpane con panel1
folders.add("pestana panel",panel1);
// cargando la ventana con el tabbedpane
ventana.getContentPane().add(folders,BorderLayout.CENTER);
ventana.pack(); ventana.setVisible(true);
//area de asociacion de objeto-eventos
}; // termina main
} // termina clase
Corrida:
UNIDAD 2: APLICACIONES GRAFICAS
JAVA TEMA 15: JTOOLBAR
Las mismas dos notas anteriores y no han observado que en swing:
La ventana lleva un contentpane() intermedio.
no se ocupa un escuchador de ventana para cerrarla, solo un metodo mas de ventana (windows-on-close)
que proporciona swing.
Este componente es muy usado en programas de windows, su funcion es contener componentes que son
usados frecuentemente por el usuario, por ejemplo save, print, etc, para evitar que el usuario tenga que
accesar la barra de menu de arriba de la aplicacion.
Sus propiedades mas comunes son:
Autoscrolls(), Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(),Floatable(),
Insets(), Layout(), Margin(), Name(), Opaque(), Orientation(), ToolTipText(), Visible(), VisibleRect().
Sus escuchadores-eventos mas comunes son:
WINDOW:
WindowActivated(),
WindowClosed(),
WindowClosing(),
WindowDeactivated(),
WindowOpened().
MOUSE:
MouseClicked(),
MouseDragged(),MouseEntered(),
MouseExited(),MouseMoved(),
MousePressed(), MouseReleased().
KEY: KeyPressed(), KeyReleased(), KeyTyped().
Programa ejemplo:
import java.lang.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class prog11 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static JFrame ventana = new JFrame();
//creando toolbar con nombre y orientacion verticaly usando uno de sus 4constructores
static JToolBar jtb1 = new JToolBar("mi barrita",1 );
static JButton jb1 = new JButton("boton1 ");
static JButton jb2 = new JButton("boton2 ");
static JButton jb3 = new JButton("boton3 ");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
//cargando toolbar panel con sus componentes
jtb1.add(jb1); jtb1.add(jb2);jtb1.add(jb3);
// cargando la ventana con el toolbar
ventana.getContentPane().add(jtb1,BorderLayout.CENTER);
ventana.pack(); ventana.setVisible(true);
//area de asociacion de objeto-eventos
}; // termina main
} // termina clase
Corrida:
UNIDAD 2: CONTROL DE PROGRAMA
JAVA TEMA 16:JAVA JCOMBOBOX
SOLO EN SWING.
Existen muchas ocasiones en donde el usuario del programa tiene que proporcionar datos que provienen
de un conjunto finito y muy pequeño de posibles respuestas, esto significa que cada vez que se ejecute el
programa, el usuario estará proporcionando las mismas respuestas.
Ejemplo de esta clase de datos, son por ejemplos Municipio en BC, las posibles respuestas solo son
(Tecate, Tijuana, Mexicali, Ensenada, Rosarito), otro ejemplo es Sexo (Hombre, Mujer), etc.
Para situaciones como esta, existen componentes que permiten programar por adelantado las posibles
respuestas, y el usuario solo debe seleccionar la respuesta apropiada , en lugar de tener que escribirla.
Este componente ComboBox nos permite definir en primera instancia un conjunto de datos o valores
respuestas asociados a una caja de edición cualesquiera, así ahora el usuario tendrá la oportunidad de
seleccionar un dato del conjunto de datos o respuestas ya predefinido.
Este componente ComboBox tiene dos partes, una parte de encabezado, para poner el nombre del grupo
de respuestas( por ejemplo municipios, sexo, etc.).
La segunda parte es la lista de opciones o respuestas que se debe cargar al tiempo de diseño de la
ventana.
Al momento de ejecución del programa, toda la lista de respuestas, estarán a la vista del usuario, para que
este ultimo la seleccione.
Recordar que el usuario al momento de ejecución del programa, solo vera el encabezado, para seleccionar
su respuesta deberá apretar la flechita que esta a un lado del encabezado.
Ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class prog16 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static JFrame ventana= new JFrame();
static JPanel p1= new JPanel(); static JPanel p2= new JPanel();
static String[] lista={"municipios","tecate","tijuana","ensenada","tecate"};
static JComboBox municipios = new JComboBox(lista );
static JTextField jt1=new JTextField(15); static JButton jb1= new JButton("OK");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
ventana.getContentPane().setLayout(new GridLayout(2,0));
//cargando panel1 con combobox y definiendo titulo
p1.setLayout(new GridLayout(1,0));
//observar que index cero es el titulo (aunque es un elemento mas)
municipios.setSelectedIndex(0); p1.add(municipios);
//cargando segundo panel con jbutton y jtextfield
p2.add(jb1); p2.add(jt1);
ventana.getContentPane().add(p1); ventana.getContentPane().add(p2);
ventana.pack(); ventana.setVisible(true);
jb1.addMouseListener( new MouseAdapter()
{ public void mousePressed(MouseEvent e){
// la propiedad getselecteditem() regresa un objeto
jt1.setText(String.valueOf( municipios.getSelectedItem() ) );
}} );
}; // termina main
} // termina clase
Para procesar este componentes solo usar getselecteditem() comor regresa objeto, se puede recibir en
objeto de cualquier clase, ya como objeto con los metodos apropiado se puede mandar a variables u otros
tipos (recordar operador cast y conversiones)
TAREAS JAVA
1.- REEDITAR ALGUNOS DE LOS PROBLEMAS YA RESUELTOS, AGREGANDO ESTE COMPONENTE
EN LOS CASOS DE CAPTURAS QUE LO PUEDEN ADMITIR ( CAPTURAS DONDE YA SE TIENEN LAS
ENTRADAS SELECCIONADAS O CONOCIDAS DE ANJAVA TEMA NO).
UNIDAD 3: APLICACIONES EN RED APPLETS JSP SERVLETS
JAVA TEMA 1: INTRODUCCION APPLETS JSP SERVLETS
En los ultimos años se ha venido presentando una revolución en el terreno de la
construccion de programas o aplicaciones.
Nuevas tecnologias y tecnicas de programación se han venido desarrollando para
aprovechar el nuevo y moderno entorno computacional existente.
Este nuevo entorno empieza a popularizarse a mediados de la decada de los 80's cuando
en el terreno de las computadoras personales empiezan a aparecer una serie de sisJAVA
TEMA s operativos que hacian enfasis en la creación de redes de computadoras
personales.
En la actualidad y a partir de mediados de los 90's muchas de estas nuevas redes se
empiezan a integrar a la red de redes ya existente, el internet.
Actualmente mas de 100 millones de computadores personales y mas de 300 millones de
usuarios de las mismas estan o son parte de alguna red que esta integrada a internet y
los numeros siguen creciendo exponencialmente.
El nuevo entorno de programación enfatiza la construcción de programas, aplicaciones o
sisJAVA TEMA s de información completos que son puestos y ejecutadas en maquinas
especiales llamados servidores, en estos servidores un programa especial llamado
servidor de paginas (web server) se encarga de interactuar con los diversos usuarios de la
red o redes que puede alcanzar, es decir hay servidores (con su propio web server) que
puede atender a una red interna pequeña o una red de una empresa que este dispersa
geograficamente o a todas las maquinas que estan en la red de internet.
Este proceso de interaccion con los usuarios remotos de esas maquinas, se lleva a cabo
principalmente a travez de paginas html y gran parte del proceso de programación actual
se centra en construir paginas.html que se mandan al web server, para que este ultimo lo
mande al usuario que la este requiriendo.
Existen muchas ventajas con este modelo, una de las primeras es que un peqeño
programa o aplicación puede ser usado por millones de personas que tengan acceso al
servidor y su servidor de paginas.
El lenguaje de programación java fue desarrollado e implementado por la empresa sun
para facilitar la construcción de programas y aplicaciones para este entorno, de hecho las
primeras especificaciones y compiladores de java fueron creados en 1995.
En esta unidad se ven de manera basica tres de los tipos de aplicaciones mas comunes
que se pueden desarrollar en java para este entorno.
Sin embargo antes de empezar con ellas ( applets servlets jsp ) se debe recordar que asi
como ha ido evolucionando internet 1 (ya esta en puerta internet 2), existen otra serie de
aplicaciones en java que siguen y facilitan este modelo, entre ellas tenemos beans java
beans rmi ejb etc. que mas adelante en cuanto se actualize de nueva cuenta este material
ya se incluiran.
UNIDAD 3: APLICACIONES EN RED APPLETS
JAVA TEMA 2: JAVA APPLET Y JAPPLET
Applet y JApplet son aplicaciones mas parecidas a Frame y JFRAME que consola, pero
que es enviada embebida o empotrada en una pagina html a una computadora o pc
remota, para que esta ultima lo ejecute.
En general un applet es un pequeño programa en java, que es ejecutado remotamente,
existen algunas restricciones acerca de los applets o programitas que se pueden mandar
y ejecutar en maquinas remotas, por ejemplo no se pueden construir o mandar applets
que trabajen con el disco duro de la maquina remota, etc.
Como se observa de todo lo antes dicho, no solo se trata de crear un applet.java y
compilarlo a applet.class, se tendra que crear tambien una pagina.html que tenga una liga
y contenga el applet.class
Ademas de la pagina.html y applet.class y todos los applets*.class que se generere al
compilarlo con javac, se tendran que poner en un servidor de paginas (web server) para
que sea el webserver quien mande la pagina, el applet y todas sus clases, al usuario o la
maquina remota, para que sea esta ultima sea quien lo compile y ejecute.
Es importante recordar que en la maquina remota, su browser debera tener actualizadu su
maquina virtual de java, para internet-explorer actualizarlo con la opcion tools, windows
update y bjar e instalar la maquina virtual de java mas actualizada que se encuentre.
En resumen para resolver de manera adecuada este problema de applets se ocupa lo
siguiente:
1.- Un programa o applet.java compilado a programa o applet.class, esto es sencillo y es
parte de lo que se estudia en los siguientes JAVA TEMA s.
Este applet se compila normalmente con javac y no borrar todos los diferente .class que
se generen.
2.- Una pagina html que contenga una referencia o liga que active el applet class, esta
pagina.html tambien se hace con el mejor editor de lenguajes de programación del mundo
el notepad.
3.- Ya creada la pagina y compilado el applet se puede ejecutar localmente, para probarlo,
usando un pograma que se llama appletviewr .exe que se encuentra en el directorio bin
de jdk1.3, copiarlo al folder donde estan la pagina html y las clases que genero el javac
con el applet
Para ver el applet en ejecución dentro de msdos y en el folder donde esta todo ejecutar la
orden:
C:>appletviewer pagina.html
4.- Tambien se ocupara un servidor de paginas ( web server ) que es un programa que
siempre esta corriendo o siendo ejecutado constantemente en la maquina servidora de
paginas, y que su trabajo es almacenar las paginas.html y applets del usuario y estarlas
mandando a las maquinas o pc remotas que esten accesando el servidor de paginas
fisico. maquina).
5.- Ya creada la pagina, las clases y bien probado el applet, hacer un ftp ( revisar que en
internet options advanced, este prendida la opcion ftp pasivo) a su
www.susitio.programacionfacil.com y subir todo, excepto el applet.java (otra vez, no
olvidar subir todas las clases intermedias).
UNIDAD 3: JAVA APLICACIONES EN RED
JAVA TEMA 3: JAVA APPLET Y JAPPLET CONTINUACION
JApplet comparte muchos elementos comunes con Jframe y Jwindows en virtud de que
todos estos descienden de swing entre otros elementos a considerar, estan que para
añadir controles, layouts, etc, se deberan hacer al contenpane() ya descrito y no
directamente a el objeto de tipo Japplet.
Sin embargo, en la actualidad la ejecución de un applet corre a cargo de la pc que la
recibe y lamentablemente de sus maquinas virtuales de java instaladas, asi que en
realidad mientras microsoft no actualize su maquina virtual para que reconozca
swing.japplet, de momento solo reconoce awt.applet, los applets que se construyen en
este curso son de awt.applet y no de swing.japplet(que por cierto estan mejores)
Mejor un ejemplo:
import java.awt.*; import java.applet.*; import java.awt.event.*;
public class prog6 extends Applet {
Panel p1; Label l1; TextField t1, t2; Button b1;
public void init() {
p1= new Panel(); p1.setLayout(new GridLayout(0,2) ); l1 = new Label("edad :");
t1= new TextField(15); t2=new TextField(15); b1= new Button("OK");
p1.add(l1);p1.add(t1);p1.add(t2);p1.add(b1);
// abajo no se puso el objeto a la propiedad, porque el default es el propio prog6 o applet
setLayout(new BorderLayout()); add(p1, BorderLayout.CENTER);
b1.addMouseListener(new MouseAdapter()
{public void mousePressed(MouseEvent e) {
double edad= Double.parseDouble(t1.getText());
edad = edad * 12;
t2.setText(String.valueOf(edad) ); } } );
} // cierra init
} // cierra clase
Notas:
Solo se usa awt
un applet no lleva main() lleva un metodo llamado init()
La pagina que lo llama y se lo lleva a la pc remota, lleva el siguiente codigo:
<HTML>
<HEAD>
<TITLE>MI PRIMER APPLET</TITLE>
</HEAD>
<BODY>
<APPLET CODE="prog6" width=200 height=200></APPLET>
</BODY>
</HTML>
Como se observa la directiva que lo activa es <APPLET CODE, los otros dos parametros
son la altura y anchura de la ventana que se creara en el browser y que ocupara el applet.
Recordar que la pagina.html y todas las clases incluso las intermedias que genero el
compilador javac, deberan estar juntas en el directorio principal de su sitio.
TAREAS JAVA
1.- LOS MISMOS DE JAVA JFRAME
UNIDAD 3: APLICACIONES EN RED
JAVA TEMA 4: JAVA SERVLETS
Java Servlets son programas en java que son precompilados por el programador,
entonces puestos en el servidor de paginas (web server) que los carga, compila y ejecuta
al momento que un usuario remoto lo solicita, generalmente a travez de una pagina html.
Es de tomar muy en cuenta que cuando el servidor de paginas carga y ejecuta un servlet,
lo va mantener activo en memoria en su propio proceso por toda la vida del servidor de
paginas ( es decir mientras no se resetee el servidor).
Es por esta situación que los servlets presentan ventajas y desventajas, la ventaja mas
aparente es que si otros usuarios piden el mismo servlet, el servidor de paginas le
respondera muy rapidamente, la desventaja aparente, es que si el servlet es muy
especializado o de poco uso, estara vivo en memoria y consumiendo los recursos del
computador, es por esta razón que se debera seleccionar muy cuidadosamente cuales
programas o aplicaciones se deberan construir con esta tecnologia de servlets.
Otra elemento muy importante a tomar en cuenta en este JAVA TEMA , es que servlets y
jsp (java server pages) interactuan con los usuarios a travez de paginas html, es decir no
son programas visuales como JFRAME y APPLETS que interactuan por medio de
ventanas o fromas visuales.
Nuestra interfase con los usuarios es a travez de paginas html, es decir una pagina html
proporcionara los datos al servlet y tambien lo activa, el servlet recibe los datos, los
procesa y le responde al usuario con otra pagina html.
Empezamos construyendo un programa normal de entrada/salida, el mas elemental de
todos, de convertir la edad en años de una persona a meses.
Primero se debe construir la pagina.html que sera la primera que el usuario vera, la
cargara con sus datos y al activarla por medio de su boton de ordenes correspondiente,
mandara los datos al servlet y lo activara.
a. Pagina en execucion
b.
c. Codigo.html
<HTML>
<H1>MI PRIMER SERVLET</H1><BR>
<FORM
ACTION=http://www.programacionfacil.com:9090/servlet/susitio.prog7
METHOD=POST>
NOMBRE<INPUT TYPE=TEXT NAME=NOMBRE><BR>
EDAD<INPUT TYPE=TEXT NAME=EDAD><BR>
<INPUT TYPE=SUBMIT VALUE="OK">
</FORM>
</HTML>
En particular, a este tipo de paginas html, se les conoce como formas, proque llevan una
instrucción FORM ACTION y algunos componentes visuales, como se ve en la corrida.
La parte importante de la forma, esta delimitada por <FORM ACTION . . . </FORM>
En html, INPUT TYPE=text,submit,radio,checkbox,submit, etc, son equivalentes a
controles visuales, en este ejemplo se estan usando 2 tipos de input type, dos controles
de texto y un control de orden o comando, cada uno de ellos lleva sus propiedades, por
ejemplo los de texto llevan un nombre y el de orden un mensaje ok.
Ccuando el usuario carga los datos en las cajas de text y apachurra(se oye mejor que
click) en el control OK, se activa la acción de la forma (FORM ACTION) que consiste en
mandar o postear(POST) al servidor los datos de las cajas de texto y la orden de que se
active el "/servlet/"(esto es palabra reservada) prog7
UNIDAD 3: JAVA APLICACIONES EN RED
JAVA TEMA 5: JAVA SERVLETS (CONTINUACION)
EL java servlet que se activa, basicamente debe tomar los datos que le llegan de la
forma.html que lo mando llamar, despues procesar los datos y al final construir una
pagina.html para regresarle la información al usuario.
El codigo.java es:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class prog7 extends HttpServlet
{
/**
* metodo HTTP POST para construir una pagina activa
*/
public void doPost (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter pagina;
String nombre=request.getParameter("NOMBRE");
String temp=request.getParameter("EDAD");
int edad = Integer.parseInt(temp);
edad=edad*12;
response.setContentType("text/html");
pagina = response.getWriter();
pagina.println("<HTML>");
pagina.println(nombre+" tu tienes :"+edad+"meses");
pagina.println("</HTML>");
pagina.close();
};
public void destroy(){super.destroy();};
}
notas:
•
•
•
•
se crea prog7 y se deriva de clase httpservlet
Un servlet no empieza con main() como JFRAME ni con init() como los applets
Un servlet lleva y empieza con un metodo dopost(parametros) o
doget(parametros), la diferencia entre dopost() y doget() es que este ultimo incluye
de regreso no nada mas los datos que manda la forma.html sino tambien toda el
url(http://www....), es por eso que es mas usual usar post en forma.html y dopost()
en prog.java
Los parametros son request y response que son objetos especiales del servidor,
se utilizan para request=objeto que se usa para pedir datos y response=objeto que
se usa para responder con pagina(en unidad mas adelante se explica mas
ampliamente estos objetos)
• Se crea un objeto pagina de tipo impresora
• Los dos datos que llegan de form.html vienen como strings, se deben recibir en
variables de tipo strings y de ser necesario convertirlas a variables numericas
normales, observar que se esta usando el objeto request y su metodo
getparameter() para pedir o requerir la string.
• Empieza la respuesta, usando el objeto response e indicandole al servidor que
construya una pagina text/html
• Apuntamos nuestro objeto pagina al response.getwriter()(constructor de paginas
del servidor)
• Cargamos pagina.println() con el codigo html que el servidor usara para construir
la pagina que le devolvera al ususario
• Cerramos el objeto pagina
• Destroy() se usa para eliminar de memoria el servlet que se activo y no quede vivo
permanentemente.
• Este programa se debe compilar con javac y la clase asi como la pagina.html que
lo llama se debera ftp al servidor de paginas.
La pagina de respuesta es:
TAREAS JAVA SERVLETS o JAVA SERVLET
5 programas de entrada/salida de los que se ven en el modelo de solución
UNIDAD 3:JAVA APLICACIONES EN RED
JAVA TEMA 6: JAVA JSP ( JAVA SERVER PAGE )
Java Server Page es otra de las nuevas tecnologias para tratar de hacer mas eficiente el
modelo cliente-servidor y sobre todo la construcción de sisJAVA TEMA s de comercio
electronico.
En este modelo, una pagina html tambien incluye codigo en java, es el servidor de
paginas quien al estar mandando la pagina a la pc remota la compila y la convierte en un
servlet.
Esta tecnologia combina en una sola aplicación, tanto codigo html como codigo java.
El proceso de crear un jsp, es sencillo se crea un achivo normal con notepad combinando
codigo html y codigo java, se graba con extension prog8.jsp, se ftp al servidor y listo.
Cuando el usuario requiere un jsp, el servidor lo carga, lo compila, lo convierte a servlet y
manda la pagina resultante al usuario remoto.
Empezamos con un pequeño ejemplo: prog8.jsp
<HTML>
hola hoy es:<BR>
<%= new java.util.Date() %>
</HTML>
solo grabarlo como prog8.jsp (ojo con notepad y su .txt), luego ftp a
www.susitio.programacionfacil.com
y llamarlo con www.programacionfacil.com:1080/susitio/prog8.jsp
TAMBIEN YA HAY UN CURSO COMPLETO DE JAVA JSP AQUI EN
WWW.PROGRAMACIONFACIL.COM
Para insertar codigo java dentro de una pagina html, se deberan usar una serie de tags o
delimitadores ( en el ejemplo se esta usando <%= una sola instrucción de java %> )
donde cada uno de ellos tiene un proposito definido.
UNIDAD 3: APLICACIONES EN RED
JAVA TEMA 7: JAVA JSP CONTINUACION
Recordar que para todos los modelos vistos applets, servlets y ahora jsp, y los que faltan
por ver java beans, ejb, etc, se ocupa que el servidor de paginas (web server) los soporte,
es decir no nada mas basta hacer un servlet o un applet o un jsp subirlo a un servidor y
presto ya todo el mundo lo puede usar.
En general, el web server lo que hace es convertir el codigo en java en un servlet, esto al
tiempo que una pc remota hace un pedido de una pagina.jsp
Para empotrar el codigo de java en una pagina html y convertirla en una pagina jsp, se
deberan utilizar ciertos tags o directivas, de las cuales existen las siguientes:
1.- Comentarios <%-- comentario --%> Ignorados cuando jsp es convertida a servlet y
muy utiles para documentar nuestros programas jsp.
2.- Declaracion <%! Variables, metodos, etc %> Recordar que todo buen programa,
empieza declarando variables.
Cada variable debera ser declarada de acuerdo a las reglas normales de java.
Cada declaración termina con punto y coma (;)
Toda variable o metodo usado en el programa debera ser declarada primero.
3.- Instruccion <%= instruccion %> Para poner una y solo una instrucción de java, ademas
recordar que ya existen aparte ciertas instrucciones o variables predefinidas, tales como
request, response, out, session, application, config, and pageContext( tambien disponibles
en scriptlets).
Recordar ademas que cuando se use <%= una sola instrucción %>, la instrucción no debe
terminar con punto y coma.
Ejemplo:
<html>
<%! int base = 5, altura = 7 ; %>
El area del triangulo es <%= base * altura / 2.0 %>
</html>
Se estan usando los dos primeros tags vistos, el de declaración y el de instrucción.
Grabarlo como prog9.jsp, ftp a su directorio normal y llamarlo desde su sitio como
www.programacionfacil.com:9090/susitio/prog.jsp
4.- Scriptlet <% todo un programa completo %> Un scriptlet es un grupo de instruciones
de java, como se deduce de esta definición, se usara muchos scriptltes en nuestras jsp.
Aqui si, las instucciones deben terminar con punto y coma
Un bloque de instruciones <% bloque java %>, puede empezar (<%) en un scriptlet y
terminar en otro scriptlet, pero asegurarse de que todos los scriptlets se abran y se
cierren.
Ejemplo:
<html>
<%! int base = 5, altura = 7 ; %>
<% base * altura / 2.0;
new java.util.Date();
System.out.println( "hola mundo" ); %>
</html>
Ejemplo, tambien se puede estarse intercambiando entre java y html cerrando y abriendo
el scriplet, ejemplo;
<html>
<%! int base = 5, altura = 7 ; %>
<% base * altura / 2.0;
new java.util.Date(); %>
<BR> Hola HTML
<% System.out.println( "de regreso a scriplets" );
base + altura; %>
</html>
5.- Page Directive <%@ page atributo="valor" %> Instrucciones generales acerca de la
pagina y java.
Su formato es atributo="valor" y pueden ser las siguientes: import="package.class",
contentType="MIME-Type",
isThreadSafe="true|false",
session="true|false",
buffer="sizekb|none", autoflush="true|false", extends="package.class", info="message",
errorPage="url", isErrorPage="true|false", language="java".
De aqui una de las mas comunes es:
<%@ page import="java.util.*" %>
<HTML>
Hoy es <%= new Date() %>
</HTML>
6.- Include Directive <%@ include file="url" %> Se usa para incluir achivos en la pc que
compila la jsp, esto se realiza al tiempo que la jsp es convertida en servlet, el url debe ser
relativo.
Para este caso tambien es valido:
jsp:include action para incluir el archivo al tiempo de request por parte de un usuario
remoto
NOTA: HASTA AQUI SON LAS DIRECTIVAS O DELIMITADORES MAS COMUNES EN
PROGRAMAS O APLICACIONES SENCILLAS, LOS DELIMITADORES DE MAS ABAJO
SE USARAN EN JAVA TEMA S MAS ADELANTE
7.- jsp:include Action <jsp:include page="URL relativo" Flush="true"/>
Incluye el archivo al tiempo de request, no al tiempo de conversion jsp-servlet, como el
caso 5.
8.- jsp:useBean Action <jsp:useBean att=val*/> o <jsp:useBean att=val*> ...
</jsp:useBean> Encuentra o construye un Java Bean. Sus atributos son: id="name",
scope="page|request|session|application", class="package.class", type="package.class",
beanName="package.class"
9.- jsp:setProperty Action <jsp:setProperty att=val*/> Crea o define las propiedades
generales de un JAVA BEAN ya sea en forma explicita o como un parametro que llego de
un request.
Sus
atributos
són:
name="beanName",
property="propertyName|*",
param="parameterName", value="val".
10.-jsp:getProperty Action <jsp:getProperty name="propertyName" value="val"/> Captura
o despliega las propiedades de un BEAN.
11.- jsp:forward Action <jsp:forward page="URL relativo"/> Manda llamar o enlazar otra
pagina.
UNIDAD 3: APLICACIONES EN RED
JAVA TEMA 8: JAVA JSP CONTINUACION
Empezemos recordando que ya existen en java jsp cuatro variables predefinidas que son:
request, response, session y out, mismas que se pueden usar directamente para construir
la pagina.jsp sin necesidad de tener que importar la libreria correspondiente, es decir solo
hay que importar librerias exoticas como math, etc.
Bueno empezamos con la pagina.html que captura los datos y manda llamar la pagina.jsp
ejemplo:
<HTML>
<BODY BGCOLOR="AQUA", TEXT="RED">
<FORM
ACTION=http://www.programacionfacil.com:9090/susitio/prog.jsp
METHOD="POST">
DAME TU EDAD<BR>
<INPUT TYPE="TEXT" NAME="EDAD" SIZE=30>
<INPUT TYPE="SUBMIT" VALUE="OK">
</FORM>
</BODY>
</HTML>
Como se observa es una pagina normal de captura, con su action apuntando a la
pagina.jsp y su metodo post
En cuanto a la pagina.jsp, es la siguiente:
<%! int edad; %>
<HTML><BR>
<% edad = Integer.parseInt(request.getParameter("EDAD"));
edad=edad*12;
out.println("tu tienes "+edad+" meses"); %>
<BR> </HTML>
Tan sencilla como un scriptlet y un uso racional de las variables predefinidas.
NOTA: En general el manejo de formas en jsp de manera mas normal es a travez de
beans que son pequeñas clases precompiladas muy parecidas a un registro o estructura
que almacenan información proveniente de la forma de captura y las pueden pasar a otras
formas, sin embargo el uso de beans (no confundirlos con java beans), se deja de tarea al
lector o esperarse a la actualización de este JAVA TEMA , el siguiente semestre.
POBLEMAS SUGERIDOS
TAREAS JAVA JSP CONSTRUIR 5 DE LOS PROBLEMAS DEL JAVA TEMA DE
MODELO DE SOLUCION
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 1: INTRODUCCION JAVA
En JAVA instrucciones de control de programa permiten alterar la secuencia normal de
ejecución de un programa.
Estas instrucciones en java se dividen en tres grandes categorías: Instrucciones
Condicionales que en Java se implementan con las instrucciones if() y switch().
Instrucciones de ciclos con for(), while(), do-while().
Muchas de ellas con sus correspondientes componentes visuales.
UNIDAD 4: JAVA CONTROL DE PROGRAMA
JAVA TEMA 2: JAVA INSTRUCCIONES CONDICIONALES
Una de las mas poderosas características de cualquier computador es la capacidad que
tienen de tomar decisiones.
Es decir al comparar dos alternativas diferentes el computador puede tomar una desición,
basándose en la evaluación que hace de alguna condición.
Ejemplos de instrucciones condicionales:
a)
si sueldo > 3000
desplegar "rico"
si no
desplegar "pobre"
fin-si
b)
si sexo = 'm'
imprime mujer
si no
imprime hombre
fin-si
De los ejemplos observar que los caminos que tome el computador dependerán de la
evaluación que el computador hace con y de la condición.
Todo lenguaje de programación como java debe tener instrucciones que permitan formar
condiciones e instrucciones que pueden evaluar esas condiciones.
Pero recordar que lenguajes visuales de igual forma tienen componentes que permiten del
mismo modo al usuario tomar decisiones, incluso directamente en pantalla, es decir
existen los llamados componentes de selección y decisión.
El formato general de una instrucción condicional es:
Como se observa son cuatro partes bien diferenciadas entre si;
• La propia instrucción condicional en si
• La condición
• El grupo cierto de instrucciones
• El grupo falso de instrucciones
Cuando el computador evalúa una condición, el resultado de esa evaluación solo es
evaluado de dos maneras o la condición es CIERTA o la condición es FALSA.
Esto dependerá del valor que tenga asignado o que se haya capturado para la variable
que está en la condición, por ejemplo si se capturo 6000 en sueldo en el ejemplo a)
entonces el computador indicaría que la condición es CIERTA pero en otro caso, si a la
variable sueldo primero se le asigno un valor de 250 entonces el computador indicaría que
la condición, es FALSA.
Ya dependiendo del resultado de la evaluación, el computador ejecuta las instrucciones
contenidas en la parte CIERTA o en la parte FALSA de la condición.
Para nuestros primeros programas en java empezamos el análisis por la CONDICION.
UNIDAD 4: JAVA CONTROL DE PROGRAMA
JAVA TEMA 3: JAVA CONDICIONES SIMPLES
En general todas las condiciones simples se forman con;
variables operadores relaciónales constante o var.
sexo = m
sueldo > 300,000
Una condición simple se define como el conjunto de variables y/o constantes unidas por
los llamados operadores relaciónales.
Los operadores relaciónales que reconoce el lenguaje JAVA son:
Operador Significado
== Igual que
> Mayor que
< Menor que
>= Mayor o igual que.
<= Menor o igual que.
!= No es igual que, o es diferente que.
Observar y tener cuidado sobre todo con el operador de igualdad(=), y el operador
relacional de comparación por igualdad(==), es decir;
sueldo = 500 --> Se esta pidiendo cargar o asignar la variable sueldo con el valor 500
sueldo == 500 --> Se esta pidiendo que se compare el valor o dato que ya esta en la
variable sueldo, contra el numero 500.
En java jsp, java applets, java servlets, java consola, solo este ultimo formato es valido
dentro de una condición, en una instrucción condicional.
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 4: INSTRUCCION IF JAVA
Es la instrucción condicional mas usada en los diversos lenguajes de programación, su
formato completo y de trabajo en JAVA es :
cargar o asignar la variable de condición;
if (condición)
{ grupo cierto de instrucciones;}
else
{ grupo falso de instrucciones; };
Primus.- Observar donde van y donde no van los puntos y comas;
Secundus.- La condición van entre paréntesis ;
Tertius.- Si un if no ocupa un grupo falso de instrucciones, entonces no se pone el else, y
la llave antes del else si terminaría con punto y coma.
Ejemplos:
if ( sueldo >= 500 )
{ desplegar "Rico"; }
else
{ desplegar "Pobre"; };
Recordar que en java tenemos muchos tipos de aplicaciones ( consola, Jfame, Applets,
servlets, jsp) entonces se debera adaptar este formato de if a la aplicacion
correspondiente.
Por unica y ultima vez en está unidad, se construye los programas de estos tipos de
aplicaciones con el ejemplo de arriba, en el siguiente JAVA TEMA .
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 5: IF() CONTINUACION
a. Aplicacion en consola:
b.
import java.io.*;
class prog9 {
public static void main(String[] args) {
int sdo=0;
BufferedReader
teclado
=
InputStreamReader(System.in));
// teclado es un objeto que lee una string
new
BufferedReader(new
try { System.out.println("dame sueldo: ");
sdo = Integer.parseInt(teclado.readLine());
} catch(IOException varerror) {System.out.println("error");}
if( sdo>500 )
{ System.out.println("RICO");}
else { System.out.println("POBRE"); };
} // cierra main
} // cierra clase
No olvidar set classpath=
c. Aplicacion Visual
d.
import java.lang.*; import java.awt.*; import java.awt.event.*;
import javax.swing.*;
public class prog10 { //declaracion, creacion e inicializacion de componentes,
// objetos y variables
static JFrame ventana= new JFrame();
static JLabel jl1 = new JLabel("dame sueldo");
static JTextField jt1 = new JTextField(12);
static JButton jb1 = new JButton("evaluar");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
ventana.getContentPane().setLayout(new FlowLayout());
ventana.getContentPane().add(jl1);
ventana.getContentPane().add(jt1);
ventana.getContentPane().add(jb1);
ventana.pack();
ventana.setVisible(true);
//area de asociacion de objeto-eventos
jb1.addMouseListener( new MouseAdapter()
{ public void mousePressed(MouseEvent e)
{ int sdo = Integer.parseInt(jt1.getText());
if (sdo > 500) { jt1.setText("RICO"); }
else { jt1.setText("POBRE"); }
} } );
}; // termina main
} // termina clase
no olvidar set classpath=
e. codigo Applet
f.
import java.awt.*; import java.applet.*; import java.awt.event.*;
public class prog11 extends Applet {
Panel p1; Label l1; TextField t1, t2; Button b1;
public void init() {
p1= new Panel(); p1.setLayout(new GridLayout(0,2) ); l1 = new Label("sueldo:");
t1= new TextField(15); t2=new TextField(15); b1= new Button("OK");
p1.add(l1);p1.add(t1);p1.add(t2);p1.add(b1);
// abajo no se puso el objeto a la propiedad, porque el default es el propio prog11 o
applet
setLayout(new BorderLayout()); add(p1, BorderLayout.CENTER);
b1.addMouseListener(new MouseAdapter()
{public void mousePressed(MouseEvent e) {
int sdo= Integer.parseInt(t1.getText());
if (sdo>500) {t2.setText("RICO");}
else {t2.setText("POBRE");};
} } );
} // cierra init
} // cierra clase
No olvidar ftp todas las clases del javac a su sitio
g. Codigo java Servlet ( aqui se ocupa form.html para captura y prog12.java para
procesar y desplegar )
h.
Codigo html:
<HTML>
<FORM ACTION=http://127.0.0.1:9090/servlet/prog12 METHOD=POST>
DAME SUELDO <INPUT TYPE=TEXT NAME=SUELDO><BR>
<INPUT TYPE=SUBMIT VALUE=EVALUAR>
</FORM>
</HTML>
Codigo java:
import java.io.*; import javax.servlet.*; import javax.servlet.http.*;
public class prog12 extends HttpServlet
{ public void doPost (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{ PrintWriter pagina;
String temp=request.getParameter("SUELDO");
int sueldo = Integer.parseInt(temp);
response.setContentType("text/html");
pagina = response.getWriter();
pagina.println("<HTML>");
//empezar la pagina y poner aqui la condicion
if(sueldo > 500) {pagina.println("RICO");}
else {pagina.println("POBRE");};
//no olvidar terminar y cerrar la pagina
pagina.println("</HTML>");
pagina.close();
};
public void destroy(){super.destroy();};
}
Recordar compilar con javac y la clase ftp al directorio servlets de su
sitio.programacionfacil.com
i. codigo JAVA JSP
Tambien se ocupa form.html y prog13.jsp
CODIGO HTML
<HTML>
<FORM ACTION=http://127.0.0.1:9090/prog13.jsp METHOD=POST>
DAME SUELDO <INPUT TYPE=TEXT NAME=SUELDO><BR>
<INPUT TYPE=SUBMIT VALUE=EVALUAR>
</FORM>
</HTML>
CODIGO JSP
<%! int sueldo; %>
<HTML>
<%
sueldo = Integer.parseInt(request.getParameter("SUELDO"));
if (sueldo > 500){ out.println("RICO");}
else {out.println("POBRE"); };
%>
</HTML>
html y jsp , hacer ftp y ponerlos juntos en su sitio.programacionfacil.com normal
TAREAS JAVA CONSOLA APPLETS JSP SERVLET
1.- Capturar un numero cualesquiera e informar si es o no es mayor de 100 (consola)
2.- Capturar un numero entero cualesquiera e informar si es o no es múltiplo de 4
( recordar el operador mod(%), analizado en el JAVA TEMA de operadores aritméticos).
( java servlet )
3.- Capturar los cinco datos mas importantes de un Empleado, incluyendo el sueldo diario
y los días trabajados esto en un panel, desplegarle su cheque semanal en un segundo
panel solo si ganó mas de $500.00 en la semana, en caso contrario desplegarle un bono
de despensa semanal de $150.00 en un tercer panel. ( java jframe )
4.- Capturar los datos mas importantes de un estudiante incluyendo tres calificaciones,
todo esto en una ventana, una segunda ventana que contiene una boleta de calificaciones
es llamada si el estudiante es de la carrera de medicina, en caso contrario una tercera
ventana despliega un oficio citando a los padres del estudiante a una platica amistosa con
los maestros dela escuela. ( java applet )
5.- Capturar los datos mas importantes de un producto cualesquiera, incluyendo cantidad,
precio, etc., desplegar una orden de compra, solo si el producto es de origen nacional, en
caso contrario no hacer nada.( java jsp )
UNIDAD 4: JAVA CONTROL DE PROGRAMA
JAVA TEMA 6: JAVA CONDICIONES COMPUESTAS
En muchas ocasiones es necesario presentar mas de una condición para su evaluación al
computador.
Por ejemplo que el computador muestre la boleta de un alumno, si este estudia la carrera
de medicina y su promedio de calificaciones es mayor de 70.
Una condición compuesta se define como dos o mas condiciones simples unidas por los
llamados operadores lógicos.
Los operadores lógicos que java reconoce son;
operador significado
&& -------> y
|| -------> 0
! -------> NO
Para que el computador evalúe como CIERTA una condición compuesta que contiene el
operador lógico "y", las dos condiciones simples deben ser ciertas.
Para que el computador evalúe como CIERTA una condición compuesta que contiene el
operador lógico "o", basta con que una de las condiciones simples sea cierta.
La cantidad total de casos posibles cuando se unen dos o mas condiciones simples
esta dada por la relación
donde n = cantidad de condiciones, la primera mitad de ellos
ciertos y la segunda mitad falsos.
Ejemplo, si formamos una condiciona compuesta con dos condiciones simples y el
operador lógico "y", la cantidad total de casos posibles serian
la siguiente tabla de verdad.
Tabla de verdad con "y"
1cs 2cs Eval
CCC
CFF
FCF
FFF
, y se puede construir
La evaluación final, se obtiene usando la regla anteriormente descrita para una condición
compuesta, que contiene el operador "y".
Esta tabla significa lo siguiente;
1.- Cualquiera que san la cantidad de datos procesados,, siempre caerá en uno de estos
cuatro posibles casos.
La tabla de verdad para una condición compuesta con "O" es la sig.;
1cs 2cs Eval
CCC
CFC
FCC
FFF
Como se observa, una condición compuesta con "O", es menos restrictiva, o el 75% de
los casos terminarían ejecutando el grupo CIERTO de instrucciones de la instrucción
condicional.
Construir una tabla de verdad para una condición compuesta de tres o mas condiciones
simples, es también tarea sencilla, solo recordar que;
1.- La cantidad posible de casos es
casos posibles, la mitad empiezan con Cierto y
la otra mitad empiezan c con falso.
2.- Para evaluar esta condición triple, primero se evalúan las dos primeras incluyendo su
operador, bajo las reglas ya descritas y luego se evalúa, el resultado parcial contra la
ultima condición, y ultimo operador, para obtener la evaluación final.
Ejemplo una condición compuesta de tres condiciones simples, donde el primer operador
lógico es el "y" y el segundo operador lógico es el "O", daría la siguiente tabla de verdad.
1cs 'y' 2cs Eva Parcial 'o' 3cs Eva final
CCcCc
CCcFc
CFfCc
CFfFf
FCfCc
FCfFf
FFfCc
FFfFf
En la practica, cada condición simple debe ir encerrada en su propio paréntesis y las dos
condiciones simples también deben encerrarse entre sus propios paréntesis, como en el
siguiente ejemplo;
if((sueldo> 500)%%(departamento=="VENTAS") )
{ // aquí se construye una panel o ventana
// por ejemplo que despliegue su cheque semanal }
else
{ // aquí se construye o despliega un panel o ventana
// que despliegue por ejemplo un bono de despensa
// o un oficio de motivación } ;
• Recordar, cada condición simple debe estar entre paréntesis y las dos condiciones
simples también deben estar entre paréntesis.
• Observar donde se deben incluir los puntos y comas y donde no se deben incluir
los puntos y comas.
TAREAS JAVA( usando modelos diferentes consola jframe applet jsp servlets )
1.- Construir un programa que capture un numero cualesquiera e informe si es o no es
mayor de 50 y múltiplo de tres. ( solo escribir el mensaje de respuesta de manera muy
clara y esto resuelve el problema ) (consola)
2.- Construir un programa que indique si un numero es un par positivo. ( java applet)
3.- Capturar los datos de un producto incluyendo su cantidad en existencia, construir un
panel que despliegue una orden de compra si la cantidad en existencia del producto es
menor que el punto de reorden, o si el origen del producto es nacional.( java servlet )
4.- Construir el programa del ejemplo del empleado, pero construirlo con tres ventanas, la
del empleado, la del cheque y la del bono.( java jsp )
UNIDAD 4: JAVA CONTROL DE PROGRAMA
JAVA TEMA 7: JAVA INSTRUCCION SWITCH ()
También existen ocasiones o programas donde se exige evaluar muchas condiciones a la
vez, en estos casos, o se usan una condición compuesta muy grande o se debe intentar
convertir el problema a uno que se pueda resolver usando la instrucción switch();
La instrucción switch() es una instrucción de decisión múltiple, donde el compilador
prueba o busca el valor contenido en una variable contra una lista de constantes ints o
chars, cuando el computador encuentra el valor de igualdad entre variable y constante,
entonces ejecuta el grupo de instrucciones asociados a dicha constante, si no encuentra
el valor de igualdad entre variable y constante, entonces ejecuta un grupo de
instrucciones asociados a un default, aunque este ultimo es opcional.
En JAVA jsp, servlets, consola el formato de esta instrucción es el siguiente;
capturar o asignar variable de condición;
switch(var int o char)
{ case const1: instrucción(es);
break;
case const2: instrucción(es);
break;
case const3: instrucción(es);
break; ..................
default: instrucción(es);
};
Mejor un ejemplo;
Capturar o inicializar variable char llamada opcion;
// modulo de switch
switch(opcion)
{
case 'a':desplegar "aguila";
break;
case 'b': case 'B': desplegar"Borrego"; break;
default:desplegar "No hay";
};
}
Notas:
1.- Solo se puede usar como variable de condición una variable entera o variable char.
2.- Las constantes que estamos buscando y comparando son de tipo char, por eso se
deben encerrar entre apóstrofes ( ').
5.- Si se quiere resolver el problema de mayúsculas o minúsculas en el teclado, observar
que se usan dos case, pero con un solo break;
6.- Recordar que switch() solo trabaja con constantes y variables de tipo char o int, en
este ultimo caso;
En particular, instrucciones de tipo switch() se utilizaban para construir programas de
selección de menús, donde al usuario se le planteaban dos o tres problemas distintos y el
propio usuario seleccionaba cual de ellos quería ejecutarse.
TAREAS JAVA
1.- Construir una ventana que contenga el siguiente menú ( java jframe )
conversión de pesos a dólares
conversión de libras a kilogramos
conversión de kilómetros a millas
fin de menú
seleccionar opción [ ] aqui se captura el dato de variable opcion
2.- Construir un programa que capture un deporte y despliegue dos implementos
deportivos apropiados.( java servlet )
3.- Evaluar cualquier función vista para cuando x =3,-4, 5 ( java jsp )
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 8: COMPONENTES VISUALES DE SELECCION Y DESICION
Las instrucciones if y switch(), nos permiten tomar decisiones o realizar seleccionas
dentro del código de un programa.
JAVA proporciona una serie de componentes visuales que permiten al usuario, no al
programador, tomar decisiones en pantalla, el programador solo se encarga de implantar
código adecuado a la decisión tomada por el usuario.
Recordarque de momento, estos componentes o controles visuales, solo son
aplicables para JFRAME y JAPPLET.
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 9: Componentes Checkbox
Se analiza en este JAVA TEMA Checkbox de awt en función de que para applets no se
debe usar controles derivados de swing.
Este componente CheckBox, permite seleccionar una opción al usuario del programa o
tomar una decisión, directamente en pantalla.
Ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class prog14 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static JFrame ventana= new JFrame();
static JPanel p1= new JPanel(); static JPanel p2= new JPanel();
static JTextField jt1=new JTextField(15); static JButton jb1= new JButton("OK");
static Checkbox cb1=new Checkbox("h",true); static Checkbox cb2=new Checkbox("m");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
ventana.getContentPane().setLayout(new GridLayout(2,0));
//cargando panel1 con checkbox awt
p1.setLayout(new GridLayout(2, 1));
p1.add(cb1); p1.add(cb2);
//cargando segundo panel con jbutton y jtextfield
p2.add(jb1); p2.add(jt1);
ventana.getContentPane().add(p1); ventana.getContentPane().add(p2);
ventana.pack(); ventana.setVisible(true);
jb1.addMouseListener( new MouseAdapter()
{ public void mousePressed(MouseEvent e){
//programando checkbox
if(cb1.getState()== true ) jt1.setText("HOMBRE");
if(cb2.getState()== true ) jt1.setText("MUJER"); }} );
}; // termina main
} // termina clase
corrida:
Existen dos maneras de programar este componente, en el ejemplo se esta demostrando
la primera manera:
1.- Usando la propiedad getState() que regresa true o false, solo que se van a ocupar un
monton de ifs, es decir un if por cada checkbox que tenga Jframe o Applet.
2.- La segunda manera, es añadirle directamente un escuchador de mouse a cada
componente checkbox en la forma y programar directamente sin necesidad de revisar el
estado, es decir cuando el usuario seleccione el checkbox, en ese momento se activaria
el evento de ese escuchador de raton, este ejercicio se deja de tarea para hacerlo,
recordar que aqui ni se ocupan ifs(), ni tampoco jbutton.
Este método es el mejor porque evita código de mas y cada componente solo tiene
asociado el código que ocupa.
TAREAS JAVA APPLET JSP SERVLETS
1.- Evaluar la función
para x 2,-5, 8 (usar un CheckBox por cada valor
de x, y programar cada evento OnClick de cada CheckBox con la operación
correspondiente y el despliegue del resultado).( applet)
2.- Construir un panel con los datos de un automóvil, un segundo panel muestra un plan
de financiamiento a dos años y un tercer panel muestra un plan de financiamiento a tres
años. ( son dos checkbox en el primer panel y no hay botón de ok). (jframe)
3.- Construir el programa de menú, que se dejo en el JAVA TEMA de instrucción switch().
( aquí no se ocupa switch() ni pedir la opción, ni botón de ok, solo un CheckBox
programado a un lado de cada opción del menú). (jframe)
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 10: JRADIOBUTTON
Primero se usa swing en función de que awt no trae como default un componente
radiobutton, asi que los ejemplos y pruebas se tendran que hacer con JFrame.
Este Componente se utiliza para presentar al usuario un conjunto de opciones
mutuamente excluyentes entre si, es decir si el usuario selecciona un componente
RadioButton todos los demás componentes RadioButton en la forma, se desmarcan solos,
o se deseleccionan solos, como mejor se entienda.
Recordar también que cuando el usuario selecciona un RadioButton, todos los demás
RadioButton en el objeto(forma o ventana) son deseleccionados automáticamente, esto
es por que dos RadioButton son mutuamente excluyentes entre si.
Esta ultima situación deberá resolverse por parte del programador, es decir se supone un
programa donde el usuario debe seleccionar uno de entre dos sexos y uno de entre cinco
municipios, en este caso se ocupan ocho RadioButton, pero como todos son mutuamente
excluyentes entre si, cuando el usuario seleccione uno de ellos, todos los demás se
desmarcaran automáticamente.
Para resolver este problema se deberá usar sus propios componentes de agrupamiento
que son incluidos en java como lo muestra el siguiente ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class prog15 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static JFrame ventana= new JFrame();
static JPanel p1= new JPanel(); static JPanel p2= new JPanel();
static JTextField jt1=new JTextField(15); static JButton jb1= new JButton("OK");
static JRadioButton jrb1=new JRadioButton("5",true);
static JRadioButton jrb2=new JRadioButton("10");
// se ocupa un contenedor o grupo especial para los radiobuttons
static ButtonGroup grupo= new ButtonGroup();
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE);
ventana.getContentPane().setLayout(new GridLayout(2,0));
//agrupando y cargando panel1 con su grupo de radiobotones
p1.setLayout(new GridLayout(1,0));
grupo.add(jrb1); grupo.add(jrb2); p1.add(jrb1);p1.add(jrb2);
//cargando segundo panel con jbutton y jtextfield
p2.add(jb1); p2.add(jt1);
ventana.getContentPane().add(p1); ventana.getContentPane().add(p2);
ventana.pack(); ventana.setVisible(true);
jb1.addMouseListener( new MouseAdapter()
{ public void mousePressed(MouseEvent e){
if(jrb1.isSelected()== true ) jt1.setText("cinco");
if(jrb2.isSelected()== true ) jt1.setText("diez"); }} );
}; // termina main
} // termina clase
Recordar que cada grupo, debera ir en su propio panel.
La dos maneras de programar son similares a las de checkbox, solo que el metodo a usa
es .isSelected().
De esta manera Java los evalúa por separado y se puede tener seleccionado un
RadioButton en cada grupo.
TAREAS JAVA
1.- Diseñar y construir tres problemas similares a los resueltos con el componente
CheckBox.
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 11: JAVA MENUS MENUBAR
JAVA proporciona una serie de clases o componentes especializados que permiten
construir programas visuales de selección de menus.
Un programa de selección de menus debe construir los menus mas estandares que
existen, ellos son los menus que aparecen en la parte de arriba en cualquier aplicación,
con sus opciones de file, edit, etc, como se observa en el siguiente ejemplo:
Codigo:
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog17 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static Frame ventana= new Frame();
static TextField t1= new TextField(25);
//se ocupa una barra para los menus
static MenuBar barra = new MenuBar();
// se ocupa un menu por cada columna
static Menu cambios = new Menu("casa cambio");
static Menu temp= new Menu("temperaturas");
static Menu salir = new Menu("salir");
// se ocupan items para cada menu o columna
static MenuItem pd = new MenuItem("pes-dlr");
static MenuItem dp = new MenuItem("dlr-pesos");
static MenuItem cf = new MenuItem("cen-far");
static MenuItem fc = new MenuItem("far-cent");
static MenuItem exit=new MenuItem("Quit");
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
// agregando items a ira columna
cambios.add(pd);cambios.add(dp);
//agregando items a 2da columna
temp.add(cf);temp.add(fc);
// agregando items a 3ra columna
salir.add(exit);
//agregando columnas o menus a la barra de menus
barra.add(cambios);barra.add(temp);barra.add(salir);
//agregando barra de menus y textfield a frame, en awt no hay contentpane()
ventana.add(t1); ventana.setMenuBar(barra);
ventana.pack(); ventana.setVisible(true);
// en awt tampoco hay windows-on-close
ventana.addWindowListener( new WindowAdapter()
{ public void windowClosing(WindowEvent e){
ventana.dispose(); System.exit(0);}});
// agregando el unico escuchador que permite menuitem a cada item
exit.addActionListener( new ActionListener()
{ public void actionPerformed( ActionEvent e )
{ System.exit(0); } } );
pd.addActionListener( new ActionListener()
{ public void actionPerformed( ActionEvent e )
{ t1.setText("pesos a dolares"); } } );
cf.addActionListener( new ActionListener()
{ public void actionPerformed( ActionEvent e )
{ t1.setText("cent a far"); } } );
}; // termina main
} // termina clase
Corrida:
Notas:
1.- En general es una jerarquia sencilla de componentes, primero se ocupa una Barra de
Menu ( MENUBAR ) que contendra las columnas o menus (MENU) y esta barra de menu (
MENUBAR ) es quien se pega a FRAME, como se observa en el programa ejemplo.
2.- Se ocupan despues las columnas o menus( MENU ) que se pegan a MENUBAR y
contienen items ( MENUITEMS ), observar que al momento de crearlo (new) su
constructor lleva el titulo o encabezado de la columna.
3.- Se ocupan al final items ( MENUITEM ) apropiados para cada columna o menu, estos
items se pegan al menu o columna apropiada, y es a estos items a quien se les pega el
escuchador apropiado ( ACTIONLISTENER ), observar que este escuchador no se le
puede ni debe pegar ni a MENU ni tampoco a MENUBAR.
Observar tambien que al momento de crearlos(new) su constructor incluye el titulo de la
opción.
4.- Cada escuchador, lleva su propio codigo, aunque en general en la practica lo unico
que hace es ocultar(hide) FRAME1 que contiene el menu y mostrar(show o visible)
FRAME2 que contiene el programa apropiado.
5.- No olvidar poner en FRAME2 un boton de regreso a FRAME1 o menu.
6.- Si en FRAME no se pone mas que MENUBAR , al ejecutarse el programa de menu, no
aparecera en forma horizontal, sino en forma vertical.
TAREAS JAVA
1.- EL DE LA MUESTRA CON DOS CONVERSIONES MONETARIAS, DOS OPCIONES
DE TEMPERATURAS Y DOS DE DISTANCIAS.
• NO OLVIDE PONER ALGUNAS LABELS DE ENCABEZADO EN LA VENTANA
PRINCIPAL
EN EL BOTON OK O EN OTRO BOTON SIMILAR DE CADA VENTANA DE TRABAJO
NO OLVIDAR AGREGAR CODIGO PARA OCULTAR DICHA VENTANA Y REGRESAR A
LA VENTANA CON EL MENU PRINCIPAL.
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 12: JAVA POPUPMENU
Este componente nos presente esos pequeños minimenus que aparecen al hacer un click
con el boton derecho en alguna parte de una forma o ventana, o en alguno de los
componentes que tiene un frame (ej, panel,label,textfields, buttons, etc.).
Es decir se debera crear un popupmenu y luego se le debera pegar a algun componente
en la forma, aunque es valido pegarle el mismo popupmenu a diversos componentes,
pero es mas común crear varios popumenus y pegarselos cada uno de ellos a su
componente apropiado.
Codigo:
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog18 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static Frame ventana= new Frame();
// se ocupa un objeto u objetos al cual pegarle el popupmenu
static Panel p1 = new Panel();
static Label l1= new Label("clik derecho here");
static TextField t1 = new TextField(10);
// se ocupa un popupmenu
static PopupMenu cambios = new PopupMenu();
// se ocupan items para cada menu o columna
static MenuItem pd = new MenuItem("pes-dlr");
static MenuItem dp = new MenuItem("dlr-pesos");
static MenuItem exit=new MenuItem("Quit");
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
// agregando items al popupmenu
cambios.add(pd);cambios.add(dp);cambios.add(exit);
// agregando el poupmenu a label y su escuchador de raton
l1.add(cambios);
l1.addMouseListener( new MouseAdapter()
{ public void mouseReleased( MouseEvent e ){
if ( e.isPopupTrigger() ) cambios.show(l1,100,0 ); } });
//agregando componentes a panel
p1.add(l1);p1.add(t1);
// agregando panel a frame
ventana.add(p1); ventana.pack(); ventana.setVisible(true);
ventana.addWindowListener( new WindowAdapter()
{ public void windowClosing(WindowEvent e){
ventana.dispose(); System.exit(0);}});
// agregando el unico escuchador que permite menuitem a cada item
exit.addActionListener( new ActionListener()
{ public void actionPerformed( ActionEvent e )
{ System.exit(0); } } );
pd.addActionListener( new ActionListener()
{ public void actionPerformed( ActionEvent e )
{ t1.setText("pesos a dolares"); } } );
dp.addActionListener( new ActionListener()
{ public void actionPerformed( ActionEvent e )
{ t1.setText("dolares a pesos"); } } );
}; // termina main
} // termina clase
•
En windows 95-98 popuptrigger se activa cuando el boton derecho del raton es
liberado (mousereleased), en otras plataformas popuptrigger es activado cuando
boton de raton es presionado (mousepressed) es decir por seguridad y
compatibilidad entre plataformas, hay que poner dos public void, el mouse
released para w95-98 y otro con mousepressed y el mismo codigo para otras
plataformas, show ocupa tres parametros, el componente padre o el que contiene
el popupmenu y las coordenadas a partir del padre donde aparecerà el minimenu.
CORRIDA:
TAREAS JAVA
1.- CONSTRUIR UN MENU CON LAS SIGUIENTES OPCIONES:
[AUTOS]  FINANCIAMIENTO A 2,3,4 años
[LAVADORAS]  FINANCIAMIENTO A 2,3 años
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 13: CICLO FOR JAVA
Instrucciones para ciclos resuelven el problema de repetir todo el programa, o cierta parte
del programa mas de una vez.
Este ciclo es uno de los mas usados para repetir una secuencia de instrucciones, sobre
todo cuando se conoce la cantidad exacta de veces que se quiere que se ejecute una
instrucción simple o compuesta.
Antes de continuar recordar que for, asi como las instrucciones if y switch(). Son
independientes del modelo de programación usado, es decir se pueden usar dentro de
consola, frame, applet, servlet, jsp.
Su formato general es:
for (inicialización; condición; incremento)
{ instrucción(es); };
ejemplo:
for(x=1;x<=10;x=x+1)
{t1.setText("pato") };
En su forma simple la inicialización es una instrucción de asignación que carga la variable
de control de ciclo con un valor inicial.
La condición es una expresión relacional que evalúa la variable de control de ciclo contra
un valor final o de parada que determina cuando debe acabar el ciclo.
El incremento define la manera en que la variable de control de ciclo debe cambiar cada
vez que el computador repite un ciclo.
Se deben separar esos 3 argumentos con punto y coma (;)
Casos Particulares:
1.- El ciclo comienza en uno y se incrementa de uno en uno, este es el caso mas general.
2.- Pero el valor inicial puede se diferente de uno, ejemplo:
for (x=5;x<=15;x=x+1){ etc.};
3.- Incluso el valor inicial puede ser negativo, ejemplo:
for (x = -3 ; x<= 8; x=x+1) { etc.};
4.- Los incrementos también pueden ser diferentes al de uno en uno, ejemplo:
for (x=1; x<= 20; x=x+3){ etc. };
5.- Incluso pueden ser decrementos, solo que en este caso, recordar:
1.-el valor inicial de la variable debe ser mayor que el valor final.
2.-cambiar el sentido de la condición.
ejemplo;
for (x= 50 ; x >= 10; x= x-4 ) { etcétera };
6.- Solo para los casos de incrementos y decrementos de una en una unidad, substituir en
el for:
el x = x + 1 por x++
el x = x - 1 por x-7.- Un ejemplo para usarlo en los problemas sugeridos mas adelante, ejemplo: desplegar
los números enteros, comprendidos entre el 10 y el 20, usando frame.
Ocupamos ahora un componente visual que pueda almacenar y desplegar un conjunto
de los 10 resultados, el único componente visto hasta ahora con esta capacidad es el
componente ComboBox, sin embargo existe otro componente llamado List(, muy similar a
ComboBox, excepto que no tiene encabezado y todos sus elementos los mantiene a la
vista del usuario, no ocultos como el ComboBox, dicho componente List se analiza a
fondo en la siguiente unidad, pero es el que de momento permite resolver el problema del
for (desplegar un conjunto de resultados a la vez).
Tanto ComboBox como List permiten cargar todos sus elementos o valores, dentro de un
programa, usando el método llamado add(valor en string), como se ve en el siguiente
programa ejemplo;
Para este problema se ocupa poner en Form1, un componente Button OK que en su
escuchador de raton, contiene el for y la carga del componente List:
Codigo:
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog19 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static Frame ventana= new Frame();
static Panel p1 = new Panel();
static List lista = new List(10, false);
static Button b1 = new Button("OK");
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
//agregando componentes a panel
p1.add(lista);p1.add(b1);
// agregando panel a frame
ventana.add(p1); ventana.pack(); ventana.setVisible(true);
ventana.addWindowListener( new WindowAdapter()
{ public void windowClosing(WindowEvent e){
ventana.dispose(); System.exit(0);}});
b1.addMouseListener( new MouseAdapter()
{ public void mousePressed(MouseEvent e){
String temp=""; int x;
for ( x = 10; x<=20; x++){ temp = temp.valueOf(x);lista.add( temp );};
}} );
}; // termina main
} // termina clase
Corrida:
En el ejemplo el constructor de LIST, ocupa dos parametros, la cantidad de elementos y el
false es para evitar que puedan sleccionarse mas de uno a la vez, de esto lo analizamos
en la siguiente unidad.
En el escuchador la variable entera, se tiene que convertir a string porque add(adentro va
string).
TAREAS JAVA
1.- CONSTRUIR UN PROGRAMA QUE DESPLIEGUE LOS NUMEROS DEL 20 AL 30.
( java frame )
2.- DESPLEGAR LOS ENTEROS ENTRE 50 Y 30 ACOMPAÑADOS DE SU POTENCIA
CUADRADA Y RAIZ CUBICA RESPECTIVA OCUPA TRES List.( java applet )
3.- DESPLEGAR UNA TABLA DE MULTIPLICAR QUE EL USUARIO INDIQUE( java jsp ).
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 14: WHILE
En este ciclo el cuerpo de instrucciones se ejecuta mientras una condición permanezca
como verdadera, en el momento en que la condición se convierte en falsa el ciclo termina.
Su formato general es :
cargar o inicializar variable de condición;
while(condición)
{
grupo cierto de instrucciones;
instrucción(es) para salir del ciclo;
};
Ejemplo #1 :
x=1;
while(x<=10)
{List.add("pato");
x++; };
While puede llevar dos condiciones, en este caso inicializar 2 variables de condición y
cuidar que existan 2 de rompimiento de ciclo.
El grupo cierto de instrucciones puede ser una sola instrucción o todo un grupo de
instrucciones.
La condición puede ser simple o compuesta.
A este ciclo también se le conoce también como ciclo de condición de entrada prueba por
arriba, porque este ciclo evalúa primero la condición y posteriormente ejecuta las
instrucciones.
TAREAS JAVA
1.- DESPLEGAR ENTEROS ENTRE 50 Y 80 ( java consola )
2.- DESPLEGAR MULTIPLOS DE 4 ENTRE 60 Y 20 ACOMPAÑADOS DE SU
LOGARITMOS DE BASE 10 Y BASE e RESPECTIVOS ( A REVISAR LA AYUDA Y
BUSCAR LAS FUNCIONES MAJAVA TEMA TICAS QUE ESTAN LA LIBRERIA <MATH>(
java applet )
3.- CONSTRUIR LA TABLA DE DIVIDIR QUE EL USUARIO INDIQUE.( java servlet )
UNIDAD 4: JAVA CONTROL DE PROGRAMA
JAVA TEMA 15: JAVA DO WHILE
Su diferencia básica con el ciclo while es que la prueba de condición es hecha al finalizar
el ciclo, es decir las instrucciones se ejecutan cuando menos una vez, porque primero
ejecuta las instrucciones y al final evalúa la condición;
También se le conoce por esta razón como ciclo de condición de salida.
Su formato general es :
cargar o inicializar variable de condición;
do {
grupo cierto de instrucción(es);
instrucción(es) de rompimiento de ciclo;
} while (condición);
ejemplo:
x=1;
do
{ List.add("pato");
x++; }while(x<=10);
Otra diferencia básica con el ciclo while es que, aunque la condición sea falsa desde un
principio, el cuerpo de instrucciones se ejecutara por lo menos una vez.
TAREA JAVA
1.- Un problema similar a los de for o while usando los 5 modelos de programación
consola jframe applet servlet jsp
UNIDAD 4: CONTROL DE PROGRAMA
JAVA TEMA 16: CONCLUSIONES CICLOS
El problema de dado un problema cualesquiera, cual ciclo se debe usar se resuelve con:
A. Si se conoce la cantidad exacta de veces que se quiere que se ejecute el ciclo o si
el programa de alguna manera puede calcularla usar for.
B. Si se desconoce la cantidad de veces a repetir el ciclo o se quiere mayor control
sobre la salida o terminación del mismo entonces usar while.
C. Si se quiere que al menos una vez se ejecute el ciclo entonces usar do-while.
UNIDAD 5: ARREGLOS JAVA
JAVA TEMA 1: JAVA INTRODUCCION ARREGLOS
Uno de los problemas mas comunes en los diversos sisJAVA TEMA s de información, es
el tratamiento o procesamiento de una gran volumen de datos o de información.
Variables, objetos y componentes visuales manejados hasta ahora, no pueden ayudar a
resolver este problema.
Las variables,objetos y componentes visuales usados hasta ahora reciben propiamente el
nombre de escalares, porque solo permiten almacenar o procesar un dato a la vez.
Por ejemplo si se quiere almacenar nombre y edad de 15 personas, con el método
tradicional se ocuparan 30 variables o 30 componentes visuales y esto solo es nombre y
edad de 15 personas, agreguen mas datos y mas personas y ya es tiempo de empezar a
analizar otro tipo de variables, objetos y componentes.
Es decir, en problemas que exigen manejar mucha información o datos a la vez, variables
escalares, objetos y componentes visuales de manipulación de datos normales, no son
suficientes ya que su principal problema es que solo permiten almacenas un dato a la vez.
Se ocupa entonces variables, objetos y componentes visuales que sean capaces de
almacenar y manipular conjuntos de datos a la vez.
Variables de tipo arreglo y sus correspondientes objetos y componentes visuales, si
permiten almacenar y procesar conjuntos de datos del mismo tipo a la vez.
Cada dato dentro del arreglo se le llama elemento del arreglo y se simboliza y procesa
(captura, operación, despliegue ), usando el nombre del arreglo respectivo y un subíndice
indicando la posición relativa del elemento con respecto a los demás elementos del
arreglo, solo recordar que en JAVA la primera posición, elemento o renglón es la 0 (cero),
ej.
NOMBRES
Juan
Pedro ---> Nombres[1]
José
Ana ----> Nombres[3]
Carmen
EDAD
18 ---> Edad[0]
20
25
30 ---> Edad[3]
Sin embargo sus problemas son similares a los de variables normales, es decir hay que
declararlos, capturarlos, hacer operaciones con ellos, desplegarlos, compararlos, etc.
Para propósitos del aprendizaje se analizan o clasificaremos en tres grupos diferentes los
arreglos que ofrece JAVA, ellos son;
1.- Arreglos tradicionales en JAVA
2.- Arreglos con clases--> Objetos
3.- Componentes Visuales de tipo Arreglo
Recordar ademas, que el uso de arreglos en programas y aplicaciones tambien sera
afectado por el modelo de programación que se este usando, por ejemplo todos los
modelos aceptaran arreglos tradicionales, pero aplicaciones por consola no podran
manejar arreglos construidos con componentes visuales.
UNIDAD 5: ARREGLOS
JAVA TEMA 2: ARREGLOS TRADICIONALES EN JAVA
En programación tradicional siempre se manejan dos tipos de arreglos, los arreglos tipo
listas, vectores o unidimensionales y los arreglos tipo tablas, cuadros, concentrados,
matrices o bidimensionales, en ambos casos son variables que permiten almacenar un
conjunto de datos del mismo tipo a la vez, su diferencia es en la cantidad de columnas
que cada uno de estos tipos contiene, como en los siguientes ejemplos;
A. ARREGLOS TIPO LISTA
Juan
Pedro ---> Nombres[1]
José
Ana ---> Nombres[3]
Carmen
18 ---> Edad[0]
20
25
30 ---> Edad[3]
B. ARREGLOS TIPO TABLAS
CIA ACME
ING MENS VTAS
(MILES DE $)
ENE FEB MAR ABR MAY
SUC A 10 12 15 10 9
SUC B 8 7 5 9 6
SUC C 11 18 20 14 17
INST TECN DE TIJUANA
CONCENTRADO DE CALIF
MAT FIS QUIM HIST
JUAN 5 5 5 5
JOSE 4 4 4 4
PEDRO 3 3 3 3
ANA 9 9 9 9
Como se observa, la diferencia principal entre un arreglo tipo lista, y un arreglo tipo tabla,
son las cantidades de columnas que contienen.
NOTA IMPORTANTE.- LOS CONCEPTOS MANEJADOS AQUI ESTAN ENFOCADOS A
LOS SISJAVA TEMA S DE INFORMACION CONTABLE FINANCIEROS
ADMINISTRATIVOS.
EN ALGEBRA MATRICIAL, SI SON IMPORTANTES LOS CONCEPTOS DE VECTORES
Y MATRICES, PERO LAS OPERACIONES Y METODOS SON PRECISAMENTE LOS
DEL ALGEBRA MATRICIAL Y NO ES PROPOSITO, TIEMPO Y LUGAR INDICADO
PARA TRATAR PROBLEMAS Y OPERACIONES CON MATRICES, SE TENDRAN QUE
ESPERAR A LA PROXIMA EDICION DE ESTE LIBRO.
UNIDAD 5: JAVA ARREGLOS
JAVA TEMA 3: ARREGLOS TIPO LISTAS
Un arreglo tipo lista se define como una variable que permite almacenar un conjunto de
datos del mismo tipo organizados en una sola columna y uno o mas renglones.
También reciben el nombre de vectores en álgebra, o arreglo unidimensional en
programación.
Los procesos normales con una lista o con sus elementos, incluyen declarar toda la lista,
capturar sus elementos, desplegarlos, realizar operaciones con ellos, desplegarlos, etc.
Para declarar una lista se usa el siguiente formato;
tipodato nomlista[]= new tipodato[cant elementos];
SORPRESA, no existen en java arreglos o listas tradicionales, lo que existe es un objeto,
por tanto se debera usar el operador new antes de empezar a procesar el arreglo, la
ventajas son:
a) estas listas pueden usar el metodo length,(ejemplo nomlista.length;) para conocer el
tamaño de la misma.
int edades[]= new int[12];
float sueldos[]=new float[5];
String municipios[]={"tijuana","tecate","ensenada"};
en este ulimo caso, observar que tambien pueden crearse listas ya con tamaño fijo e
inicializadas o cargadas
notas:
Recordar también que la primera posición o renglón en una lista es la posición o renglón 0
(cero).
Ej: Programa usando consola:
import java.io.*;
class prog20 {
public static void main(String[] args) {
int edad[]= new int[5]; int reng;
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
//ciclo de captura
for(reng=0; reng <=4; reng++)
{ System.out.println("dame edad "+reng+":");
try { edad[reng]= Integer.parseInt(teclado.readLine());
}catch(IOException varerror){};
};
//ciclo de proceso
for(reng=0;reng<=4;reng++)
edad[reng]=edad[reng]*12;
//ciclo de despliegue
for(reng=0; reng <=4; reng++)
System.out.println(edad[reng]);
} // cierra main
} // cierra clase
Corrida:
Observar que para procesar la lista se ocupara un ciclo for con una variable llamada
renglón que tambien se usara como indice del arreglo.
TAREAS JAVA CONSOLA JSP SERVLET
1.- Capturar y desplegar 5 precios de productos cualesquiera.
2.- Capturar 4 sueldos y desplegarlos aumentados en un 25%.
3.- Capturar los datos de 5 productos comprados en una tienda, incluyendo nombre,
precio y cantidad en sus 3 listas respectivas, después calcular una cuarta lista con el
gasto total por cada producto desplegarlo todo también el gran total.
4.- Capturar en una lista solamente 6 números múltiplos de 5, se debe de estar capture y
capture números hasta que se completen los 6 múltiplos de 5.
UNIDAD 5: ARREGLOS
JAVA TEMA 4: Listas (continuación)
Tambien las clases numericas pueden dar origen a listas, como lo muestra el siguiente
ejemplo:
import java.io.*;
class prog21 {
public static void main(String[] args) {
Integer edad[]= new Integer[5]; int reng;
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
//ciclo de captura
for(reng=0; reng <=4; reng++)
{ System.out.println("dame edad "+reng+":");
try { edad[reng]= edad[reng].valueOf(teclado.readLine());
}catch(IOException varerror){};
};
//ciclo de proceso
for(reng=0;reng<=4;reng++)
{int temp=edad[reng].intValue()*12;
edad[reng]=edad[reng].valueOf(String.valueOf(temp));
};
//ciclo de despliegue
for(reng=0; reng <=4; reng++)
System.out.println(edad[reng]);
} // cierra main
} // cierra clase
Como se observa es muy similar, este objeto arreglo a la variable arreglo vista en el JAVA
TEMA anterior.
Tambien pueden crearse listas de strings, de manera similar a este ejemplo.
UNIDAD 5: JAVA ARREGLOS
JAVA TEMA 5: Componente List JAVA
En java este componente permite procesar visualmente un conjunto de elementos de tipo
string.
Su primer y mas importante aspecto a recordar, cuando se procese o programe, es que el
primer indice de la lista, es el indice numero 0(cero).
Ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*;
public class prog22 {
//declaracion, creacion e inicializacion de componentes, objetos y variables
static Frame ventana= new Frame();
static Panel p1= new Panel(); static Panel p2= new Panel();
static List lista1= new List(5); static List lista2= new List(5);
static Label l1 = new Label("DAME EDAD:"); static TextField t1 = new TextField(4);
static Button b1 = new Button("INSERTAR"); static Button b2 = new Button("A meses");
// parte principal de programa
public static void main(String[] args)
{ // area de definicion de propiedades de el objeto
ventana.setTitle("mi programa");
p1.add(l1);p1.add(t1);p1.add(b1);p1.add(lista1);
ventana.add(p1,BorderLayout.NORTH);
p2.add(lista2);p2.add(b2);
ventana.add(p2,BorderLayout.SOUTH);
ventana.pack(); ventana.setVisible(true);
//area de asociacion de objeto-eventos
b1.addMouseListener( new MouseAdapter()
{ public void mousePressed(MouseEvent e){
lista1.add(t1.getText()); }} );
b2.addMouseListener( new MouseAdapter()
{ public void mousePressed(MouseEvent e){
int ren;int temp;
for (ren=0; ren<=4; ren++)
{temp =Integer.parseInt(lista1.getItem(ren));
temp=temp*12;
lista2.add(String.valueOf(temp)); }; }} );
ventana.addWindowListener( new WindowAdapter()
{ public void windowClosing(WindowEvent e){ System.exit(0); }} );
}; // termina main
} // termina clase
Corrida:
NOTAS:
Conversiones, conversiones, conversiones
recordar que solo podran emplearse en aplicaciones de tipo FRAME Y APPLET.
Este componente, contiene muchas propiedades y métodos que facilitan el trabajo con
datos, entre ellas se encuentran:
Constructor Summary
List()
Creates a new scrolling list.
List(int
rows)
Creates a new scrolling list initialized with the specified number of visible lines.
List(int
rows,
boolean
multipleMode)
Creates a new scrolling list initialized to display the specified number of rows.
Method Summary
void
add(String
Adds the specified item to the end of scrolling list.
void
add(String
item,
int
index)
Adds the specified item to the the scrolling list at the position indicated by
the index.
void
addActionListener(ActionListener
Adds the specified action listener to receive action events from this list.
void
addItem(String
Deprecated. replaced by add(String).
void
addItem(String
item,
Deprecated. replaced by add(String, int).
void
addItemListener(ItemListener
Adds the specified item listener to receive item events from this list.
void
addNotify()
Creates the peer for the list.
boolean
allowsMultipleSelections()
Deprecated. As of JDK version 1.1, replaced by isMultipleMode().
void
clear()
Deprecated. As of JDK version 1.1, replaced by removeAll().
int
countItems()
Deprecated. As of JDK version 1.1, replaced by getItemCount().
void
delItem(int
Deprecated. replaced by remove(String) and remove(int).
void
delItems(int
start,
item)
l)
item)
int
int
index)
l)
position)
end)
Deprecated. As of JDK version 1.1, Not for public use in the future. This
method is expected to be retained only as a package private method.
void
deselect(int
Deselects the item at the specified index.
index)
AccessibleContext getAccessibleContext()
Gets the AccessibleContext associated with this List.
String
getItem(int
Gets the item associated with the specified index.
index)
int
getItemCount()
Gets the number of items in the list.
String[]
getItems()
Gets the items in the list.
EventListener[]
getListeners(Class
listenerType)
Return an array of all the listeners that were added to the List with
addXXXListener(), where XXX is the name of the listenerType argument.
Dimension
getMinimumSize()
Determines the minimum size of this scrolling list.
Dimension
getMinimumSize(int
rows)
Gets the minumum dimensions for a list with the specified number of rows.
Dimension
getPreferredSize()
Gets the preferred size of this scrolling list.
Dimension
getPreferredSize(int
rows)
Gets the preferred dimensions for a list with the specified number of rows.
int
getRows()
Get the number of visible lines in this list.
int
getSelectedIndex()
Gets the index of the selected item on the list,
int[]
getSelectedIndexes()
Gets the selected indexes on the list.
String
getSelectedItem()
Get the selected item on this scrolling list.
String[]
getSelectedItems()
Get the selected items on this scrolling list.
Object[]
getSelectedObjects()
Returns the selected items on the list in an array of Objects.
int
getVisibleIndex()
Gets the index of the item that was last made visible by the method
makeVisible.
boolean
isIndexSelected(int
Determines if the specified item in this scrolling list is selected.
boolean
isMultipleMode()
Determines whether this list allows multiple selections.
boolean
isSelected(int
index)
Deprecated. As of JDK version 1.1, replaced by isIndexSelected(int).
void
makeVisible(int
Makes the item at the specified index visible.
Dimension
minimumSize()
Deprecated. As of JDK version 1.1, replaced by getMinimumSize().
Dimension
minimumSize(int
rows)
Deprecated. As of JDK version 1.1, replaced by getMinimumSize(int).
protected String
paramString()
Returns the parameter string representing the state of this scrolling list.
Dimension
preferredSize()
Deprecated. As of JDK version 1.1, replaced by getPreferredSize().
Dimension
preferredSize(int
rows)
Deprecated. As of JDK version 1.1, replaced by getPreferredSize(int).
protected void
processActionEvent(ActionEvent
e)
Processes action events occurring on this component by dispatching them
to any registered ActionListener objects.
protected void
processEvent(AWTEvent
Processes events on this scrolling list.
protected void
processItemEvent(ItemEvent
e)
Processes item events occurring on this list by dispatching them to any
registered ItemListener objects.
void
remove(int
Remove the item at the specified position from this scrolling list.
void
remove(String
Removes the first occurrence of an item from the list.
void
removeActionListener(ActionListener
l)
Removes the specified action listener so that it no longer receives action
events from this list.
index)
index)
e)
position)
item)
void
removeAll()
Removes all items from this list.
void
removeItemListener(ItemListener
l)
Removes the specified item listener so that it no longer receives item
events from this list.
void
removeNotify()
Removes the peer for this list.
void
replaceItem(String
newValue,
int
index)
Replaces the item at the specified index in the scrolling list with the new
string.
void
select(int
Selects the item at the specified index in the scrolling list.
void
setMultipleMode(boolean
b)
Sets the flag that determines whether this list allows multiple selections.
void
setMultipleSelections(boolean
b)
Deprecated. As of JDK version 1.1, replaced by setMultipleMode(boolean).
index)
TABLAS TOMADAS DEL API DE JAVA
TAREAS JAVA
1.- EN JAVA CAPTURAR EN UNA LISTA LOS SUELDOS DE 6 EMPLEADOS Y
DESPLEGARLOS EN UNA SEGUNDA LISTA AUMENTADOS EN UN 30% ( java frame )
2.- EN JAVA CAPTURAR EN UNA LISTA LOS PESOS EN KILOGRAMOS DE 6
PERSONAS DESPLEGARLOS EN UNA SEGUNDA LISTA CONVERTIDOS A LIBRAS Y
ADEMAS SOLO LOS MAYORES DE 100 LIBRAS. ( java applet )
3.- EN JAVA CAPTURAR EN SUS 4 LISTAS RESPECTIVAS MATRICULA, NOMBRE Y
DOS CALIFICACIONES DE 5 ALUMNOS, DESPUÉS CALCULAR UNA LISTA DE
PROMEDIOS DE CALIFICACIONES. ( java frame )
4.-EN JAVA CAPTURAR EN SUS LISTAS RESPECTIVAS NUMEMPLEADO,
NOMEMPLEADO, DÍAS TRABAJADOS Y SUELDO DIARIO DE 5 EMPLEADOS,
DESPLEGAR EN OTRA PANTALLA O PANEL LA NOMINA PERO SOLO DE AQUELLOS
EMPLEADOS QUE GANAN MAS DE $300.00 A LA SEMANA.( java applet )
UNIDAD 5: JAVA ARREGLOS
JAVA TEMA 6: LISTAS en JAVA SERVLETS y JAVA JSP
Aqui el unico problema, es que al recibir los datos por parte del usuario estos llegan a
travez de una serie de input text, uno por cada elemento de la lista.
Para recibirlos, se usara el metodo normal (getcharacter, getinteger, etc) y por supuesto
es mas conveniente recibirlos y procesarlos en una lista tradicional de tipo variable, en
lugar de usar una lista de tipo objeto numerico.
Ejemplo:
Codigo html
<HTML>
<FORM
ACTION=http://www.programacionfacil.com:9090/servlet/lauro.prog7
METHOD=POST>
NOMBRE<INPUT TYPE=TEXT NAME=NOMBRE><BR>
EDAD<INPUT TYPE=TEXT NAME=EDAD><BR>
<INPUT TYPE=SUBMIT VALUE="OK">
</FORM></HTML>
codigo:
<%! int edad[]=new int[4]; %>
<%! int ren; %>
<HTML>
<%
//captura
edad[0]= Integer.parseInt(request.getParameter("CERO"));
edad[1]= Integer.parseInt(request.getParameter("UNO"));
edad[2]= Integer.parseInt(request.getParameter("DOS"));
edad[3]= Integer.parseInt(request.getParameter("TRES"));
//proceso
for(ren=0; ren<=3;ren++)
edad[ren]=edad[ren]* 12;
//despliegue
for(ren=0; ren<=3;ren++)
out.println(edad[ren]);
%>
</HTML>
Como se observa es bastante sencillo combinar lo que se ha visto de arreglos
tradicionales y java jsp, el procedimiento es similar para servlets.
TAREAS JAVA
2 de java jsp y 2 java servlets, similares a los de componente LIST
UNIDAD 5: JAVA ARREGLOS
JAVA TEMA 7: JAVA TABLAS
Un arreglo tipo tabla ( matriz ) se define como un conjunto de datos del mismo tipo
organizados en dos o mas columnas y uno o mas renglones.
Los elementos de la tabla se deberan simbolizar con el nombre de la tabla y 2 subindices,
el primer subindice referencia al renglon y el siguiente subindice referencia la columna, y
ambos inician en (0) cero tambien.
Para procesar, recordar que en aplicaciones tipo consola, se ocuparan dos ciclos for(uno
para renglon y otro para columna) para cada uno de los procesos normales(captura,
proceso, despliegue), pero en jsp y servlets solo se ocuparan los dos ciclos, para proceso
y despliegue(la captura es un monton de input text).
Recordar ademas que en Java, existen tablas derivadas de un tipo de dato que originan
una variable arreglo y tambien existen tablas derivadas de una de las clases numericas es
decir objetos de tipo arreglo, lo bueno es que en awt no hay un componente visual que
corresponda a un arreglo tipo tabla, pero en swing si existe este componente visual.
La declaración de una tabla sera de acuerdo a los siguientes formatos:
1) tipodato nomtabla[][]= new tipodato[reng][col];
ejemplo:
int calif[][]=new int[3][4];
double ingresos[][]= new double[3][4];
2) Clasenumerica objetotabla[][]= new constructor[ren][col];
ejemplo;
Integer calif[][]= new Integer[2][3];
Double ingresos[][]=new Double[3][4];
Para efectuar cualquier proceso captura, operaciones, despliegue con todos los
elementos de la tabla se deberan usar 2 ciclos, un for externo para controlar renglon y un
for interno para controlar columna.
TAREAS JAVA
1.- CONSTRUIR UN CUADRO QUE CONTENGA LOS COSTOS FIJOS DE CUATRO
PRODUCTOS CUALESQUIERA, QUE SE PRODUCEN EN TRES PLANTAS
DIFERENTES DE UNA EMPRESA MAQUILADORA(consola).
2.- CONSTRUIR UN CUADRO QUE CONTENGA LOS INGRESOS MENSUALES POR
VENTAS DURANTE LOS TRES PRIMEROS MESES DEL AÑO DE CUATRO
SUCURSALES DE UNA CADENA DE AUTO REFACCIONES, AGREGAR AL FINAL UNA
LISTA QUE MUESTRE LOS INGRESOS MENSUALES TOTALES POR MESES Y UNA
SEGUNDA LISTA QUE MUESTRE LOS INGRESOS MENSUALES TOTALES POR
SUCURSAL.( java jsp )
3.-CONSTRUIR UN CUADRO QUE CONTENGA LAS COMISIONES GANADAS POR
TRES VENDEDORES, DE LOS 5 TIPOS DE LINEA BLANCA DE CONOCIDA
MUEBLERIA, ADEMAS LISTAS DE COMISIONES TOTALES Y PROMEDIOS GANADAS
POR LOS VENDEDORES, ASI COMO LISTAS DE COMISIONES TOTALES Y
PROMEDIOS POR TIPO DE LINEA BLANCA.( java servlet )
ANALIZAR ESTE CODIGO para el problema 3
' PARA TOTALES Y PROMEDIOS POR RENGLON
FOR R = 0 TO 3
FOR C = 0 TO 2
TOTRENG(R) = TOTRENG(R) + TABLA(R,C)
NEXT C
PROMRENG(R) = TOTRENG(R)/3
NEXT R
'PARA TOTALES Y PROMEDIOS POR COLUMNA
FOR C = 0 TO 2
FOR R = 0 TO 3
TOTCOL(C)=TOTCOL(C) + TABLA(R,C)
NEXT R
PROMCOL(C) = TOTCOL(C) / 4
NEXT C
SUGERENCIA: JAVA CONSTRUIR PRIMERO LOS CUADROS EN PAPEL.
UNIDAD 6: OOP
JAVA TEMA 1: PROCEDIMIENTOS
Un camino para dividir un gran programa en partes mas pequeñas es el uso de los llamados
procedimientos.
Un procedimiento es un grupo de instrucciones, variables, constantes, etc, que estan diseñados con un
próposito particular y tiene su nombre propio.
Es decir un procedimiento es un modulo de un programa que realiza una tarea especifica y que no
puede regresar valores al programa principal u a otro procedimiento que lo este invocando.
Despue de escribir un procedimiento se usara ese nombre propio como una sola instrucción o llamada
al procedimiento.
Los procedimientos se podran escribir despues del cuerpo principal del programa ( main() )o de la parte
principal del programa (recordar que en applet es init(), utilizando el formato:
Static void Nom_Proc(){instrucciones;}
Un programa puede tener tantos procedimientos como se deseen, para hacer una llamada o invocación
al procedimiento, durante la ejecución de un programa se debera escribir el nombre del procedimiento y
los parentesis en blanco.
Programa:
import java.io.*;
public class prog24 {
public static void main(String[] args) {
int x; x = 10;
proc1();
System.out.println("x="+x);
} // cierra main
static void proc1()
{ int y;
y = 20;
System.out.println("y="+y);
};
} // cierra clase
Corrida:
TAREA JAVA
Construir un programa que contenga puras llamadas a procedimientos dentro de un menu.(puntos
extras si el programa es giu, applet, servlet o jsp)
Menu.
a) Pesos a dolares.
b) Area de un triangulo.
c) Emitir Boleta.
d) Fin de menu.
UNIDAD 6: OOP
JAVA TEMA 2: PARAMETROS
Un parametro es una variable que puede pasar su valor a un procedimiento desde el principal o desde
otro procedimiento.
Existen ocasiones en que es necesario mandar al procedimiento ciertos valores para que los use en
algún proceso.
Estos valores que se pasan del cuerpo principal del programa al procedimiento se llaman parametros.
Entonces la declaración completa de un procedimiento es :
Static void NomProc(lista de parametros)
{ cuerpo de instrucciones; };
prog.java
import java.awt.*; import java.applet.*; import java.awt.event.*;
public class prog25 extends Applet {
static TextField t1=new TextField(10);
static Button b1=new Button("ok");
public void init() {
// abajo no se puso el objeto a la propiedad, porque el default es el propio prog25 o applet
add(t1); add(b1);
b1.addMouseListener(new MouseAdapter()
{ public void mousePressed(MouseEvent e) {
int x = 500;
proc1(x);
} } );
} // cierra init
static void proc1(int x)
{ x=x+100;
t1.setText(String.valueOf(x));
};
} // cierra clase
codigo.html que activa applet
<HTML>
<APPLET CODE="prog25" width=100 height=100></APPLET>
</HTML>
corrida:
REGLAS PARA EL USO DE PARAMETROS
1.- Cuando se usan variables como parametros, la variable que se manda debe ser declarada dentro del
principal o del procedimiento de donde se esta enviando.
2.- La variable que se manda tiene un nombre, la que se recibe puede tener otro nombre.
3.- La cantidad de variables que se envian deben ser igual en cantidad, orden y tipo a las variables que
reciben.
4.- La variable que se recibe tiene un ambito local dentro del procedimiento, es decir solo la puede usar
ese procedimiento.
TAREAS JAVA APPLET SERVLET JSP
Capturar el nombre y las 3 calificaciones en un procedimiento, calcular promedio en un segundo,
imprimir nombre y promedio en un tercer procedimiento.
Construir una tabla de multiplicar que el usuario indique captura y control de ciclo en el principal, calculo
y despliegue en un procedimiento.
Construir un procedimiento que reciba un numero entero y que mande llamar a un segundo
procedimiento pasando el letrero "PAR O IMPAR".
UNIDAD 6: JAVA PROGRAMACION ORIENTADA OBJETOS OOP
JAVA TEMA 3: JAVA VARIABLES LOCALES Y GLOBALES
En JAVA el lugar donde sea declarada una variable afectara el uso que el programa quiera hacer de
esa variable.
En Java las reglas basicas que determinan como una variable puede ser usada depende de 3 lugares
donde se puede declarar una variable.
En primer lugar es dentro de cualquier función o procedimiento incluyendo main, a estas se les llama
variables locales y solo pueden ser usadas por instrucciones que esten dentro de esa función o
procedimiento.
En segundo lugar es como parametro de una función o procedimiento, donde despues de haber recibido
el valor, podra actuar como variable local en esa función o procedimieto.
En escencia una variable local solo es conocida por el código de esa función o procedimieto y es
desconocida por otras funciones o procedimientos.
En tercer lugar es fuera de todas las funciones incluyendo main(), o init()(pero dento de la clase global)
etc, a este tipo de variables se les llama variables globales y podran ser usadas por cualquier función o
procedimiento del programa.
UNIDAD 6: JAVA OOP
JAVA TEMA 4: FUNCIONES EN JAVA
En Java una funcion es un modulo de un programa separado del cuerpo principal, que realiza una tarea
especifica y que puede regresar un valor a la parte principal del programa u otra funcion o
procedimiento que la invoque.
La forma general de una funcion es:
tipodatoregresa Nom_fun(parametros)
{ cuerpo de instrucciones;
intruccion return;
}
El tipo especifica el tipo de valor que la funcion regresara utlizando la instrucción return.
Si no se especifica un tipo se asume de default que el tipo regresado es int.
La lista de parametros formales es una lista de variables separadas por comas (,) que almacenaran los
valores que reciba la funcion, estas variables actuan como locales dentro del cuerpo de la funcion.
Aunque no se ocupen parametros los paréntesis son requeridos.
La declaracion de parametros es la especificacion de cada tipo de parametro recibido.
INSTRUCCION RETURN
Dentro del cuerpo de la función deber haber una instrucción return cuando menos, para regresar el
valor, esta instrucción permite regresar datos.
Prog.java ejemplo;
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
public class prog26 extends HttpServlet
{ public void doPost (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{ int x=10;
x = funcion1(x,20);
PrintWriter pagina;
response.setContentType("text/html");
pagina = response.getWriter();
pagina.println("<HTML>");
pagina.println("x="+x);
pagina.println("</HTML>");
pagina.close();
}; // termina dopost
public int funcion1(int a, int b){return a+b;};
public void destroy(){super.destroy();};
}// termina class
codigo.html
<HTML>
<FORM
ACTION=http://www.programacionfacil.com:9090/servlet/lauro.prog26
METHOD=POST>
<INPUT TYPE=SUBMIT VALUE=OK>
</FORM></HTML>
corrida:
Es permitido poner mas de un return en el cuerpo de instrucciones sobre todo en condiciones, pero solo
un return se ejecutara.
Ejemplo;
if (suma >= 10)
{ return 10; }
else
{ return 20; }
EN JAVA EXISTEN 3 CLASES USUALES DE FUNCIONES.
Las primeras son de tipo computacional que son diseñadas para realizar operaciones con los
argumentos y regresan un valor basado en el resultado de esa operación.
Las segundas funciones son aquellas que manipulan información y regresan un valor que indican la
terminacion o la falla de esa manipulacion.
Las terceras son aquellas que no regresan ningun valor, es decir son estrictamenta procedurales.
TAREAS JAVA JSP Y JAVA SERVLETS
Imprimir nombre y promedio de un alumno, capturar 3 calificaciones y nombre en un procedimiento,
calcular promedio en una funcion y desplegar
Crear una tabla de multiplicar, captura y control de ciclo en el principal, operaciones en una funcion,
despliegue en el principal.
Construir una funcion que nos regrese el triple de cualquier numero.
Construir un programa que emita una factura si el articulo es importado, una funcion lo graba con el
20% de iva si es nacional, la misma funcion lo graba con el 15% de iva si no lo es.
Construir una funcion que nos regrese la letra "I" o "P" si el numero que recibio fue impar o par
respectivamente.
UNIDAD 6: JAVA OOP
JAVA TEMA 5: INTRODUCCION PROGRAMACION ORIENTADA OBJETOS OOP
Como ya se menciono anteriormente, componentes u objetos son las piezas basicas, con las que se
arma, construye y diseña, una aplicacion moderna cualesquiera.
Como se explico al principio del libro, la programacion moderna o actual, en su fondo o esencia es
llamada programacion orientada a objetos.
En orden o principio, recordar que todo en la vida o el universo, no es mas que un objeto de cualquier
clase o naturaleza ya sea material o inmaterial, todos los objetos tienen sentido, forma, tamaño y un
gran conjunto de caracteristicas que permiten diferenciarlos, pero tambien clasificarlos y agruparlos,
entre si.
Desde este punto de vista un programa en ejecucion o un sisJAVA TEMA de información, se puede
considerar como un conjunto de objetos, que como en la vida real interactuan entre si, creandose entre
ellos una serie de relaciones e interacciones, programacion de punta o avanzada ya toma en cuenta, la
naturaleza dinamica de los propios objetos (esto es llamada concurrencia, es decir la capacidad de
existir en forma independiente y a la vez que el resto de los objetos del sisJAVA TEMA , esto se estudia
mas a fondo en capitulos posteriores de este libro).
Sin embargo, su manifestacion programatica de los objetos, en los lenguajes modernos de
programacion, son las llamadas clases, es decir una clase es la representacion simbolica y
computacional de toda una serie de objetos con caracteristicas comunes entre si, por eso existe la clase
gatos, empleados, arboles, listas, reportes, vectores, etc, es decir pueden existir tantas clases como
objetos existen en el universo y cada clase contiene todos los objetos con caraceristicas comunes entre
si, o de la misma categoria o clasificaacion, un ejemplo de una clase en un lenguaje de programacion
es:
Class gatos{
public:
int edadgato;
AnsiString nombregato;
maullar();
capturardatosgato();
}gatonegro, garfield, gatotijuanense;
gatos::maullar(){ cin>>"miauuuu";}
gatos::capturardatos(){ cin>>"dame edad"; cout<<edad; }
Como se observa, comprender, localizar y programar todas las carecteristicas o atributos de una sola
clase, es una tarea bastante grande, mientras que los comportamientos ( metodos en oop) es todavia
mas laborioso y complejo y si agregamos la interaccion natural existente entre objetos ( los llamados
eventos en oop), garantiza que existiran la necesidad de ingenieros de software por mucho tiempo en el
futuro.
Observar del ejemplo, que del conjunto de objetos que representa la clase, se derivan instancias u
objetos (gatonegro, garfield) individuales de esa clase, desgraciadamente a esas instancias individuales
tambien se les conoce como objetos y esto manifiesta o conduce a la confusion entre las dos
interpretaciones de el concepto objeto, en su sentido generico o universal y su sentido particular o
programatico, como una instancia derivada de una clase, problema viejo en los ambientes de
programacion.
Por ultimo un componente, se puede entender como la manifestacion visible de un objeto en un
ambiente de desarrollo visual, es decir un componente no son mas que algunos aspectos o propiedades
del objeto, que permiten la conceptualizacion y manipulacion de los objetos en los programas de
aplicaciones visuales.
En resumen clase->objeto es la escencia clasica en la programacion moderna.
UNIDAD 6: OOP
JAVA TEMA 6: CLASES
Definimos una clase, como una colección o conjunto de objetos que comparten caracteristicas comunes
entre si.
Esta definición es muy similar al concepto de conjuntos del algebra booleana, y la razon es que oop es
en esencia algebra booleana.
Tanto una clase, asi como un objeto derivado de la misma, contienen tres aspectos importantes que nos
permiten hacer clasificaciones con ellos, dichos aspectos son:
Ambos tienen propiedades, es decir tienen un conjunto de caracteristicas propias que permiten
individualizarlos entre si, caracteristicas tan genericos como son la forma, el color, el tamaño, etc. o
caracteristicas, propiedades o atributos mas particulares como , nombre, edad, etc.
Po ejemplo la clase gatos tienen como propiedades o atributos, nombre, edad, color, peso, estatura, etc.
La clase FRAME tiene como propiedades , el tamaño, el background, etc.
El segundo aspecto de las clases o sus objetos derivados, son las conductas, comportamientos o mas
apropiado los llamados metodos.
Los metodos son las conductas propias del objeto que se trate, es decir mientras las propiedades
reflejan el "SER" del objeto, los metodos nos indican el "HACER" del objeto.
Por ejemplo los metodos del oobjeto o clase gatos, son dormir(), maullar(), comer(), etc.
Por ejemplo los metodos de una buena ventana son, abrirse(), cerrarse(), maximizarse(), minimizarse()
etc.
El tercer aspecto de una clase u objeto, son los eventos, es decir la capacidad que tienen de
relacionarse con otros objetos derivados de la misma clase o de otras clases.
Es decir los objetos no existen, ni mucho menos se programan en solitario, es decir de que sirve un
programa que nada mas tenga una ventana y nada mas, o un alumno sin maestro, o garfield sin ollie.
Esta relación produce un evento cuando los dos objetos entran en contactoentre si, es decir una
relación de momento la podemos definir como una frase que contenga los dos objetos y un verbo que
los une, de esta manera tendremos eventos o relaciones como los siguientes.
R1.- el alumno saluda al maestro.
R2.- garfield detecta una gata
R3.- la ventana detecta un click del raton
En todos los casos, en el momento del evento o relación, ambos objetos, disparan una serie de
metodos propios y no necesariamente en el mismo orden.
Por ejemplo en el evento "el gato detecta el perro", el gato activa sus metodos, bufar(), esponjar(),
correr(), saltar(), etc, mientras que el perro activa sus metodos ladrar(), correr(), etc.
Es tarea comun del un programador, proveer de mecanismos de activacición de metodos, cuando el
sisJAVA TEMA operativo, informa que se ha realizado un evento , entre dos objetos del programa.
Dentro de un programa, lo mas comun es derivar un objeto de una clase ya predeterminada o
porpocionada muy amablemente por los fabricantes de compiladores, por ejemplo cuando se crearón
applets o servlets, se estuvierón realmente creando objetos derivados de las clases Applet o de la clase
HttpServlet, es decir prog1 o prog5 , etc son realmente objetos derivados de esas clases.
Tambien cuando se realizarón programas visuales, las clases Frame, TextField, Panel, etc, dieron
origen a muchos objetos.
Es tambien tarea común en programación derivar un objeto de alguna clase y agregarle nuevos
metodos o propiedades, para darle mayor funcionalidad al nuevo objeto, no nada mas usar los metodos
o propiedades que el fabricante de compiladores tuvo la gentileza de darle, como se ha estado haciendo
en todos los programas realizados hasta la fecha.
Sin embargo por motivos didacticos, empezamos nuestra unidad de oop, creando nuestras propias
clases, y derivando objetos de nuestras propias clases, para aplicarlos en nuestros programas.
UNIDAD 6: JAVA PROGRAMACION ORIENTADA OBJETOS OOP
JAVA TEMA 7: JAVA CLASES PROPIAS
Construyamos un ejemplo java , donde se crea un clase propia(llamada formulas) que contiene varios
metodos( pesos-dllrs, areatriangulo, etc).
Existen varias maneras de incorporar una nueva clase a un programa normal, de tipo consola, gui,
applet, etc.
a. Ponerla dentro del propio programa:
import java.io.*;
public class prog27 {
public static void main(String[] args) {
//para usar clase y metodos usar notacion clase.metodo
double area=formulas.areatriangulo((double)10,(double)20);
System.out.println("area="+area);
int prom=formulas.promedio(10,20);
System.out.println("promedio="+prom);
} // cierra main
} // cierra clase
// solo poner abajo las clases propias
class formulas{
// no se me ocurrio ninguna propiedad solo metodos y constructor
void formulas(){};
static double areatriangulo( double base, double altura)
{ return base* altura /2.0 ;};
static double pesosdolares (int pesos, double tipocambio)
{ return pesos/tipocambio; };
static int promedio (int calif1, int calif2)
{return (calif1+calif2)/2 ;};}
B)Similar al ejemplo anterior, pero se crea un objeto hijo, derivado de nuestra clase:
import java.io.*;
public class prog28 {
public static void main(String[] args) {
// tambien es valido crea objetos derivados de clase propia
formulas formhija=new formulas();
//para usar clase y metodos usar notacion clase.metodo
double area=formhija.areatriangulo((double)10,(double)20);
System.out.println("area="+area);
int prom=formhija.promedio(10,20);
System.out.println("promedio="+prom);
} // cierra main
} // cierra clase
// solo poner abajo las clases propias
class formulas{
// no se me ocurrio ninguna propiedad solo metodos y constructor
void formulas(){};
static double areatriangulo( double base, double altura)
{ return base* altura /2.0 ;};
static double pesosdolares (int pesos, double tipocambio)
{ return pesos/tipocambio; };
static int promedio (int calif1, int calif2)
{return (calif1+calif2)/2 ;}; }
c) Tambien es valido, crearlas y compilarlas por separado, tanto la clase propia, como la clase principal,
solo tener cuidado de poner las dos clases en el mismo nivel de directorio, para que javac pueda
hallarlas y no olvidar que en caso de problemas usar set classpath=.; antes de usar javac.
import java.io.*; import formulas.*;
public class prog29 {
public static void main(String[] args) {
double area=formulas.areatriangulo((double)10,(double)20);
System.out.println("area="+area);
int prom=formulas.promedio(10,20);
System.out.println("promedio="+prom);
} // cierra main
} // cierra clase
E) Tambien es valido crear un paquete(que es tambien un folder o subdirectorio) donde se pueden
poner todas nuestras clases, pero la clase propia debe llevar una instrucción especial que indica que
pertenece al paquete o folder:
Formula.class
//ver la instruccion y recordar crear el folder y renombrarlo con
// el nombre de paquete, esta clase propia se debe poner dentro de
//este folder paquete
package paquete;
public class formulas{
// no se me ocurrio ninguna propiedad solo metodos y constructor
public static void formulas(){};
public static double areatriangulo( double base, double altura)
{ return base* altura /2.0 ;};
public static double pesosdolares (int pesos, double tipocambio)
{ return pesos/tipocambio; };
public static int promedio (int calif1, int calif2)
{return (calif1+calif2)/2 ;}; }
El folder que tiene adentro nuestra clase propia, se debe poner en un nivel abajo de donde se encuentra
la clase principal, ver siguiente grafico:
El programa que llama nuestro paquete y nuestra clase es:
import java.io.*; import paquete.*;
public class prog30 {
public static void main(String[] args) {
double area=formulas.areatriangulo((double)10,(double)20);
System.out.println("area="+area);
int prom=formulas.promedio(10,20);
System.out.println("promedio="+prom);
} // cierra main
} // cierra clase
f)Ejemplo con un servlet y clase propia, poner las dos juntas en el mismo directorio.
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import formulas.*;
public class prog31 extends HttpServlet
{ public void doPost (HttpServletRequest request, HttpServletResponse
ServletException, IOException {
double base=10; double altura=20;
double area = formulas.areatriangulo(base,altura);
PrintWriter pagina; response.setContentType("text/html");
pagina = response.getWriter();
pagina.println("<HTML>");
pagina.println("area="+area);
pagina.println("</HTML>");
pagina.close();
destroy();
}; // termina dopost
public void destroy(){super.destroy();};
}// termina class
response)
throws
El ejemplo con jsp, se los debo para el proximo semestre, porque mi servidor se nego a tenerlas juntas
las dos clases y luego importarlas, de momemento solo agregar clases y metodos directamente dentro
del jsp.
TAREAS JAVA JSP JAVA SERVLET
generar un clase propia y usarla en un programa de consola, gui, applet, servlet y jsp
UNIDAD 7: JAVA REGISTROS Y ARCHIVOS SECUENCIALES
TEMA : INTRODUCCION ARCHIVOS DISCO
Antes de empezar a programar en serio, analizaremos en esta unidad dos problemas.
Problema A:
Variables que puedan almacenar un conjunto de valores y no necesariamente del mismo tipo.
Problema B:
Resolver el problema de almacenar en forma permanente los datos que se generan dentro de un
programa ya sea por captura, proceso, etc;
El problema (A) se resuelve usando el concepto de estructuras o registros, el problema (B) se
resuelve usando el concepto de archivos.
UNIDAD 7: JAVA REGISTROS Y ARCHIVOS SECUENCIALES
JAVA TEMA 2: JAVA REGISTROS
Ya se ha visto como variables simples pueden almacenar una sola pieza de información y como
arreglos pueden almacenar un conjunto de ellas del mismo tipo y al mismo tiempo, estos dos
mecanismos pueden manejar una gran variedad de situaciones, pero a menudo se necesita
trabajar sobre datos de diversos tipos, en este caso ni variables escalares ni arreglos son
adecuados.
Para resolver estos problemas los lenguajes de programación proveen de un tipo de dato especial
llamado registros.
Un registro es una variable especial que tiene la capacidad de almacenar datos de diferentes
tipos.
Sin embargo JAVA, usa en su lugar una CLASE.
Este metodo tiene la ventaja de que ademas de incluir los campos tradicionales de un registro (en
forma de atributos), tambien puede incorporar una serie de metodos que permiten procesar de
manera mas facil los campos o atributos de la clase.
Ejemplo;
class alumno{
void alumno(){};
static String nombre= new String();
static int edad;
void inicializar(){
alumno.nombre="pepe el toro";
alumno.edad=18; };
void desplegar(){
System.out.println(alumno.nombre);
System.out.println(alumno.edad);
};
} // termina la clase
Programa ejemplo;
import java.io.*;
class prog33{
public static void main(String[] args) {
alumno.inicializar();
alumno.desplegar();
} // cierra main
} // cierra clase
class alumno{
void alumno(){};
static String nombre= new String();
static int edad;
static void inicializar(){
alumno.nombre="pepe el toro";
alumno.edad=18; };
static void desplegar(){
System.out.println(alumno.nombre);
System.out.println(alumno.edad);
};
} // temina la clase
corrida:
Para indicar a "java" durante cualquier proceso que la variable a utilizar es un campo de una
clase, se debera utilizar el siguiente formato.
nomclase.nombredelcampo
TAREAS JAVA
1.-Crear una clase de alumno que incluya un metodo que capture 3 califaciones.(consola)
2.-Declarar una clase o registro de empleado, capturarlo y desplegarlo un numero indeterminado
de veces.(consola)
3.- Capturar una clase o registro de empleados, aumentar sueldo en 25% y desplegar.( java
servlet )
4.-Capturar una clase o registro de cuentas por cobrar, mandar imprimir un aviso si el saldo esta
atrazado.( java servlet )
UNIDAD 7: REGISTROS Y ARCHIVOS SECUENCIALES
JAVA TEMA 3: JAVA ARCHIVOS DISCO (INTRODUCCION)
Si bien es cierto que ya se pueden manejar gran cantidad de datos del mismo y diferente tipo al
mismo tiempo, el problema es que al terminar de ejecutarse el programa los datos se pierden.
De esta situación nace el concepto de archivos que son medios que facilita el lenguaje para
almacenar los datos en forma permanente, normalmente en los dispositivos de almacenamiento
standar.
En general es necesario entender algunos conceptos elementales de sisJAVA TEMA s de
archivos tradicionales.
Como nota a tomar en cuenta los datos que se van almacenando en un archivo de disco, se
almacenan en renglones consecutivos y cada renglon en disco, se conoce como registro del
archivo, favor de no confundir el concepto de registro de archivo y registro o estructura como
variable ya analizada, son dos cosas totalmente diferentes aunque se llamen igual.
Primero operaciones con archivos:
A. ESCRIBIR O GRABAR: Es la operacion mas elemental con un archivo, consiste en tomar
un o unos datos en variables de cualquier tipo (escalar, mezcla de datos, arreglo,
structuras) y almacenarlas en un archivo de datos en disco.
B. LEER: Operación consistente en sacar los datos del archivo en disco y mandarlo o cargar
la variable respectiva
Segundo organización de archivos:
En general existen dos tipos de archivos:
A. Archivos Secuenciales.- En este caso los datos se almacenan en forma consecutiva y no
es posible leer(recuerdan que significa esta operación) ningun registro (recuerdan la nota
de arriba) directmente, es decir para leer el registro n, se debera recorrer o accesar los n-1
registros anteriores.
B. Archivos Directos o Random.- Para este caso, si se puede acceder o leer un renglon n
cualquiera.
Tercero tipo de archivos:
A) En general, existen tantos tipos de archivos como tipos de datos existen, es decir existen
archivos de bytes, de chars, de ints, de floats, etc.
ATENCION: Ya que se decide utilizar algun archivo especifico de datos(caracteres, strings,
formateados, registros o arreglos) solo utilizar las funciones de escritura y lectura de ese tipo de
archivo, por ningun motivo mezcle funciones de lectura y escritura de otro tipo de archivos.
Cuarto almacenamiento en arhivos:
A. Modo Texto: en este caso los datos son almacenados, usando Ascii y por tanto son
plenamente visibles, usando cualquier editor.
B. Modo Binario: en este caso los datos son almacenados en notación hexadecimal y por
tanto se ocupa un editor binario para reconocerlos, sin embargo un archivo binario es mas
compacto que un archivo texto.
UNIDAD 7: JAVA REGISTROS Y ARCHIVOS SECUENCIALES
JAVA TEMA 4: JAVA ARCHIVOS SECUENCIALES
Existen ademas muchas operaciones asociadas a archivos, las mas elementales son:
1.- Creación de Archivo.- En este proceso se pretende solamente crear un archivo nuevo en disco,
con su nombre, tipo y especialidad de almacenamiento de datos apropiado.
2.- Apertura de Archivos.- En este caso se pretende abrir un archivo ya existente en disco para
procesarlo, ya sea cargar o grabar datos en sus registros, o leer algun registro en especial para
mandarlo a una variable de cualquier tipo.
No confundir creación con apertura, creación es un proceso que solo se ejecuta una sola vez en la
vida de un archivo, mientras que apertura, siempre se esta realizando por los programas
especializados en algun proceso.
3.-Cierre de archivos: Es la operación mas importante en cualquier programa que maneje
archivos, o se cierra el archivo como ultima instrucción del pograma o se vera el anuncio
ABORT,RETRY,FAIL.
98, /s, scandisk
4.-Altas en archivo.- En este proceso se carga una clase en memoria con sus datos pertinentes y
se graba la clase en el archivo en disco.
5.-Lectura de archivo.- En este proceso, se abre el archivo y se manda el registro de disco, a una
clase en memoria para su procesamiento.
6.- Consulta de archivos: En este proceso se pretende desplegar todos los registros del archivo en
disco a la pantalla, ya sea consola o mejor aún, a una pagina html
7.-Busqueda en archivos: Una de las operaciones mas comunes, consiste en que el usuario pide
toda la información de algun renglon en disco, porporcionando la información de algun campo,
generalmente el campo clave de la clase.
8.- Filtros.- En este proceso el usuario esta interesado en algun conjunto de renglones con
caracteristicas comunes (condición), por ejemplo todos los alumnos de "sisJAVA TEMA s", o todos
los empleados que ganen mas de $500.00 pesos, o todos los clientes que sean de "tijuana", etc
9.-Modificaciones de registros o archivos: Problema muy comun, donde los datos originales ya
grabados se tienen que cambiar o actualizar, por ejemplo el nombre no era "juan" es "juana", o la
calificación no es 100 es 20, etc.
10.- Bajas de registros: tambien muy comun este proceso,por ejemplo el alumno ya egreso, el
cliente huyo, etc.
UNIDAD 7: JAVA REGISTROS Y ARCHIVOS SECUENCIALES
JAVA TEMA 5: JAVA GRABACION ARCHIVO SECUENCIAL
En java Grabación y lectura son los dos procesos mas comunes con archivos en cualquier
lenguaje de programación.
Codigo de grabación:
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
public class prog34 extends HttpServlet
{ public void doPost (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// se debe crear un objeto de tipo archivo
DataOutputStream archivo = null;
//historia triste se deben grabar y leer solo campo a campo
// creando e inicializando los campos
int matricula=0;
String nombre=new String("");
int edad=0;
Integer temp1=new Integer(0);
try{
//* Creando y grabando a un archivo, esta larga la instrucción*/
archivo
=
new
DataOutputStream(
FileOutputStream("c:\\xitami\\servlets\\susitio\\archivo1.dat",true) );
//capturando y convirtiendo los datos de la pagina
temp1 = temp1.valueOf( request.getParameter("MATRICULA"));
matricula= temp1.intValue();
nombre=request.getParameter("NOMBRE");
temp1 =temp1.valueOf(request.getParameter("EDAD"));
edad= temp1.intValue();
new
//grabando al archivo
archivo.writeInt(matricula);
archivo.writeUTF(nombre);
archivo.writeInt(edad);
archivo.close();
//pagina de aviso
PrintWriter pagina;
response.setContentType("text/html");
pagina = response.getWriter();
pagina.println("<HTML>");
pagina.println("REGISTRO? INSERTADO USAR BACK PARA REGRESAR E INSERTAR
OTRO");
pagina.println("</HTML>");
pagina.close();
}
catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }
catch (IOException ioe) { /* Error al escribir */ }
destroy();
};
public void destroy(){super.destroy();};
}
NOTAS:
Se
construye
la
aplicacion
de
tipo
java
servlet
Se usa una clase llamada FileOutputStream, especializada en archivos con muchos metodos y
constructores para crear, manipular y procesar archivos, el constructor usado solo lleva dos
parametros, el primero todo la ruta o path a donde quedara el archivo(cuidado con no poner la
doble diagonal \\) y el segundo parametro es la palabra "true", esto es para que el archivo se abra
en modo llamado "APPEND", es decir que cada nuevo registro se vaya escribiendo al final del
archivo, si no se pone este parametro(true), un nuevo registro se sobreescribiria sobre el registro
anterior.
Sin embargo en el programa no se uso FILEOUTPUSTREAM( solo para crear el archivo), sino se
usa DATAOUTPUTSTREAM, esta segunda clase es derivada de la anterior y comparte muchos
de sus metodos, la diferencia es que fileoutputstream esta especializada en grabar y leer bytes,
mientras que dataoutputstream esta especializada en grabar y leer datos formateados, observar
que los metodos que uso el objeto archivo, se especializan en algun tipo de dato en especial, sus
metodos son:
Method Summary
void
flush() Flushes this data output stream.
int
size() Returns the current value of the counter written, the number of bytes written to this
data output stream so far.
void
write(byte[]
b,
int
off,
int
len)
Writes len bytes from the specified byte array starting at offset off to the underlying
output stream.
void
write(int b) Writes the specified byte (the low eight bits of the argument b) to the
underlying output stream.
void
writeBoolean(boolean v) Writes a boolean to the underlying output stream as a 1-byte
value.
void
writeByte(int
Writes out a byte to the underlying output stream as a 1-byte value.
void
WriteBytes (String s) Writes out the string to the underlying output stream as a sequence
of bytes.
void
writeChar(int v) Writes a char to the underlying output stream as a 2-byte value, high
byte first.
void
WriteChars (String s) writes a string to the underlying output stream as a sequence of
characters.
void
writeDouble(double
v)
Converts the double argument to a long using the doubleToLongBits method in class
Double, and then writes that long value to the underlying output stream as an 8-byte
quantity, high byte first.
v)
void
writeFloat(float v) Converts the float argument to an int using the floatToIntBits method in
class Float, and then writes that int value to the underlying output stream as a 4-byte
quantity, high byte first.
void
writeInt(int
Writes an int to the underlying output stream as four bytes, high byte first.
v)
void
writeLong(long
Writes a long to the underlying output stream as eight bytes, high byte first.
v)
void
writeShort(int
Writes a short to the underlying output stream as two bytes, high byte first.
v)
void
writeUTF (String str) writes a string to the underlying output stream using UTF-8
encoding in a machine-independent manner.
TABLA TOMADA DEL API DE JAVA
Observar que la grabación lleva un try-catch filenotfound y ioexception, que son obligatorios o no
compila el programa.
No olvidar cerrar el archivo, con la instruccion archivo.close
El Codigo html que alimenta este java servlet es el siguiente:
<HTML>
<FORM ACTION=http://programacionfacil.com:9090/servlet/susitio.prog34 METHOD=POST>
RECORDAR QUE PARA SERVLETS EL PUERTO ES 9090<BR>
MATRICULA:<INPUT TYPE=TEXT NAME=MATRICULA><BR>
NOMBRE:<INPUT TYPE=TEXT NAME=NOMBRE><BR>
EDAD:<INPUT TYPE=TEXT NAME=EDAD><BR>
<INPUT TYPE=SUBMIT VALUE=GRABAR>
</FORM></HTML>
TAREAS JAVA JSP JAVA SERVLET
1.- crear y cargar un archivo2.dat que contenga registros de empleados.
2.- crear y cargar un archivo3.dat que contenga registros de productos
UNIDAD 7: REGISTROS Y ARCHIVOS SECUENCIALES
JAVA TEMA 6: LECTURA ARCHIVO SECUENCIAL
El proceso de lectura de los registros de un archivo secuencial es realmente sencillo, como lo
muestra el siguiente codigo ejemplo;
Codigo html que llama el programa.java:
<HTML>
<FORM ACTION=http://programacionfacil.com:9090/servlet/susitio.prog35 METHOD=POST>
<INPUT TYPE=SUBMIT VALUE=LECTURA>
</FORM></HTML>
Codigo.java:
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
public class prog35 extends HttpServlet
{public void doPost (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{ DataInputStream archivo = null;
int matricula=0;
String nombre=new String("");
int edad=0;
PrintWriter pagina;
response.setContentType("text/html");
pagina = response.getWriter();
pagina.println("<HTML>");
pagina.println("<P ALIGN="+"CENTER"+">ALUMNOS TABLA</P>");
pagina.println("<P ALIGN="+"CENTER"+">MATRICULA NOMBRE EDAD</P>");
pagina.println("<DIV ALIGN="+"CENTER"+"><CENTER>");
pagina.println("<TABLE BORDER="+"1"+">");
try{
//* abriendo archivo para lectura */
archivo = new DataInputStream( new FileInputStream("c:\\xitami\\servlets\\lauro\\archivo1.dat") );
//leyendo archivo
while (true) {
pagina.println("<TR>");
matricula=archivo.readInt();pagina.println("<TD>"+matricula+"</TD>");
nombre=archivo.readUTF();pagina.println("<TD>"+nombre+"</TD>");
edad=archivo.readInt();pagina.println("<TD>"+edad+"</TD>");
pagina.println("</TR>");}
}
catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }
catch (IOException ioe) { /* Error al escribir */ }
pagina.println("</TABLE></CENTER></DIV></HTML>");
archivo.close();
pagina.close();
destroy();
};
public void destroy(){super.destroy();};
}
Corrida:
Notas:
Observar en codigo que ahora se usan FILEINPUTSTREAM Y DATAINPUTSTREAM como clases
en fileinputstream, solo se uso el parametro de abrir archivo(no el true de append), estas clases se
especializan en archivos de lectura.
el ciclo de lectura se realiza con un while(true)
El codigio de html construye una tabla visual, recordar volver a leer el tutorial de html.
los metodos de DATAINPUTSTREAM SON:
Method Summary
int
read(byte[]
See the general contract of the read method of DataInput.
b)
int
read(byte[]
b,
int
off,
See the general contract of the read method of DataInput.
boolean
readBoolean()
See the general contract of the readBoolean method of DataInput.
byte
readByte()
See the general contract of the readByte method of DataInput.
char
readChar()
See the general contract of the readChar method of DataInput.
double
readDouble()
See the general contract of the readDouble method of DataInput.
float
readFloat()
See the general contract of the readFloat method of DataInput.
void
readFully(byte[]
See the general contract of the readFully method of DataInput.
void
readFully(byte[]
b,
int
off,
int
See the general contract of the readFully method of DataInput.
int
readInt()
See the general contract of the readInt method of DataInput.
String
readLine()
Deprecated. This method does not properly convert bytes to characters. As
of JDK 1.1, the preferred way to read lines of text is via the
BufferedReader.readLine() method. Programs that use the DataInputStream
class to read lines can be converted to use the BufferedReader class by
replacing code of the form:
DataInputStream d = new DataInputStream(in);
int
with:
BufferedReader d
= new BufferedReader(new InputStreamReader(in));
long
readLong()
See the general contract of the readLong method of DataInput.
short
readShort()
See the general contract of the readShort method of DataInput.
int
readUnsignedByte()
See the general contract of the readUnsignedByte method of DataInput.
len)
b)
len)
int
readUnsignedShort()
See the general contract of the readUnsignedShort method of DataInput.
String
readUTF()
See the general contract of the readUTF method of DataInput.
static String
readUTF(DataInput
in)
Reads from the stream in a representation of a Unicode character string
encoded in Java modified UTF-8 format; this string of characters is then
returned as a String.
int
skipBytes(int
See the general contract of the skipBytes method of DataInput.
n)
TAREAS JAVA
1.- java servlets que lean y desplieguen los archivos creados en el JAVA TEMA anterior.
2.- Construir una aplicacion, donde una pagina, llama a las paginas de lectura y escritura de un
archivo de provedores.
UNIDAD 7: REGISTROS Y ARCHIVOS SECUENCIALES
JAVA TEMA 7: PROCESOS CON ARCHIVOS SECUENCIALES
Recordar que existen una serie de procesos basicos con archivos, el famoso ABC(altas, bajas,
consultas y modificaciones) con ellos.
Actualmente estos procesos o similares a ellos se llaman insertar, eliminar, editar, etc, en las
modernas bases de datos pero esto lo analizaremos mas adelante.
El primer proceso, para un archivo secuencial es agregar una cantidad indefinida de registros al
archivo, este proceso ya esta resuelto con el programa de grabación ya hecho y con la ayuda del
servidor, basta que se este llamado cuantas veces sea necesaria la pagina que graba registros en
archivo.
Un segundo proceso mas comun(llamado consulta) es desplegar todos los registros del archivo a
la vez, problema tambien resuelto en el programa de lectura.
El tercer Proceso que "resolvemos" en este JAVA TEMA es la busqueda de un registro
determinado, en este proceso el usuario del programa quiere que se despliegue un y solo un
registro de información, proporcionando un dato de busqueda, generalmente la clave del registro.
La solucion es sencilla, solo tenemos que abrir el archivo para lectura, hacer un ciclo while(true),
condicionar y solo desplegar el registro cuando se cumpla la condición.
Codigo.html:
<HTML>
<FORM ACTION=http://programacionfacil.com:9090/servlet/susitio.prog36 METHOD=POST>
PAGINA DE BUSQUEDA<BR>
DAME MATRICULA A BUSCAR:<INPUT TYPE=TEXT NAME=MATRICULA><BR>
<INPUT TYPE=SUBMIT VALUE=BUSCAR>
</FORM></HTML>
Codigo Java:
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
public class prog36 extends HttpServlet
{ public void doPost (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{ DataInputStream archivo = null;
int matricula=0;
String nombre=new String("");
int edad=0;
Integer temp1=new Integer(0);
PrintWriter pagina;
response.setContentType("text/html");
pagina = response.getWriter();
pagina.println("<HTML>");
pagina.println("<P ALIGN="+"CENTER"+">ALUMNOS TABLA</P>");
pagina.println("<P ALIGN="+"CENTER"+">MATRICULA NOMBRE EDAD</P>");
pagina.println("<DIV ALIGN="+"CENTER"+"><CENTER>");
pagina.println("<TABLE BORDER="+"1"+">");
//capturando clave a buscar
temp1 = temp1.valueOf( request.getParameter("MATRICULA"));
int clave = temp1.intValue();
try{
//* abriendo archivo para lectura */
archivo = new DataInputStream( new FileInputStream("c:\\xitami\\servlets\\lauro\\archivo1.dat") );
//leyendo archivo y observar donde quedo TR
pagina.println("<TR>");
while (true) {
//leyendo registro
matricula=archivo.readInt();
nombre=archivo.readUTF();
edad=archivo.readInt();
//comparando y desplegar en condición cierta
if (clave == matricula){
pagina.println("<TD>"+matricula+"</TD>");
pagina.println("<TD>"+nombre+"</TD>");
pagina.println("<TD>"+edad+"</TD>");
pagina.println("</TR>");}; } }
catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }
catch (IOException ioe) { /* Error al escribir */ }
pagina.println("</TABLE></CENTER></DIV></HTML>");
archivo.close();
pagina.close();
destroy();
};
public void destroy(){super.destroy();};
}
Corrida pagina busqueda:
Corrida programa java:
TAREAS JAVA SERVLET
1.- Hacer java servlets de busquedas para los archivos hechos.
UNIDAD 7: JAVA REGISTROS Y ARCHIVOS SECUENCIALES
JAVA TEMA 8: FILTROS o CONDICIONES
Como su nombre lo indica en este proceso se pretende desplegar todo un conjunto de renglones
que cumplan con la condición, por ejemplo se pide desplegar todos los alumnos de "sisJAVA
TEMA s" o todos los empleados que sean de "sinaloa", etc.
Codigo html
<HTML>
<FORM ACTION=http://programacionfacil.com:9090/servlet/susitio.prog37 METHOD=POST>
PAGINA DE FILTRO<BR>
FILTRAR POR EDAD >=<INPUT TYPE=TEXT NAME=EDAD><BR>
<INPUT TYPE=SUBMIT VALUE=FILTRAR>
</FORM></HTML>
Codigo Java
import java.io.*; import javax.servlet.*;
import javax.servlet.http.*;
public class prog37 extends HttpServlet
{ public void doPost (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{ DataInputStream archivo = null;
int matricula=0;
String nombre=new String("");
int edad=0;
Integer temp1=new Integer(0);
PrintWriter pagina;
response.setContentType("text/html");
pagina = response.getWriter();
pagina.println("<HTML>");
pagina.println("<P ALIGN="+"CENTER"+">ALUMNOS TABLA</P>");
pagina.println("<P ALIGN="+"CENTER"+">MATRICULA NOMBRE EDAD</P>");
pagina.println("<DIV ALIGN="+"CENTER"+"><CENTER>");
pagina.println("<TABLE BORDER="+"1"+">");
//capturando condicion
temp1 = temp1.valueOf( request.getParameter("EDAD"));
int edad1 = temp1.intValue();
try{
//* abriendo archivo para lectura */
archivo = new DataInputStream( new FileInputStream("c:\\xitami\\servlets\\lauro\\archivo1.dat") );
//leyendo archivo
pagina.println("<TR>");
while (true) {
matricula=archivo.readInt();
nombre=archivo.readUTF();
edad=archivo.readInt();
if ( edad >= edad1){
pagina.println("<TD>"+matricula+"</TD>");
pagina.println("<TD>"+nombre+"</TD>");
pagina.println("<TD>"+edad+"</TD>");
pagina.println("</TR>");}; } }
catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ }
catch (IOException ioe) { /* Error al escribir */ }
pagina.println("</TABLE></CENTER></DIV></HTML>");
archivo.close();
pagina.close();
destroy();
};
public void destroy(){super.destroy();};
}
Corrida Condicion:
Corrida Programa:
TAREAS JAVA SERVLETS
1.- Filtrar el archivo de alumnos por carrera, java servlet
2.- Filtrar el archivo de productos por origen o por costo( a discreción), java jsp
UNIDAD 7: JAVA REGISTROS Y ARCHIVOS SECUENCIALES
JAVA TEMA 9: JAVA ELIMINACION ARCHIVO SECUENCIAL
Eliminar o dar de baja en un archivo secuencial de java , implica tener que estar procesando dos
archivos a la vez, el segundo de ellos es un archivo temporal, un algoritmo de eliminacion fisica
quedaria como:
Procedimiento :
1.- Abrir el archivo original en modo letcura.
2.- Abrir un archivo llamado temporal en modo escritura.
3.- Iniciar un ciclo de lectura del archivo original.
3a.- Dentro del ciclo leer el primer registro.
3b.- Validar el registro si no es eliminable, se escribe al
archivo temporal.
3c.- Fin de ciclo (cerrar el ciclo).
4.- Cerrar ambos archivos.
5.- eliminar el archivo original.
6.- renombrar el archivo temporal con el nombre de archivo original.
Una segunda tecnica, consiste en agregar un campo de estado (status) al registro, tal como se vio
en el curso anterior:
Sin embargo el proceso de baja se tiene que realizar en un sisJAVA TEMA de información, para
resolver este problema la respuesta es agregar un campo especial llamado status que puede ser
de tipo char, con algunos caracteres de control que se puedan cargar en el por ejemplo una 'a'
siginifica que esta en alta, una 'b' significa que esta en baja, etc.
Lo unico que se tiene que hacer, es que cuando se agrega o manda el registro por primera vez a
disco, mandarlo cargado el campo de status con 'a' y estar validando con if siempre este campo
en cualquier proceso de busqueda o condicion o despliegue, si se encuentra cargado con 'b'
entonces solo avisar al usuario que esta de baja dicho registro."
TAREAS PROGRAMACION JAVA SERVLET
1.- Agregar un modulo de eliminacion o baja, a los archivos ya construidos, java servlets
UNIDAD 7: REGISTROS Y ARCHIVOS SECUENCIALES
JAVA TEMA 10: MODIFICACION O EDICION DE REGISTROS
Modificar o editar un registro es uno de los procesos mas comunes con archivos en disco,
generalmente despues de un fuerte proceso de captura de registros, una revisión o consulta
general, muestra muchos de ellos con errores de captura.
Y para el proximo curso de java, dare la implementacion de este proceso y tambien la de
archivos directos.
Estos problemas se resuelven usando objetos serializables que permiten grabar la clase
directamente a disco en forma secuencial o en forma directa ya grabados de este modo se
pueden usar tecnicas convencionales de tratamiento de archivos como las ya descritas.
UNIDAD 9: JAVA BASES DE DATOS
TEMA 1: JAVA INTRODUCCION BASE DE DATOS
En el principio fue el caos, aparecierón muchos lenguajes de programación y cada uno de ellos
con su propio sistema, lenguaje(instruciones) y formatos de archivos, y luego empeoró la situación
cuando empezarón a aparecer software especializado en archivos y bases de datos, tambien con
las mismas carcateristicas.
Conforme fue creciendo la necesidad de intercambiar datos entre archivos creados con lenguajes
de programación diferentes y programas de bases de datos, empezo a surgir la necesidad de un
lenguaje(con instrucciones comunes para todos ellos), de esta manera o necesidad aparece SQL
(lenguaje estructurado de consultas), en la actualidad lenguajes de programación y software de
base de datos (DBMS) aparte de su lenguaje nativo, tienen las capacidad de trabajar con
instrucciones de SQL.
Por supuesto las compañias especializadas en lenguajes de programación y en DBMS,
inmediatamente empezarón internamente a mejorar el SQL interno que incorporarón.
Pero como podemos transferir datos entre un archivo o base de datos creado en "X" o "Y"
lenguaje o DBMS y un lenguaje o DBMS diferente.
Una compañia muy conocida propuso la creacion de traductores especializados en traducir SQL al
lenguaje nativo de cada uno de los DBMS o lenguajes de programación y viseversa, dicha
compañia fue MICROSOFT y lo que propuso fue ODBC(open data base conectivity), es decir un
driver que sirviera de canal de comunicación entre la base de datos y otro dbms o lenguaje de
programación, ademas de traductor del lenguaje nativo a SQL.
En este esquema la empresa que fabrica un DBMS, por ejemplo, escribe su propio Driver ODBC y
lo pone a disposición del resto de las empresas, esto es lo mismo para las empresas que fabrican
lenguajes de programacion.
Porque son las empresas, las que tienen que escribir su propio driver ODBC?, la respuesta es
muy sencilla, se supone que como ellas conocen a fondo su lenguaje o dbms, le es mas facil
hacer su traductor ODBC.
En este modelo una aplicación hecha en pascal, primero activa su driver ODBC que a su vez,
establece un enlace o canal de comunicación con el otro driver ODBC de la base de datos con la
que se quiera comunicar, por ejemplo un driver ODBC de oracle o informix.
Ya abierto el canal de odbc - odbc, el programa puede inyectar codigo sql, para realizar los
procesos comunes con la base de datos.
Aqui tenemos el primer punto de referencia para construir programas en java que procesen una
base de datos creada en un DBMS, por ejemplo ACCESS, FOXPRO, INSTANTBASE, INFORMIX,
ETC.
LA manera de comunicarse por el canal ODBC - ODBC es usando el lenguaje común en ambas,
el SQL.
Como ya se indico, SQL, es un lenguaje especializado en procesar bases de datos y por tanto, ES
NECESARIO, IMPRESCINDIBLE Y OBLIGATORIO QUE CONSIGAN UN TUTORIAL DE SQL LO
RESUMAN Y LO TENGAN A LA MANO, porque se va usar dentro de nuestros programas o
aplicaciones de java que se quieran comunicar con una base de datos.
Una de las ventajas de SQL es que es tambien un lenguaje de programacion muy sencillo, con
pocas instrucciones, las que mas interesan son las mas elementales, SELECT, UPDATE,
DELETE, INSERT.
Observar que entraron a tomar este curso, para aprender el lenguaje de programacion JAVA y
tambien tuvierón que aprender el lenguaje de programación HTML y ahora el lenguaje de
programación SQL, tres cursos de programación, por el precio de uno, WOWW.
Por supuesto que la empresa SUN, la fabricante del lenguaje JAVA, nunca escribio su driver
ODBC, por la sencilla razon de que lo propuso microsoft, en su lugar SUN, propone otro driver
especializado y con el mismo fin, llamado JDBC(java database conectivity), que segun ellos (y los
hechos lo confirman) es mas seguro, rapido, eficiente que ODBC.
Ahora las demas empresas especializadas en lenguajes de programación o en DBMS, tienen que
producir dos drivers ( ODBC y JDBC ) para cada uno de sus productos.
Ambos drivers o traductores son incompatibles, y por supuesto que microsoft le regreso el favor a
sun y tampoco fabrica un driver JDBC para sus productos.
Entonces como se construye una aplicacion en java que tenga que procesar una base de datos
hecha en access, existen dos maneras, la primera de ellas es que hay algunas empresas
especializadas en drivers que han fabricado odbcs para java y sus productos y jdbcs para
microsoft y sus productos, por supuesto que si empeño hasta la camisa, probablemente alcanze a
dar el enganche de alguno de ellos.
La otra solución, es que Sun, en su infinita misericordia proporciona, no un driver sino un
bridge(puente) llamado JDBCODBCdriver, que es un doble traductor, es decir java se comunica
con la parte jdbc de este puente luego este puente lo convierte a odbc que ya se puede comunicar
con el odbc de access, cuando el proceso es inverso, access le manda los datos a su odbc que a
su vez los manda al odbc del puente este ultimo lo transfiere a jdbc y este se lo manda a java,
esto significa un doble traducción en la parte de java, con el consiguiente retraso en la aplicación
o programa en java.
Para efectos de este curso, utilizaremos este puente (JDBCODBC ) por la parte de java y el
ODBC de Microsoft Access , por razones conocida ($$$).
TEMA 2: ACCESS Y JAVA ODBC
En este tema no se pretende enseñar a construir una base de datos en access, lo que se
pretende es conectar la base de datos a su traductor o driver ODBC.
Primero deberan crear un folder en el disco C:\, en mi ejemplo le puse base (muy original), cargar
access y crear una base de datos y guardarla en el folder antes mencionado,( yo le puse
mibase.mdb), ya creada la base, crearle una tabla con los campos apropiados y grabarla (yo le
puse tabla, con campos clave, nombre,edad).
Cargarle algunos registros o renglones de prueba para la tabla.
Salirse de access y cargarle el driver odbc, procedimiento:
Nota: este procedimiento depende de la version de windows que se este usando, yo uso win2000,
pero es muy similar(no igual) para todos los windows.
1.- Abrir control panel y se encuentran una opcion que dice algo de data sources y odbc.(en
win2000 se encuentra dentro de administrative tools).
2.- Abrir data sources:
Observar que hay drivers para access 97 y access mas nuevos, yo uso access 97.
En otros windows, esta pantalla sale despues que se usa user dsn (creo).
3.- Usarla opcion ADD (debe estar seleccionado el driver apropiado),y aparece la siguiente
pantalla.
Observar que se vuelve a seleccionar el driver de access.
4.- Usar opcion finish y sale la siguiente pantalla:
En Data Source Name, solo escribir el nombre de la base de datos.
Luego usar el boton select, para que salga la pantalla de busqueda de archivos normal de
windows, buscar el folder, seleccionar la base de datos y ok, ahora debe verse el path completo
en esta pantalla(donde dice Database: C:\base\mibase.mbd).
5.- Usar OK y los regresa a la pantalla de inicio:
La diferencia con la pantalla original, es que ya esta registrada la base, y ya tiene asignado su
driver odbc.
Tarea Java armar su base de datos con una tabla y registrarle un driver odbc.
JAVA TEMA 3: CONSULTA SQL SELECT
Empezamos por un programa-servlet que lee y despliega la tabla que esta en la base de datos
construida en el JAVA TEMA anterior:
La instruccion basica de SQL a usar es:
SELECT * FROM MITABLA;
Codigo.html
<HTML>
<FORM ACTION=http://192.168.1.133/servlet/prog38 METHOD=POST>
<INPUT TYPE=SUBMIT VALUE=OK>
</FORM></HTML>
No olvidar que tambien la base de datos ya debe estar enlazada a su odbc driver.
Codigo java
import java.io.*; import java.util.*; import java.net.*; import java.sql.*; import javax.servlet.*; import
javax.servlet.http.*;
public class prog38 extends HttpServlet {
static Connection canal = null;
static ResultSet tabla= null;
static Statement instruccion=null;
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};
response.setContentType("text/html");
try { tabla = instruccion.executeQuery("select * from tabla");
PrintWriter pagina =response.getWriter();
pagina.println("<HTML><HEAD><TITLE>MI SERVLET</TITLE></HEAD>");
pagina.println("<P ALIGN="+"CENTER"+">MI TABLA</P>");
pagina.println("<P ALIGN="+"CENTER"+">CLAVE NOMBRE EDAD</P>");
pagina.println("<DIV ALIGN="+"CENTER"+"><CENTER>");
pagina.println("<TABLE BORDER="+"1"+">");
while(tabla.next()) {
pagina.println("<TR>");
pagina.println("<TD>"+tabla.getString(1)+"</TD>");
pagina.println("<TD>"+tabla.getString(2)+"</TD>");
pagina.println("<TD>"+tabla.getString(3)+"</TD>");
pagina.println("</TR>"); }; // fin while
pagina.println("</TABLE></CENTER></DIV></HTML>");
pagina.close();
tabla.close(); } //fin try no usar ; al final de dos o mas catchs
catch(SQLException e) {};
destroy();
try {canal.close();} catch(SQLException e) {};
};//fin dopost
public void destroy() {super.destroy();};
} //fin clase
notas:
Observar todos los Imports
Se empiezan creando tres variables, una de tipo conección llamado canal que se usara para
enlazar los dos drivers.
La segunda variable de tipo ResultSet, llamada tabla que se cargara con la tabla que esta en la
base de datos, es de recordar que esta tabla(no confundirla con la que esta en disco) no solo
contendra todos los renglones de la tabla en disco, sino tambien toda la información asociada a
esa tabla(cantidad y numero de columnas, tipos de datos, fonts, etc).
Una instrucción de tipo Statement, que tiene como finalidad contener el codigo SQL que se usara
para comunicarse entre el programa en java y la base de datos en access.
El metodo post() normal que primero usa un try (siguiente nota de abajo) y luego otro try que crea
la instrucción de tipo statement y luego la carga con el SQL, el resultado(la tabla de access que
regresa) la almacenamos en la tabla.
Observar el try que activa el jdbcodbcdriver que usa java, y despues hacer la conección o enlaze
con el odbc de la base, observar lo parametros con comillas en blanco, son el login y el password
de la base hecha en access.
Es de tomar muy en cuenta que variables de tipo ResultSet (tabla ) tienen muchos metodos que
seran muy utiles para el trabajo con tablas, en otras palabras, deberan estudiar con mucho
cuidado la clase ResultSet y sus metodos.
Despues se crea una pagina con una tabla html, para irla cargando con nuestra tabla.
Observar que se usa un ciclo while(tabla.next()) para recorrer todos los renglones de nuestra
tabla, es importante tambien recordar que en cuento llega de regreso la tabla en access y se
carga en nuestra tabla en memoria, un apuntador de renglones queda en la posición anterior o
arriba de todos los renglones, por eso el primer next()(metodo de resultset), nos lleva al primer
renglon real de la tabla.
Observar que se usa el metodo getString(NUMERO O "NOMBRE COLUMNA"), tambien de
ResultSet, para ir leyendo y desplegando el dato en la tabla html.
Es muy importante entender que cuando se abre una sesion o canal entre java y access debera
cerrarse tambien y tambien es muy importante entender que por esa sesion o canal solo se podra
inyectar una y solo una instruccion de sql, aunque java provee de mecanismos que permiten
inyectar un grupo de instrucciones de sql, pero estos mecanismos se veran para el siguiente curso
de java que se de.
Corrida:
TAREAS PROGRAMACION JAVA SERVLET
Hacer java servlets de lectura y despliegue, para las tablas hechas.
JAVA TEMA 4: INSERCCION SQL INSERT
Recordar que en base de datos, la operacion de agregar renglones o registros recibe el nombre
de insercción.
La instrucción basica de SQL a usar es:
insert into tabla values (10, 'lauro','tijuana', 821055);
// y se usa executeUpdate se usa para insert, update y delete
Otro elemento importante a recordar es que se ocupan claves de preferencia numericas y
consecutivas, por esta razon en el diseño de la base de datos en access se pidio que el campo
clave fuese de tipo autonumber para que al ir agregando renglones access les fuese agregando la
clave en forma consecutiva.
Como se resuelve este problema en java???
La solución que se propone en el programa ejemplo es primero abrir una sesion o canal en su
propio procedimiento(se acuerdan de la penultima unidad del curso??), cargar la tabla en memoria
con una instrucción select como se hizo en el ejemplo anterior, navegar al ultimo renglon
tabla.last(), leer el valor de la primera columna en una variable entera llamada clave e incrementar
esta variable en una unidad y listo ya tenemos la clave del siguiente renglon, no olvidar cerrar este
canal o sesion( si se acuerdan que solo se puede inyectar una instruccion sql en una sesioncanal??).
Despues ya en una segunda sesion-canal, se hace el insert del SQL, como lo muestra el
programa ejemplo.
Programa HTML
<HTML>
<FORM ACTION=http://192.168.1.133/servlet/prog39 METHOD=POST>
NOMBRE:<INPUT TYPE=TEXT NAME=NOMBRE><BR>
EDAD:<INPUT TYPE=TEXT NAME=EDAD><BR>
<INPUT TYPE=SUBMIT VALUE=GRABAR>
</FORM></HTML>
Observar que no se pide la clave al usuario.
SERVLET
Codigo JAVA
import java.io.*; import java.util.*; import java.net.*; import java.sql.*; import javax.servlet.*; import
javax.servlet.http.*;
public class prog39 extends HttpServlet {
static Connection canal = null;
static ResultSet tabla= null;
static Statement instruccion=null;
static int clave=0;
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//cargando clave en su propia sesion-canal
cargarclave();
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){System.out.println("classnotfound");}
catch(SQLException e) {System.out.println("error de enlace canal");}//fin try
response.setContentType("text/html");
//cargando los demas campos a grabar
String nombre = request.getParameter("NOMBRE");
//capturando y conviertiendo edad str-obj-var
Integer temp=Integer.valueOf(request.getParameter("EDAD"));
int edad= temp.intValue();
// insert into tabla values(clave, 'nombre', edad);
String q="insert into tabla values(" +clave +",'"+ nombre+"',"+edad+") ";
try { // agregando renglon (insert) y observar que es executeupdate()
int n=instruccion.executeUpdate(q);
//avisando que se hizo la instruccion
PrintWriter pagina =response.getWriter();
pagina.println("<HTML>");
pagina.println(n+"YA SE INSERTO, BACK PARA REGRESAR");
pagina.println("</HTML");
pagina.close(); } //termina try
catch(SQLException e) { System.out.println("error del sql probable mala instruccion sql"); }; //fin
catch
destroy();
try {canal.close();} catch(SQLException e) {System.out.println("error el cerrar el canal");};
} ;//fin dopost
//construyendo procedimiento cargarclave() con su propia sesion-canal
static void cargarclave(){
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }
catch(java.lang.ClassNotFoundException e)
{System.out.println("no pude encontrar el driver"); }; //fin try
try {canal=DriverManager.getConnection("jdbc:odbc:mibase"," "," ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
//select ocupa executequery()
tabla = instruccion.executeQuery("Select * from tabla");
// calculo de reng y/o clave
tabla.last(); int numreng=tabla.getRow(); tabla.beforeFirst();
clave=numreng+1;
instruccion.close(); canal.close();
} catch(SQLException ex){ System.out.println("error en sql"); };//fin try catch
};//fin cargarclave()
//otro procedimiento
public void destroy() {super.destroy();};
}//fin clase prog39
Recordar que un programa bien documentado (como este que les estoy mostrando) es
autoexplicativo
Corrida HTML
Corrida java (usando programa anterior prog38 para ver la insercción).
TAREAS JAVA SERVLET
Cosntruir java servlets que inserten registros o renglones en sus tablas de su base de datos, seria
bueno agregar la posibilidad de que cuando se avise de que ya se hizo la inserccion, se pudiese
mandar llamar al programa que despliega lo tabla en disco (prog38).
JAVA TEMA 5: JAVA SQL SELECT BUSQUEDA
Uno de los procesos basicos con tablas es la llamada busqueda, en este proceso generalmente el
usuario porporciona la clave del registro y entonces el programa o aplicación le despliega todos
los datos del renglón.
Codigo html:
<HTML>
<FORM ACTION=http://192.168.1.133/servlet/prog40 METHOD=POST>
CLAVE:<INPUT TYPE=TEXT NAME=CLAVE><BR>
<INPUT TYPE=SUBMIT VALUE=BUSCAR>
</FORM></HTML>
Codigo java:
import java.io.*; import java.util.*; import java.net.*; import java.sql.*;
import javax.servlet.*; import javax.servlet.http.*;
public class prog40 extends HttpServlet {
static Connection canal = null;
static ResultSet tabla= null;
static Statement instruccion=null;
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};
response.setContentType("text/html");
//capturando clave a buscar
Integer temp=Integer.valueOf(request.getParameter("CLAVE"));
int clave1= temp.intValue();
//buscando y recuperando
try{
tabla= instruccion.executeQuery("Select * from tabla where clave ="+clave1+" ");
PrintWriter pagina =response.getWriter();
pagina.println("<HTML><HEAD><TITLE>MI SERVLET</TITLE></HEAD>");
pagina.println("<P ALIGN="+"CENTER"+">MI TABLA</P>");
pagina.println("<P ALIGN="+"CENTER"+">CLAVE NOMBRE EDAD</P>");
pagina.println("<DIV ALIGN="+"CENTER"+"><CENTER>");
pagina.println("<TABLE BORDER="+"1"+">");
while(tabla.next()) {
pagina.println("<TR>");
pagina.println("<TD>"+tabla.getString(1)+"</TD>");
pagina.println("<TD>"+tabla.getString(2)+"</TD>");
pagina.println("<TD>"+tabla.getString(3)+"</TD>");
pagina.println("</TR>"); }; // fin while
pagina.println("</TABLE></CENTER></DIV></HTML>");
pagina.close();
tabla.close(); } //fin try no usar ; al final de dos o mas catchs
catch(SQLException e) {};
destroy();
try {canal.close();} catch(SQLException e) {};
};//fin dopost
public void destroy() {super.destroy();};
} //fin clase
Sencillo, se usa la instrucción SQL SELECT con una clausula where.
Se sigue usando el codigo de tabla completa de html, porque es indistinto que se despliegue un
renglon o cien.
CORRIDA html:
corrida java:
tareas java seguir construyendo java servlets de busqueda para sus tablas y base de datos
JAVA TEMA 6: FILTROS O CONDICIONES SQL SELECT
Como su nombre lo indica,en este proceso se pretende desplegar todo un conjunto de renglones
que cumplan con la condición, por ejemplo se pide desplegar todos los alumnos de "sisJAVA
TEMA s" o todos los empleados que sean de "sinaloa", etc.
En este caso el resultado es un conjunto de renglones de la tabla que cumplan la condición,
simple o compuesta.
Codigo html:
<HTML>
<FORM ACTION=http://192.168.1.133/servlet/prog41 METHOD=POST>
EDAD >=<INPUT TYPE=TEXT NAME=EDAD><BR>
<INPUT TYPE=SUBMIT VALUE=BUSCAR>
</FORM></HTML>
Codigo Java:
import java.io.*; import java.util.*; import java.net.*; import java.sql.*;
import javax.servlet.*; import javax.servlet.http.*;
public class prog41 extends HttpServlet {
static Connection canal = null;
static ResultSet tabla= null;
static Statement instruccion=null;
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};
response.setContentType("text/html");
//capturando dato de filtro
Integer temp=Integer.valueOf(request.getParameter("EDAD"));
int edad1= temp.intValue();
//filtrando, edad>=100 c/u puede ser un text en html
try{
tabla= instruccion.executeQuery("Select * from tabla where edad >= "+edad1);
PrintWriter pagina =response.getWriter();
pagina.println("<HTML><HEAD><TITLE>MI SERVLET</TITLE></HEAD>");
pagina.println("<P ALIGN="+"CENTER"+">MI TABLA</P>");
pagina.println("<P ALIGN="+"CENTER"+">CLAVE NOMBRE EDAD</P>");
pagina.println("<DIV ALIGN="+"CENTER"+"><CENTER>");
pagina.println("<TABLE BORDER="+"1"+">");
while(tabla.next()) {
pagina.println("<TR>");
pagina.println("<TD>"+tabla.getString(1)+"</TD>");
pagina.println("<TD>"+tabla.getString(2)+"</TD>");
pagina.println("<TD>"+tabla.getString(3)+"</TD>");
pagina.println("</TR>"); }; // fin while
pagina.println("</TABLE></CENTER></DIV></HTML>");
pagina.close();
tabla.close(); } //fin try no usar ; al final de dos o mas catchs
catch(SQLException e) {};
destroy();
try {canal.close();} catch(SQLException e) {};
};//fin dopost
public void destroy() {super.destroy();};
} //fin clase
Otra vez un programa sencillo, con una instrucción SELECT de SQL.
Corrida html:
Corrida java:
tareas java sugeridas, construir dos o tres java servlets de filtro, en uno de ellos poner los tres
inputs texts para que el usuario contruya completamente la condición.(suerte)
JAVA TEMA 7: BAJAS O ELIMINACION SQL DELETE
Baja o eliminación, es un proceso comun tambien con los registros o renglones de las tablas en
las bases de datos.
Lo bueno es que existe la instruccion SQL DELETE solo observar bien el cambio que se hace en
el execute.
Para todos los select vistos en los procesos se uso la instrucción executequery(instrucciónsql),
pero para insert, delete y update se debera usar executeupdate(instrucciónsql).
Codigo Html:
<HTML>
<FORM ACTION=http://192.168.1.133/servlet/prog42 METHOD=POST>
CLAVE A ELIMINAR:<INPUT TYPE=TEXT NAME=CLAVE><BR>
<INPUT TYPE=SUBMIT VALUE=DELETE>
</FORM></HTML>
Codigo Java:
import java.io.*; import java.util.*; import java.net.*; import java.sql.*;
import javax.servlet.*; import javax.servlet.http.*;
public class prog42 extends HttpServlet {
static Connection canal = null;
static ResultSet tabla= null;
static Statement instruccion=null;
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};
response.setContentType("text/html");
//capturando clave a eliminar
Integer temp=Integer.valueOf(request.getParameter("CLAVE"));
int clave1= temp.intValue();
String borrar=" DELETE FROM tabla WHERE clave = "+clave1;
//executeUpdate se usa para insert, update y delete executequery para select
//y en access cuando se construya la relación no olvidar poner en cierto
//enforce relational integrity, cascade update y cascade delete
try{
//eliminando
instruccion.executeUpdate(borrar);
PrintWriter pagina =response.getWriter();
pagina.println("<HTML>");
pagina.println("BORRADO BACK TO REGRESAR");
pagina.println("</HTML>");
pagina.close();
tabla.close(); } //fin try no usar ; al final de dos o mas catchs
catch(SQLException e) {};
destroy();
try {canal.close();} catch(SQLException e) {};
};//fin dopost
public void destroy() {super.destroy();};
} //fin clase
Corrida de vista tabla original(prog38):
Corrida html de eliminacion:
Corrida tabla ya con eliminación, usando prog38:
tareas java, servlets servlets y mas servlets de eliminación para todas sus tablas en la base de
datos.
JAVA TEMA 8: EDICION O MODIFICACION SQL UPDATE
Tambien problema común en base de datos, modificar los datos de un renglón de la tabla es
sencillo, porque se usa la instrucción UPDATE de SQL.
Lo dificil es la logica del programa:
Primero construir un programa html de busqueda por clave, que traiga el registro o renglon a
modificar.
Segundo construir un primer servlet muy parecido al de busqueda con la unica diferencia que
responde con una pagina html que despliega los datos de la tabla pero en un una forma dinamica
<FORM> </FORM> esta forma dinamica le permitira al usuario editar o modificar los datos a su
antojo, ya modificados los datos en esta forma se llamara a un segundo servlet.
Este segundo servlet captura los datos ya modificados o editados y utiliza la instrucción SQL
UPDATE para hacer la actualización de la tabla en disco.
Codigo HTML:
<HTML>
<FORM ACTION=http://192.168.1.133/servlet/prog43 METHOD=POST>
CLAVE A MODIFICAR:<INPUT TYPE=TEXT NAME=CLAVE><BR>
<INPUT TYPE=SUBMIT VALUE=BUSCAR>
</FORM></HTML>
Codigo servlet busqueda y pagina dinamica:
import java.io.*; import java.util.*; import java.net.*; import java.sql.*;
import javax.servlet.*; import javax.servlet.http.*;
public class prog43 extends HttpServlet {
static Connection canal = null;
static ResultSet tabla= null;
static Statement instruccion=null;
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){} catch(SQLException e) {};
response.setContentType("text/html");
//capturando clave a modificar
Integer temp=Integer.valueOf(request.getParameter("CLAVE"));
int clave1= temp.intValue();
//buscando y recuperando
try{
tabla= instruccion.executeQuery("Select * from tabla where clave ="+clave1+" ");
//recordar moverse al primer renglon
tabla.next();
PrintWriter pagina =response.getWriter();
pagina.println("<HTML>");
//construyendo forma dinamica, recordar que se insistio en no usar "" en html
pagina.println("<FORM ACTION=http://192.168.1.133/servlet/prog44 METHOD=POST>");
pagina.println("CLAVE:<INPUT
TYPE=TEXT
NAME=CLAVE
VALUE="+tabla.getString(1)+"><BR>");
pagina.println("NOMBRE:<INPUT
TYPE=TEXT
NAME=NOMBRE
VALUE="+tabla.getString(2)+"><BR>");
pagina.println("EDAD:<INPUT TYPE=TEXT NAME=EDAD VALUE="+tabla.getString(3)+"><BR>");
pagina.println("<INPUT TYPE=SUBMIT VALUE=MODIFICAR>");
pagina.println("</FORM></HTML>");
pagina.close();
tabla.close(); } //fin try no usar ; al final de dos o mas catchs
catch(SQLException e) {};
destroy();
try {canal.close();} catch(SQLException e) {};
};//fin dopost
public void destroy() {super.destroy();};
} //fin clase
Segundo servlet que actualiza tabla disco:
import java.io.*; import java.util.*; import java.net.*; import java.sql.*; import javax.servlet.*; import
javax.servlet.http.*;
public class prog44 extends HttpServlet {
static Connection canal = null;
static ResultSet tabla= null;
static Statement instruccion=null;
static int clave=0;
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
canal=DriverManager.getConnection("jdbc:odbc:mibase", " ", " ");
instruccion = canal.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
} catch(java.lang.ClassNotFoundException e){System.out.println("classnotfound");}
catch(SQLException e) {System.out.println("error de enlace canal");}
response.setContentType("text/html");
//cargando los campos a modificar
Integer temp=Integer.valueOf(request.getParameter("CLAVE"));
int clave1= temp.intValue();
String nombre = request.getParameter("NOMBRE");
//capturando y conviertiendo edad
temp=Integer.valueOf(request.getParameter("EDAD"));
int edad= temp.intValue();
// y el formato de update es:
// update tabla set campo1=dato, campo2=dato where clave = 300;
// se supone que la clave no se ocupa modificar solo el resto de campos
String q = "UPDATE tabla SET " +
"NOMBRE='" + nombre +
"', EDAD='" + edad +
"' WHERE clave=" + clave1;
try {
// modificando renglon (update)
int n=instruccion.executeUpdate(q);
//avisando que se hizo la instruccion
PrintWriter pagina =response.getWriter();
pagina.println("<HTML>");
pagina.println(n+"YA SE MODIFICO, BACK PARA REGRESAR");
pagina.println("</HTML");
pagina.close(); } //termina try
catch(SQLException e) { System.out.println("error del sql probable mala instruccion sql"); };
destroy();
try {canal.close();} catch(SQLException e) {System.out.println("error el cerrar el canal");};
} ;//fin dopost
public void destroy() {super.destroy();};
}//fin clase prog44
tan tan el curso se acabo y a empezar a construir su proyecto un java servelet que tenga dos
tablas basicas y una tabla de relacion 1-kte, suerte.
Descargar