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 5.- GRABACION 6.- LECTURA 7.- BUSQUEDA 8.- FILTROS O CONDICIONES 9.- BAJAS O ELIMINACION 10.- EDICION O MODIFICACION

Sección: AC4 Revisión: 05 Abril 2009

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 BASE ALTURA Operación AREA= BASE * ALTURA / 2 Salida 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 (integers) byte short int long Byte-length integer Short integer Integer Long integer 8-bit two's complement 16-bit two's complement 32-bit two's complement 64-bit two's complement Description Size/Format

(real numbers) float double Single-precision floating point Double-precision floating point 32-bit IEEE 754 64-bit IEEE 754

(other types) char boolean

A single character A boolean value (true or false)

16-bit Unicode character 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  am

= 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 protected void addNotify() Makes this Frame displayable by connecting it to a native screen resource. finalize() We have to remove the (hard) reference to weakThis in the Vector, otherwise the WeakReference instance will never get garbage collected. getAccessibleContext() Gets the AccessibleContext associated with this Frame. getCursorType() Deprecated. As of JDK version 1.1, replaced by Component.getCursor(). getFrames() Returns an array containing all Frames created by the application. getIconImage() Gets the image to be displayed in the minimized icon for this frame. getMenuBar()

AccessibleContext int static Frame[] Image MenuBar

Gets the menu bar for this frame. int String boolean protected String void void getState() Gets the state of this frame. getTitle() Gets the title of the frame. isResizable() Indicates whether this frame is resizable by the user. paramString() Returns the parameter String of this Frame. remove(MenuComponent Removes the specified menu bar from this frame. m)

removeNotify() Makes this Frame undisplayable by removing its connection to its native screen resource. setCursor(int cursorType) Deprecated. As of JDK version 1.1, replaced by Component.setCursor(Cursor). setIconImage(Image Sets the image to displayed in the minimized icon for this frame. setMenuBar(MenuBar Sets the menu bar for this frame to the specified menu bar. setResizable(boolean Sets whether this frame is resizable by the user. setState(int Sets the state of this frame. setTitle(String Sets the title for this frame to the specified string. image) mb) resizable) state) title)

void void void void void void

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 void add(String Adds the specified item to the end of scrolling list. item)

add(String item, int index) Adds the specified item to the the scrolling list at the position indicated by the index. addActionListener(ActionListener Adds the specified action listener to receive action events from this list. addItem(String Deprecated. replaced by add(String). addItem(String item, Deprecated. replaced by add(String, int). int l)

void void void void void boolean void int void void

item) index) l)

addItemListener(ItemListener Adds the specified item listener to receive item events from this list. addNotify() Creates the peer for the list. allowsMultipleSelections() Deprecated. As of JDK version 1.1, replaced by isMultipleMode(). clear() Deprecated. As of JDK version 1.1, replaced by removeAll(). countItems() Deprecated. As of JDK version 1.1, replaced by getItemCount(). delItem(int Deprecated. replaced by remove(String) and remove(int). delItems(int start, int

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 int String[] EventListener[] getItem(int Gets the item associated with the specified index. getItemCount() Gets the number of items in the list. getItems() Gets the items in the list. 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. getMinimumSize() Determines the minimum size of this scrolling list. getMinimumSize(int rows) Gets the minumum dimensions for a list with the specified number of rows. getPreferredSize() Gets the preferred size of this scrolling list. getPreferredSize(int rows) Gets the preferred dimensions for a list with the specified number of rows. getRows() Get the number of visible lines in this list. getSelectedIndex() Gets the index of the selected item on the list, getSelectedIndexes() Gets the selected indexes on the list. getSelectedItem() Get the selected item on this scrolling list. getSelectedItems() Get the selected items on this scrolling list. getSelectedObjects() Returns the selected items on the list in an array of Objects. index)

Dimension Dimension Dimension Dimension int int int[] String String[] Object[]

int

getVisibleIndex() Gets the index of the item that was last made visible by the method makeVisible. isIndexSelected(int Determines if the specified item in this scrolling list is selected. isMultipleMode() Determines whether this list allows multiple selections. isSelected(int index) Deprecated. As of JDK version 1.1, replaced by isIndexSelected(int). makeVisible(int Makes the item at the specified index visible. minimumSize() Deprecated. As of JDK version 1.1, replaced by getMinimumSize(). minimumSize(int rows) Deprecated. As of JDK version 1.1, replaced by getMinimumSize(int). paramString() Returns the parameter string representing the state of this scrolling list. preferredSize() Deprecated. As of JDK version 1.1, replaced by getPreferredSize(). preferredSize(int rows) Deprecated. As of JDK version 1.1, replaced by getPreferredSize(int). processActionEvent(ActionEvent e) Processes action events occurring on this component by dispatching them to any registered ActionListener objects. processEvent(AWTEvent Processes events on this scrolling list. e) index) index)

boolean boolean boolean void Dimension Dimension protected String Dimension Dimension protected void

protected void protected void

processItemEvent(ItemEvent e) Processes item events occurring on this list by dispatching them to any registered ItemListener objects. remove(int Remove the item at the specified position from this scrolling list. remove(String Removes the first occurrence of an item from the list. position) item)

void void void

removeActionListener(ActionListener l) Removes the specified action listener so that it no longer receives action events from this list.

void void

removeAll() Removes all items from this list. removeItemListener(ItemListener l) Removes the specified item listener so that it no longer receives item events from this list. removeNotify() Removes the peer for this list. replaceItem(String newValue, int index) Replaces the item at the specified index in the scrolling list with the new string. select(int Selects the item at the specified index in the scrolling list. index)

void void

void void void

setMultipleMode(boolean b) Sets the flag that determines whether this list allows multiple selections. setMultipleSelections(boolean b) Deprecated. As of JDK version 1.1, replaced by setMultipleMode(boolean).

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(); //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>");

new

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 int void flush() Flushes this data output stream. size() Returns the current value of the counter written, the number of bytes written to this data output stream so far. write(byte[] b, int off, int len) Writes len bytes from the specified byte array starting at offset off to the underlying output stream. write(int b) Writes the specified byte (the low eight bits of the argument b) to the underlying output stream. writeBoolean(boolean v) Writes a boolean to the underlying output stream as a 1-byte value. writeByte(int Writes out a byte to the underlying output stream as a 1-byte value. v)

void void void void void void void

WriteBytes (String s) Writes out the string to the underlying output stream as a sequence of bytes. writeChar(int v) Writes a char to the underlying output stream as a 2-byte value, high byte first. WriteChars (String s) writes a string to the underlying output stream as a sequence of characters. 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.

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. writeInt(int Writes an int to the underlying output stream as four bytes, high byte first. writeLong(long Writes a long to the underlying output stream as eight bytes, high byte first. writeShort(int Writes a short to the underlying output stream as two bytes, high byte first. v) v) v)

void void void 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 int boolean byte char double float void void int String read(byte[] See the general contract of the read method of DataInput. read(byte[] b, int off, See the general contract of the read method of DataInput. int b) len)

readBoolean() See the general contract of the readBoolean method of DataInput. readByte() See the general contract of the readByte method of DataInput. readChar() See the general contract of the readChar method of DataInput. readDouble() See the general contract of the readDouble method of DataInput. readFloat() See the general contract of the readFloat method of DataInput. readFully(byte[] See the general contract of the readFully method of DataInput. readFully(byte[] b, int off, int See the general contract of the readFully method of DataInput. readInt() See the general contract of the readInt method of DataInput. 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); with: BufferedReader d = new BufferedReader(new InputStreamReader(in)); b) len)

long short int

readLong() See the general contract of the readLong method of DataInput. readShort() See the general contract of the readShort method of DataInput. readUnsignedByte() See the general contract of the readUnsignedByte method of DataInput.

int String static String

readUnsignedShort() See the general contract of the readUnsignedShort method of DataInput. readUTF() See the general contract of the readUTF method of DataInput. 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. skipBytes(int See the general contract of the skipBytes method of DataInput. n)

int

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.

Sign up to vote on this title
UsefulNot useful