Tutorial Java
Short Description
Descripción: Tutorial para manejar Java...
Description
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp Incluyen programas tareas ejemplo y aplicación arreglos y Access.
CONTENIDO
Sección: AC4 Revisión: 05 Abril 2009
UNIDAD I: ELEMENTOS BASICOS 1.- INTRODUCCION 2.- MODELO DE SOLUCION 3.- VARIABLES 4.- TIPOS DE DATOS 5.- CLASES NUMERICAS 6- OPERADORES ARITMETICOS 7.- OPERADOR CAST Y CONVERSIONES 8.- JERARQUIA DE OPERACIONES 9.- APLICACIONES 10.- APLICACIONES POR CONSOLA 11.- APLICACIONES (CONTINUACION) II UNIDAD .- APLICACIONES VISUALES Y APPLETS 1.- APLICACIONES VISUALES Y APPLETS 2.- FRAME PROPIEDADES 3.- FRAME Y METODOS 4.- ENTRADA/SALIDA 5.- LABEL 6.- TEXTFIELD 7.- BUTTON 8.- PRACTICA 9.- LAYOUTS 10.- PANELES 11.- PANEL 12.- JSPLITPANE 13.- JSCROLLPANE 14.- JTABBEDPANE 15.- JTOOLBAR 16.- JCOMBOBOX III UNIDAD: APLICACIONES EN RED 1.- INTRODUCCION 2.- APPLET Y JAPPLET 3.- APPLET Y JAPPLET CONTINUACION 4.- SERVLETS 5.- SERVLETS CONTINUACION 6.- JAVA SERVER PAGE (JSP) 7.- JSP CONTINUACION I 8.- JSP CONTINUACION II
Alejandro Huapaya Sànchez
Pág. 1 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp Incluyen programas tareas ejemplo y aplicación arreglos y Access.
CONTENIDO
Sección: AC4 Revisión: 05 Abril 2009
IV UNIDAD.- CONTROL DE PROGRAMA 1.- INTRODUCCION 2.- INSTRUCCIONES CONDICIONALES 3.- CONDICIONES SIMPLES 4.- INSTRUCCION IF() 5.- IF() CONTINUACION 6.- CONDICIONES COMPUESTAS 7.- INSTRUCCION SWITCH() 8.- COMPONENTES VISUALES DE SELECCION Y DECISION 9.- COMPONENTE CHECKBOX 10.- COMPONENTE JRADIOBUTTON 11.- MENUS 12.- POPUPMENU 13.- CICLO FOR 14.- CICLO WHILE 15.- CICLO DOWHILE 16.- CONCLUSIONES DE CICLOS V UNIDAD.- ARREGLOS 1.- INTRODUCCION 2.- ARREGLOS TRADICIONALES 3.- ARREGLOS TIPO LISTA 4.- LISTAS(CONTINUACION) 5.- COMPONENTE LIST 6.- LISTAS EN SEVLETS Y JSP 7.- ARREGLOS TIPO TABLA VI UNIDAD.- OOP 1.- PROCEDIMIENTOS Y FUNCIONES 2.- PARAMETROS 3.- VARIABLES LOCALES Y GLOBALES 4.- FUNCIONES 5.- INT A OOP 6.- CLASES 7.- CLASES PROPIAS VII UNIDAD.- REGISTROS Y ARCHIVOS SECUENCIALES 1.- INTRODUCCION 2.- REGISTROS 3.- ARCHIVOS 4.- ARCHIVO SECUENCIAL Alejandro Huapaya Sànchez
Pág. 2 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp Incluyen programas tareas ejemplo y aplicación arreglos y Access.
CONTENIDO
Sección: AC4 Revisión: 05 Abril 2009
5.- GRABACION 6.- LECTURA 7.- BUSQUEDA 8.- FILTROS O CONDICIONES 9.- BAJAS O ELIMINACION 10.- EDICION O MODIFICACION IX.- BASES DE DATOS 1.- INTRODUCCION 2.- ACCESS Y ODBC 3.- CONSULTA 4.- INSERCCION 5.- BUSQUEDA 6.- FILTROS O CONDICIONES 7.- BAJAS O ELIMINACION 8.- EDICION O MODIFICACION X UNIDAD.- MULTIPROCESAMIENTO
Alejandro Huapaya Sànchez
Pág. 3 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
JAVA 1.- INTRODUCCION En el mundo moderno, las necesidades de información se han incrementado bastante en la vida diaria de los individuos asi como de las organizaciones. Esta nueva necesidad se esta cubriendo con la integracion y participacion personal y de las empresas, hacia la red de redes, el Internet I, y esperen a internet2. Nuevos paradigmas de programacion se ocupan para la creacion de nuevos sisJAVA TEMA s y necesidades creativas de informacion. Java un lenguaje de programacion moderno implementado en su versión final por la compañía www.java.sun.com a a finales de 1996, se ha convertido en el lenguaje estandar, para la construccion de aplicaciones basadas en internet. Los nuevos sisJAVA TEMA s de información son costosos en tiempos y recursos, la solución moderna de sisJAVA TEMA s de información exigen nuevas herramientas y metodologías para resolver rápida, económica y eficiente los problemas de información planteados por las organizaciones. Aun mas el pleno potencial del hardware no es aprovechado plenamente y existe un considerable retraso con el software y sus aplicaciones, generando lo que se conoce como "crisis del software". En programación tradicional, modular o estructurada un programa describe una serie de pasos a ser realizados para la solución de un problema, es decir es un algoritmo. En programación orientada a objetos ( OOP ) un programa es considerado como un sisJAVA TEMA de objetos interactuando entre sí, ambientes de desarrollo visuales facilitan aun más la construcción de programas y solución de problemas, porque permiten abstraer al ingeniero de software de todo el GUI (interfase gráfica) del problema, que constituye más del 60% del código normal de un programa. Es decir, en programación modular o estructurada un problema sencillo de información es descompuesto en una serie de módulos(llamados procedimientos o funciones) donde cada uno de ellos realiza una tarea específica, por ejemplo uno de ellos captura los datos, otro resuelve operaciones, etc. En OOP todo problema aun aquellos sencillos de información, se consideran y resuelven como módulos de código gigante (clase) que contiene todo el código necesario(variables, procedimientos, funciones, interfaces, etc.) para solucionar el problema. En programación visual( que también es heredera de OOP ),la interfase con el usuario( pantallas) son generadas por el propio compilador y el ingeniero de software solo se concentra en resolver el problema planteado. En programacion java basica, se tiene la mezcla de lo mejor de estos tres mundos, es decir construimos programas, aplicaciones y sisJAVA TEMA s de informacion usando tecnivas estructuradas, contruyendo objetos y diseñando sisJAVA TEMA s graficos, y todo orientado a la construcción de sisJAVA TEMA s de información basados en redes de cualquier tipo o tamaño. 2.- JAVA MODELO DE SOLUCION En general un problema de información es posible entenderlo, analizarlo y descomponerlo en todos sus componentes o partes que de una u otra manera intervienen tanto en su planteamiento como en su solución. Alejandro Huapaya Sànchez
Pág. 4 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
Una herramienta rápida que nos permite descomponer en partes un problema para su solución, es el llamado modelo de solución, este consiste de una pequeña caja que contiene los tres elementos más básicos en que se puede descomponer cualquier problema sencillo de información, estas tres partes son: a. LA PRIMERA PARTE son todos los datos que el computador ocupa para resolver el problema, estos datos son almacenados internamente en la memoria del computador en las llamadas variables de entrada. b. LA SEGUNDA PARTE son todas las operaciones generalmente algebraicas necesarias para solucionar el problema, generalmente esta parte del modelo es una formula (o igualdad matemática, ej. X= y + 5). c. LA TERCERA PARTE es el resultado o solución del problema que generalmente se obtiene de la parte de operaciones del modelo y dichos datos están almacenados en las llamadas variables de salida. En resumen para todo problema sencillo de información es necesario plantearse las siguientes preguntas: * Que datos ocupa conocer el computador para resolver el problema y en cuales variables de entrada se van a almacenar ? * Que procesos u operaciones debe realizar el computador para resolver el problema planteado ? * Que información o variables de salida se van a desplegar en pantalla para responder al problema planteado originalmente? Como nota importante no confundir los términos datos, variables e información; Datos se refiere a información en bruto, no procesada ni catalogada, por ejemplo "Tijuana", "calle primera # 213","15 años", " $2,520.00", etc. Variables es el nombre de una localidad o dirección interna en la memoria del computador donde se almacenan los datos, ejemplo de variables para los casos del inciso anterior, CIUDAD, DIRECCION, EDAD, SUELDO, ETC. Información son datos ya procesados que resuelven un problema planteado. EJEMPLO DE MODELO DE SOLUCION Construir un modelo de solución que resuelva el problema de calcular el área de un triángulo con la formula área igual a base por altura sobre dos. ENTRADA
Operación
Salida
BASE ALTURA
AREA= BASE * ALTURA / 2
AREA
PROBLEMA 2.- CONVERTIR LA EDAD EN AÑOS DE UNA PERSONA A MESES. PROBLEMA 3.- CONVERTIR PESOS A DOLARES. PROBLEMA 4.- CALCULAR EL AREA DE UN CIRCULO CON LA FORMULA AREA = PI * RADIO2 PROBLEMA 5.- EVALUAR LA FUNCION Y = 5 X2 – 3X + 2 PARA CUALQUIER VALOR DE X. Observar para el caso de constantes fijas o conocidas (PI) no se debe dar como dato de entrada su valor, en cambio colocar directamente su valor dentro de la formula, en la parte de operaciones del problema.
Alejandro Huapaya Sànchez
Pág. 5 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
Pero recordar también que existirán problemas sencillos donde: No se ocupan entradas o no se ocupan operaciones, pero todos ocupan salida. Una formula grande o muy compleja puede ser más segura y fácil de resolver, si es descompuesta y resuelta en partes, juntando al final los parciales para obtener el resultado final. Un problema puede tener más de una solución correcta. El problema no esta suficientemente explicado o enunciado, entonces, estudiarlo, analizarlo y construirlo de manera genérica. TAREAS JAVA Construir los modelos de solución de los siguientes problemas para construir despues programas java: PROBLEMA 6.- Convertir millas a kilómetros(caso normal) PROBLEMA 7.- Convertir 125 metros a centímetros(no ocupa entradas) PROBLEMA 8.- Se calcula que en promedio hay 4.7 nidos en cada árbol en la UABC, también se calcula que en cada nido existen un promedio de 5.8 pájaros, se pide calcular la cantidad total de nidos y de pájaros en los 227 arboles que existen en la UABC. (no ocupa entradas) PROBLEMA 9.- La gorda Sra. López y sus 8 hijos solo compran una vez al mes su mandado en conocido supermercado, en dicha tienda el kilogramo de frijol cuesta $8.75, el paquete de tortillas cuesta $3.55 y el frasco de café vale $14.25, si solo compran de estos tres productos para su mandado, calcular su gasto total. ( problema no claro) PROBLEMA 10.- Capturar y desplegar los cinco datos mas importantes de un automóvil(no ocupa operaciones) PROBLEMA 11.- La distancia Tijuana - Ensenada es de 110 kilómetros. Si un automóvil la recorre a una velocidad constante de 30 millas por hora, cuanto tiempo tarda en llegar. ( 1 milla = 1.609 Km.) (dos maneras correctas de resolverlo). PROBLEMA 12.-Evaluar la función Y = 3X2 + 2X – 5 para cualquier valor de x.(caso normal). PROBLEMA 13.-Evaluar la función Y = – 5X3 – 3X2 + 8 para cuando x vale 4 . (no ocupa entradas). 3.- JAVA VARIABLES Identificadores son conjuntos de letras y/o números que se utilizan para simbolizar todos los elementos que en un programa, son definibles por el usuario (programador o ingeniero de software) del mismo, como son las variables donde se almacenan datos, funciones( pequeños módulos con código), etiquetas, clases, objetos, etc. En java un identificador es una palabra compuesta de letras y/o números de hasta 32 caracteres significativos, empezando siempre con una letra. Una variable se define como un identificador que se utiliza para almacenar todos los datos generados durante la ejecución de un programa. En java jsp y servlets existen ciertas reglas en cuanto a variables: • Claras y con referencia directa al problema. • No espacios en blanco, ni símbolos extraños en ellas. • Se pueden usar abreviaturas, pero solo de carácter general. No deben ser palabras reservadas del lenguaje. Ejemplos de buenas variables: Nombre, Edad, SdoDiario, IngMensual, Perímetro, Calif1, etc. Alejandro Huapaya Sànchez
Pág. 6 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
4.- TIPOS DE DATOS A toda variable que se use en un programa, se le debe asociar (generalmente al principio del programa) un tipo de dato específico. Un tipo de dato define todo el posible rango de valores que una variable puede tomar al momento de ejecución del programa y a lo largo de toda la vida útil del propio programa. Los tipos de datos más comunes en java son: Primitive Data Types Keyword
Description
Size/Format
byte
Byte-length integer
8-bit two's complement
short
Short integer
16-bit two's complement
int
Integer
32-bit two's complement
long
Long integer
64-bit two's complement
(integers)
(real numbers) float
Single-precision floating point
32-bit IEEE 754
double
Double-precision floating point
64-bit IEEE 754
(other types) char
A single character
16-bit Unicode character
boolean
A boolean value (true or false)
true or false
•
TABLA TOMADA DE JAVA.SUN.COM DOCUMENTATION
Como se observa es muy similar a las de c o c++. Para el caso de strings se debera usar la Clase String que tiene dos constructores, de momento entenderemos esto ultimo como dos maneras de crearse, ej; a. String nombre= new String(); b. String ciudad= new String("Tijuana"); Con JAVA en este ultimo caso se crea la string y se inicializa con un dato o valor. 5. JAVA CLASES ESPECIALES En java como lenguaje de programacion orientado a objetos, existen aparte de la clase String, vista en el JAVA TEMA anterior cuatro clases especiales, desendientes de la clase numbers, que contienen una serie de metodos que facilitan la interaccion con los usuarios de nuestras aplicaciones en captura y despliegue de datos numericos. Alejandro Huapaya Sànchez
Pág. 7 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
Sin embargo su caracteristica mas importante a tomar en cuenta, es que objetos numericos derivados de estaS clase, no pueden entrar a operaciones DIRECTAMENTE, ni recibir el resultado de operaciones. Class Integer public final class java.lang.Integer extends java.lang.Number { // Fields public final static int MAX_VALUE; public final static int MIN_VALUE; // Constructors public Integer(int value); public Integer(String s); // Methods public double doubleValue(); public boolean equals(Object obj); public float floatValue(); public static Integer getInteger(String nm); public static Integer getInteger(String nm, int val); public static Integer getInteger(String nm, Integer val); public int hashCode(); public int intValue(); public long longValue(); public static int parseInt(String s); public static int parseInt(String s, int radix); public static String toBinaryString(int i); public static String toHexString(int i); public static String toOctalString(int i); public String toString(); public static String toString(int i); public static String toString(int i, int radix); public static Integer valueOf(String s); public static Integer valueOf(String s, int radix); } Esta clase convierte un dato de tipo int a un objeto. Este objeto contiene un solo campo de tipo int. Pero tambien el objeto contiene una serie de metodos para convertir un valor int a una String y tambien para convertir una String a int. Ademas de otros metodos de igual utilidad.
Alejandro Huapaya Sànchez
Pág. 8 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
** Clase y notas tomadas directamente de java.sun Class Double public final class java.lang.Double extends java.lang.Number { // Fields public final static double MAX_VALUE; public final static double MIN_VALUE; public final static double NaN; public final static double NEGATIVE_INFINITY; public final static double POSITIVE_INFINITY; // Constructors public Double(double value); public Double(String s); // Methods public static long doubleToLongBits(double value); public double doubleValue(); public boolean equals(Object obj); public float floatValue(); public int hashCode(); public int intValue(); public boolean isInfinite(); public static boolean isInfinite(double v); public boolean isNaN(); public static boolean isNaN(double v); public static double longBitsToDouble(long bits); public long longValue(); public String toString(); public static String toString(double d); public static Double valueOf(String s); } ** La misma fuente y las mismas notas de la clase anterior Class Float public final class java.lang.Float extends java.lang.Number { // Fields public final static float MAX_VALUE; public final static float MIN_VALUE;
Alejandro Huapaya Sànchez
Pág. 9 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
public final static float NaN; public final static float NEGATIVE_INFINITY; public final static float POSITIVE_INFINITY; // Constructors public Float(double value); public Float(float value); public Float(String s); // Methods public double doubleValue(); public boolean equals(Object obj); public static int floatToIntBits(float value); public float floatValue(); public int hashCode(); public static float intBitsToFloat(int bits); public int intValue(); public boolean isInfinite(); public static boolean isInfinite(float v); public boolean isNaN(); public static boolean isNaN(float v); public long longValue(); public String toString(); public static String toString(float f); public static Float valueOf(String s); } *** La misma fuente y notas anteriores Class Long public final class java.lang.Long extends java.lang.Number { // Fields public final static long MAX_VALUE; public final static long MIN_VALUE; // Constructors public Long(long value); public Long(String s); // Methods public double doubleValue();
Alejandro Huapaya Sànchez
Pág. 10 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
public boolean equals(Object obj); public float floatValue(); public static Long getLong(String nm); public static Long getLong(String nm, long val); public static Long getLong(String nm, Long val); public int hashCode(); public int intValue(); public long longValue(); public static long parseLong(String s); public static long parseLong(String s, int radix); public static String toBinaryString(long i); public static String toHexString(long i); public static String toOctalString(long i); public String toString(); public static String toString(long i); public static String toString(long i, int radix); public static Long valueOf(String s); public static Long valueOf(String s, int radix); } *** fuente JAVA SUN 6.- OPERADORES ARITMETICOS Un operador es un símbolo especial que indica al compilador que debe efectuar una operación matemática o lógica. Java reconoce los siguientes operadores aritméticos: Operador Operación + Suma - Resta * Multiplicación / División % Residuo o Módulo Como notas importantes a recordar siempre; En problemas de division entre enteros, java trunca la parte residual, ej; Desplegar---> 13/5 ---> el resultado es 2 Mas adelante se dira como resolver este problema. Para resolver los problemas de potencias y raíces, se usan ciertas instrucciones especiales que proporciona el lenguaje, llamadas funciones matemáticas, en java existe toda una librería de instrucciones o funciones matemáticas. Recordar que todas las funciones reciben uno o más datos o valores y regresan siempre un resultado, una de estas funciones matemáticas es: Alejandro Huapaya Sànchez
Pág. 11 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
import java.lang.math ; public static double pow(double a, double b); Esta función ocupa dos valores o datos( base y exp) ambos de tipo double, y regresa un resultado también de tipo double, ejemplo; •
resolver el problema de calcular
import java.io.*; import java.lang.Math; public class ejemplo1 {public static void main(String args[]) { double base =5; double exponente=3; double potencia =0; potencia = Math.pow(base, exponente); System.out.println("potencia =" +potencia); }// cerrar main } //cerrar clase En java jsp y servlets para resolver el problema de raíces, se aprovecha una de las mas elementales y conocida de las leyes de exponentes que dice:
n a m
= a m/ n
Es decir una raíz cualquiera se puede transformar a una potencia con un exponente fraccionario. Ejemplo: problema
y = 3 x esto es equivalente a
y = 3⋅x1 /2
entonces
// Usando la función pow y = 3*Math.pow(x, 0.5); • En este ejemplo no funcional se esta dando por supuesto que no interesa el tipo de dato que requiere la función pow() para trabajar correctamente Para realizar operaciones con objetos numéricos, recordar que no se pueden hacer directamente operaciones con ellos ni tampoco pueden recibir resultados en ellos, lo que se debe hacer es usar una variable temporal de tipo apropiado, hacer la operacion con dicha variable y al final si se quiere convertir esta variable al objeto numerico apropiado(esto ultimo se vera en el siguiente JAVA TEMA ), como lo muestra el siguiente ejemplo; Integer alfa = new Integer(20); Double zeta = new Double(5); double alfa1=0, zeta1=0; alfa1=alfa.doubleValue(); zeta1=zeta.doubleValue(); alfa1=alfa1 + zeta1; desplegar alfa1; Como se observa se crearon dos objetos numericos, luego dos variables numericas normales, luego estas dos ultimas variables se cargan con los objetos numericos que emplean metodos propios para convertirlos a datos normales. Alejandro Huapaya Sànchez
Pág. 12 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
En java jsp y java servlets la libreria maJAVA TEMA tica completa incluye: Class Math public final class java.lang.Math extends java.lang.Object { // Fields public final static double E; public final static double PI; // Methods public static double abs(double a); public static float abs(float a); public static int abs(int a); public static long abs(long a); public static double acos(double a); public static double asin(double a); public static double atan(double a); public static double atan2(double a, double b); public static double ceil(double a); public static double cos(double a); public static double exp(double a); public static double floor(double a); public static double IEEEremainder(double f1, double f2); public static double log(double a); public static double max(double a, double b); public static float max(float a, float b); public static int max(int a, int b); public static long max(long a, long b); public static double min(double a, double b); public static float min(float a, float b); public static int min(int a, int b); public static long min(long a, long b); public static double pow(double a, double b); public static double random(); public static double rint(double a); public static long round(double a); public static int round(float a); public static double sin(double a); public static double sqrt(double a); public static double tan(double a); }
Alejandro Huapaya Sànchez
Pág. 13 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
fuente tomada de java sun com
7.- JAVA OPERADOR CAST y CONVERSIONES En java se puede forzar un dato, variable o una expresión a convertirse o cambiarse a un nuevo tipo de dato. El operador cast realiza este proceso, es decir convierte datos, variables o expresiones a un nuevo tipo de dato, su formato es: (nvotipo) dato , var, exp; Ejemplo: // declaración int alfa; // Asignación alfa = 20; // Cambio de tipo (float) alfa; Ejemplo: (int) 3.1416; •
en este ejemplo se está convirtiendo un float a int, recordar que en este caso ya no se tendrán los decimales. • Como nota importante se puede hacer cast solo con tipos de datos, no entre tipos de datos y objetos de una clase numerica. Como nota importante este operador resuelve los dos problemas pendientes: a. El de la división entre enteros. b. El tipo de dato especifico que requieren las funciones. Ejemplos: a) // Declaración float alfa; // Operación alfa = (float)23/5; // Pero en estos casos es preferible alfa=23/5.0; En toda división recordar agregar a uno de los dos valores el (.0), solo que los dos elementos sean variables entonces usar el operador cast con una de ellas. // Declaración double potencia; // Operación potencia = Math.pow ( (double)5, (double)3); Como se observa en el ejemplo, se puede usar pow(), directamente con los datos, argumentos o parámetros requeridos , si estos son numéricos, pero transformándolos con el operador cast. Alejandro Huapaya Sànchez
Pág. 14 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
Esto también va a permitir evaluar expresiones matemáticas de manera mas directa y sencilla, solo recordando usar un pow() por cada potencia y cada raíz de la ecuación, ejemplo: sea dentro de un programa esto se resuelve con; // área de declaración de variables double y, x; // área de captura de datos capturar el valor de x; // área de operaciones y = 3 * Math.pow(x, (double)3) - Math.pow(x, (1/3.0)) + 4 * Math.pow(x, (double)2)); // área de despliegue de resultados desplegar x, y En java jsp y java servlets para convertir tipos de datos numericos a objetos numericos y viseversa se deberan usar los metodos que traen las clase numericas de manera apropiada, en general existen tres casos generales difrentes, considerando datos o variables numericas, objetos numericos y strings que es un caso especial y comun: a.1) Variable numerica a variable numerica Usar el operador cast ejemplo: //var to var int alfa1=10; double alfa2=3.1416; alfa1= (int)alfa2; observar que valores decimales deben declararse como doubles a.2) variable numérica a string ejemplo; // var to string int zeta=50; String alfa= String.valueOf(zeta); a.3) variable numerica a objeto numerico caso 1: usando constructor int zeta=80; Float alfa4 = new Float(zeta); caso 2: ya existe el objeto numerico Double alfa5 = new Double(0); Int zeta=30; alfa5=Double.valueOf(String.valueOf(zeta)); b.1) Objeto Numerico a Variable numerica todos los objetos numericos deben crearse inicializados aunque sea a (0) Integer alfa = new Integer(300); Int zeta = alfa.intValue();
Alejandro Huapaya Sànchez
Pág. 15 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
b.2) Objeto numérico a String Float alfa = new Float("3.45"); String beta = new String(" "); Beta = alfa.toString(); b.3) Objeto Numerico a Objeto Numerico Integer alfa=new Integer(50); Double beta=new Double(0); beta = beta.valueOf(alfa.toString()); c.1) String to variable numerica String alfa= new String("3.5"); double beta= 0; beta= Double.parseDouble(alfa); c.2) String to Objeto Numerico String alfa8=new String("50"); Double alfa9=new Double(0); alfa9 = alfa9.valueOf(alfa8); TAREAS JAVA POW (): 1. 2. 2. 8.- JERARQUIA DE OPERACIONES En java jsp y java servlets el problema de no tomar en cuenta la jerarquía u orden de los operadores al plantear y resolver una operación casi siempre conduce a resultados muchas veces equivocados como estos: Ejemplos: a. 2+ 3* 4 = 20(incorrecto) = 14 (correcto) b) si calif1=60 y calif2=80 entonces en programa se usa promedio=calif1 + calif2/2 da como resultado promedio = 100 Recordar siempre, que antes de plantear una formula en un programa se deberá evaluar contra el siguiente: Orden de operaciones: 1.- Paréntesis 2.- Potencias y raíces
Alejandro Huapaya Sànchez
Pág. 16 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
3.- Multiplicaciones y divisiones 4.- Sumas y restas 5.- Dos o más de la misma jerarquía u orden, entonces resolver de izquierda a derecha Nota: Si se quiere alterar el orden normal de operaciones, entonces usar paréntesis. Nota: Tampoco es bueno usar paréntesis de mas en una operación, esto solo indica que no se evalúo bien la formula, como en el siguiente ejemplo;
aquí los paréntesis están de mas, porque por orden de operaciones, multiplicación y división tienen la misma jerarquía y entonces se resuelven de izquierda a derecha, en otras palabras ni que falten paréntesis ni que sobren paréntesis en ningun programa java jsp o java servlet. 9.- APLICACIONES Recordar que JAVA es un lenguaje de programación moderno, que esta enfocado a la construcción de sisJAVA TEMA s de informacion que se ejecutarán en una plataforma muy diversa de procesadores y sisJAVA TEMA s operativos. Esto indica la necesidad de construir diversos tipos de aplicaciones, programas o sisJAVA TEMA s, en general, este curso se centra alrededor de los sguientes tipos de aplicaciones basicas: 1.- Aplicaciones o programas que se ejecuten en "consolas", es decir ambientes del tipo msdos, linux, terminales tontas, etc. 2.-Aplicaciones o sisJAVA TEMA s que se ejecuten en ambientes graficos o de tipo "ventanas:, ejemplo windows, kde o gnome de linux, sistem 8 de apple, etc. 3.- Aplicaciones de tipo APPLETS, que tambien son programas en java que se mandan a una pc remota o lejana, donde esa pc se encarga de correrla o ejecutarla o compilarla y correrla. Este applet lo manda un servidor de paginas(web server) junto con la pagina correspondiente, cada vez que un usuario se conecta al web server y requiere la pagina que contiene el applet. Para el caso de applets, estos se ejecutan no en consola, tampoco en una ventana, sino dentro de el browser de la maquina remota que puede ser el internet explorer de microsoft o el netscape. Por supuesto que el browser del cliente debe estar preparado para ejecutar applets, esto se hace teniendo constantemente actualizado el browser (internet explorer o netscape) y estando sobre todo seguro que en la actualización del browser se incluya la maquina virtual de java. 4.-Aplicacion de tipo SERVLETS, que son programas en java que se ejecutan direcatemente en el servidor de paginas o web server, que al ser invocado o llamado por una pc remota, el web server ejecuta el servlet, ya ejecutado se mandan generalmente los resultados a la maquina remota, estos resultados se mandan en forma de una pagina html, para que la maquina remota los vea en su propio browser. Una vez que el web server o servidor de paginas ejecuta un servlet, lo mantiene vivo o despierto, para responder de manera mas rapida a las peticiones siguientes que se hagan del servlet. 5.- Aplicaciones JSP (Java Server Pages), tecnologia que combina codigo html y codigo java en un solo programa o aplicación, cuando al web server le piden un jsp, lo compila, lo convierte a servlet con todas las implicaciones que se mencionarón en el inciso anterior y manda los resultados a la pc remota que lo solicitó. 6.- Beans y Java Beans, tecnologias de tipo servlet pero que estan especializadas principalmente en mantener enlaces constantes a bases de datos de cualquier marca (access, oracle, mysql, etc), esto
Alejandro Huapaya Sànchez
Pág. 17 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
permite que una serie de varios programas o aplicaciones a la vez esten interactuando con el mismo java bean y por consiguiente con la base de datos. 7.-Existen otra serie de aplicaciones diferntes que se pueden construir con java, tales como aplicaciones rmi, aplicaciones en tiempo real, ejb , pero de momento estan fuera del alcance de estas notas.(estarse pendiente de la siguiente actualizacion de este texto) En general las aplicaciones a desarrollar en este curso ( consola, graficas, applets y servlets, jsp, beans ) todas tienen en comun el lenguaje e instrucciones de programacion de java. El compilador a usar es el SDK (standard development kit) de Java, este kit estandar de desarrollo de programas se encuentra en http://www.java.sun.com/j2se/, de aqui bajarlo e instalarlo. Solo renombrar el folder de default donde se instala a c:\jdk1.3 en lugar del que trae que es c:\Jdk1.3.0_02 10.- APLICACIONES POR CONSOLA Empezemos con el programa clasico de los lenguajes de programacion: class holamundo { public static void main(String[] args) { System.out.println(" HOLA MUNDO "); } // cierra main } // cierra clase 1.- Se debera construir usando el mejor editor del mundo, el NOTEPAD de windows, y se debera grabar en un nuevo folder, con el nombre de la clase (holamundo) y la extension de .java, es decir en notepad usar save as holamundo.java (respetar mayusculas y minusculas que se hayan puesto en la clase), tener cuidado con notepad porque en ocasiones lo graba como holamundo.java.txt, si esto sucede no se puede compilar o sdk informa que no lo encuentra, en notepad seleccionar tipo=all files o irse a msdos y renombrarlo a .java solamente. 2.- Para compilarlo abrir una sesion de msdos dentro de windows y navegar hasta el folder donde esta holamundo.java y compilarlo con la siguiente instruccion: c:\jdk1.3\bin\javac holamundo.java observar que jdk1.3 es el folder que renombraron cuando instalaron el sdk que bajaron de java.sun.com, si no tendran que escribir el nombre largo del folder donde se instalo sdk. JAVAC es el compilador de java y lo que hace aparte de mostrar los errores que puede tener el programa es crear un nuevo archivo con extensión .class, es decir en este ejemplo , en el folder ahora aparte de tener holamundo.java, debera haber un archivo llamado holamundo.class, que es el equivalente a los archivos.exe o executables de windows. 3.-El tercer paso es ejecutar el programa, esto se hace con la instruccion: c:\jdk1.3\bin\java holamundo Observar que ahora es java quien executa y el archivo ya no tiene extension. Un problema muy comun al tiempo de ejecución, es que java mande un mensaje de classnotfound, si esto pasa al querer ejecutar el programa, solo irse al prompt de msdos y escribir la orden: C:>SET CLASSPATH= Y volver a ejecutar el programa. CARACTERISTICAS DE PROGRAMAS O APLICACIONES EN JAVA 1.- Todos los programas en java son y empiezan con una clase.
Alejandro Huapaya Sànchez
Pág. 18 de 125
Desarrollo e Investigación de Sistemas de Cómputo
Tutorial Java Programación Swing Applets Servlet Jsp UNIDAD I ELEMENTOS BASICOS
Sección: AC4 Revisión: 05 Setiembre 2009
2.- Todos los programas en java, deben llevar un metodo principal, llamado main() quien es quien contiene el codigo normal del programa. 3.- La clase y el metodo main deben abrir y cerrar sus propias llaves {} 4.- Las instrucciones terminan con punto y coma (;) 5.- Java tambien es "case sensitive", es decir diferencía mayusculas y minusculas. Problema .- bajar, instalar el sdk java y construir, compilar y ejecutar este programa de ejemplo 11.- APLICACIONES CONSOLA JAVA JSP Y JAVA SERVLETS (CONTINUACION) Entradas y salidas de datos son las tareas mas comunes en cualquier lenguaje de programación. En aplicaciones de consola, estos procesos se ejecutan con las siguientes instrucciones: Programa ejemplo: import java.lang.*; import java.io.*; class ejemplo1 { public static void main(String[] args) { int alfa=0; BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in)); // se crea teclado que es un objeto para que lea la string que se captura try { System.out.println("dame numero entero: "); //teclado lee una string y la convierte a variable dato numerico normal alfa = Integer.parseInt(teclado.readLine()); } catch(IOException varerror) {System.out.println("error");} alfa= alfa+5; System.out.println(alfa); } // cierra main } // cierra clase En java generalmente todo se maneja mediante objetos, primero se esta creando un objeto llamado teclado que tenga capacidad de leer una string, desde el dispositivo de entrada estandar (teclado o System.in). Se esta usando la instruccion System.out.println(string); para mandar mensajes al ususario Se esta usando el metodo readline() que tiene el objeto teclado, para leer la string del teclado fisico. Se esta usando Integer.parseInt, visto en el JAVA TEMA del operador cast y conversiones, para convertir la string a una variable numerica Se esta usando una instruccion try-catch, para detectar o prevenir problemas con los datos que proporcione el usuario del programa, por ejemplo que en lugar de dar un numero, proporcione letras. Como se observa es bastante sencillo, hacer programas de entrada-salida en consola en java TAREAS JAVA 1.-CONSTRUIR APLICACIONES JAVA DE CONSOLA PARA TODOS LOS MODELOS DE SOLUCION RESUELTOS
Alejandro Huapaya Sànchez
Pág. 19 de 125
UNIDAD 2: JAVA APLICACIONES GRAFICAS JAVA TEMA I.- INTRODUCCION JAVA APPLETS Java es un lenguaje de programacion desarrollado para una multitud de plataformas y procesadores. Aplicaciones o programas graficos deberan tomar en cuenta estos aspectos, para propositos de este libro, consideramos los dos tipos de aplicaciones graficas mas comunes . a. Frames.-Es el equivalente a una aplicacion grafica comun en los diversos lenguajes de programacion visuales, tales como el visualbasic, cbuilder, delphi, etc. b. Applets.-Que en principio se pueden considerar como aplicaciones graficas o visuales normales, excepto que estos applets se empotran o incluyen dentro de una pagina html, misma que a su vez es enviada, junto con el applet a una maquina o pc remota en un intranet o internet, para que dicha maquina remota despliegue la pagina html y ejecute el programa que va en el applet. Modelos de Frames y Applets, se pueden construir usando cualquiera de las dos galerias de componentes visuales que proporciona java, estas librerias visuales, son: 1.- JAVA AWT es la libreria visual mas antigua de java usando esta libreria, se podran construir los tres tipos de programas mas comunes como son FRAME, WINDOW y APPLET. 2.- JAVA SWING es la libreria de componentes visuales mas nueva que proporciona java, usando esta libreria se podran construir los tres tipos de programas o aplicaciones que son JFRAME, JWINDOW y JAPPLET. PARA PROPOSITOS DE ESTE CURSO NOS CONCENTRAMOS EN JAVA FRAME Y JAVA APPLET derivados de JAVA AWT (la libreria visual antigua), por la triste razón de que el modelo de ejecución de estos programas, esta muy asociado al compilador de java que traen los browsers. Otra vez, un applet es un programa un java que se manda a una maquina o pc remota para que lo ejecute o lo corra, cuando este applet le llega a la maquina remota via un browser, dicho browser es quien activa la maquina virtual de java que esta en la pc remota y esta maquina virtual ya da la orden de compilación y ejecución, es decir java programa.applet. Entonces es importante que la maquina virtual de java, que se encuentra en la pc remota, tenga capacidad de incluir todas las librerias de java, como la de math, la de awt, la de lang, etc. La triste historia, es que la maquina virtual de java (revisen su folder program files o windows y ahi la encuentran), les llega a travez de microsoft a las pc remotas, y por el pleito sun-microsoft, estos ultimos estan mandando una maquina virtual de java antigua que solo tiene incluido awt y no swing. Entonces no tiene caso que hagan un programa applet muy bonito con componentes swings, lo manden a una pc remota y esta ultima no lo pueda compilar y ejecutar porque no reconoce la libreria swing. Lo que esta haciendo la compañia sun para resolver este problema es proporcionar a quien lo pida una maquina virtual de java actualizada (llamada webstar ) gratis y a quien la quiera, pero no podemos construir progamas o applets que no vayan a correr en todas las pcs, mientras ellos arreglan el pleito, estamos condenados a usar JAVA AWT UNIDAD 2: JAVA APLICACIONES GRAFICAS JAVA TEMA 2: JAVA FRAME PROPIEDADES JAVA Frame es el componente, control u objeto principal de una aplicacion visual o grafica en java. Es el equivalente a FORM1 en los demas lenguajes visuales, como todos ellos Frame es un objeto normal que se deriva de una clase apropiada, tiene sus propiedades y se le pueden asociar sus eventos. Todo Programa Visual en java, empieza creando un objeto de este tipo, cargando y asignando sus propiedades como lo muestra el siguiente ejemplo: Ejemplo 1) import java.lang.*; import java.awt.*; import java.awt.event.*; public class prog1 { //declaracion, creacion e inicializacion de componentes, objetos y variables // en este caso un solo objeto la ventana
static Frame ventana= new Frame(); // parte principal de programa public static void main(String[] args) { // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); ventana.setBackground(java.awt.Color.pink); ventana.setSize(200,250); ventana.setVisible(true); // se agrega un escuchador para que cierre la ventana con la x de arriba ventana.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); }; // termina main } // termina clase CORRIDA:
Como ya se indico, todo programa en java, debe ser un clase y toda aplicación o programa debe tener un metodo main. El programa empieza creando un objeto llamado ventana, derivado de la clase FRAME, observar y aprender el formato de creacion, es formato similar para cuando se crean mas objetos. Es el objeto ventana quien debera cargarse con los demas componentes y o controles que tendra la aplicación. En este programa ejemplo, se muestra como asociar eventos a el objeto ventana, primero se quiere aclarar algunas cuestiones. Las propiedades o metodos derivados de la clase superior component de FRAME son: action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addPropertyChangeListener, addPropertyChangeListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, getBackground, getBounds, getBounds, getColorModel, getComponentOrientation, getCursor, getDropTarget, getFont, getFontMetrics, getForeground, getGraphics, getHeight, getInputMethodRequests, getLocation, getLocation, getLocationOnScreen, getName, getParent, getPeer, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isDisplayable, isDoubleBuffered, isEnabled, isFocusTraversable, isLightweight, isOpaque, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move,
nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, reshape, resize, resize, setBackground, setBounds, setBounds, setComponentOrientation, setDropTarget, setEnabled, setForeground, setLocale, setLocation, setLocation, setName, setSize, setSize, setVisible, show, size, toString, transferFocus Como se observa, en el programa ejemplo solo se usan muy poquitas de ellas. Pero aún hay mas, FRAME tambien puede usar las siguientes propiedades y metodos de la clase superior container y son: add, add, add, add, add, addContainerListener, addImpl, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getInsets, getLayout, getMaximumSize, getMinimumSize, getPreferredSize, insets, invalidate, isAncestorOf, layout, list, list, locate, minimumSize, paint, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, remove, removeAll, removeContainerListener, setFont, setLayout, update, validate, validateTree De aqui tambien se tomarón algunas para el programa ejemplo. Pero sigue la mata dando, FRAME tambien puede usar metodos y propiedades de la clase superior windows: addWindowListener, applyResourceBundle, applyResourceBundle, dispose, getFocusOwner, getGraphicsConfiguration, getInputContext, getListeners, getLocale, getOwnedWindows, getOwner, getToolkit, getWarningString, hide, isShowing, pack, postEvent, processEvent, processWindowEvent, removeWindowListener, setCursor, show, toBack, toFront Observar que tambien de aqui se tomarón varias para el programa ejemplo. Pero!!! FRAME tambien tiene sus propias propiedades y metodos que son: Method Summary void
addNotify() Makes this Frame displayable by connecting it to a native screen resource.
protected void
finalize() We have to remove the (hard) reference to weakThis in the Vector, otherwise the WeakReference instance will never get garbage collected.
AccessibleContext
getAccessibleContext() Gets the AccessibleContext associated with this Frame.
int
getCursorType() Deprecated. As of JDK version 1.1, replaced by Component.getCursor().
static Frame[]
getFrames() Returns an array containing all Frames created by the application.
Image
getIconImage() Gets the image to be displayed in the minimized icon for this frame.
MenuBar
getMenuBar()
Gets the menu bar for this frame. int
getState() Gets the state of this frame.
String
getTitle() Gets the title of the frame.
boolean
isResizable() Indicates whether this frame is resizable by the user.
protected String
paramString() Returns the parameter String of this Frame.
void
remove(MenuComponent Removes the specified menu bar from this frame.
void
removeNotify() Makes this Frame undisplayable by removing its connection to its native screen resource.
void
setCursor(int cursorType) Deprecated. As of JDK version 1.1, replaced by Component.setCursor(Cursor).
void
setIconImage(Image Sets the image to displayed in the minimized icon for this frame.
void
setMenuBar(MenuBar Sets the menu bar for this frame to the specified menu bar.
void
setResizable(boolean Sets whether this frame is resizable by the user.
void
setState(int Sets the state of this frame.
void
setTitle(String Sets the title for this frame to the specified string.
m)
image) mb) resizable) state) title)
Como notas finales: 1.- tambien de aqui se tomarón algunas para el programa ejemplo. 2.- Todo este material acerca de metodos y propiedades, lo encuentran buscando la clase correspondiente ( en este caso FRAME) en doc y api que estan en el sitio de www.java.sun.com 3.-Es necesario que localizen este material, para que lo tengan a la mano, pueden bajar el api completo del sitio: http://java.sun.com/j2se/1.3/docs.html 4.- Es la ultima vez que se muestran todas la propiedades y metodos de un componente, de aqui en adelante deberan tener la documentación del componente a la mano (inciso anterior), para poder usar un componente a plenitud en sus programas o aplicaciones UNIDAD 2: JAVA APLICACIONES GRAFICAS JAVA TEMA 3: JAVA FRAME Y METODOS En programacion visual java jsp y java servlets a los objetos se les asocia directamente los metodos, por ejemplo:
Ej a) private sub command1_click() codigo a realizar etc Ej b) button1_click() codigo a realizar etc A este modelo de objeto-evento se le conoce como modelo orientado a eventos (event driven). Por supuesto que como buenos programadores como son todos los lectores de estas notas, uno siempre cuida todas las posibles situaciones que se le pueden presentar al usuario, por ejemplo, que tal si la maquina del usuario no tiene raton, la respuesta es sobrecargar el programa o aplicacion de eventos posibles y todos ellos llamando a la misma unidad de codigo es decir: Ej: Command1_click() codigo Command1_keypressed() mismo codigo o llamado Command1_UpArrow() lo mismo etc. Command1_usuarioestornudo() igual etc JAVA usa un modelo nuevo de asociacion de objeto-evento, llamado de "Delegacion de Eventos", en este modelo se crea un objeto especializado en escuchar por eventos e informar a un objeto normal de cuando el evento sucede para que este ultimo active el metodo o codigo necesario para procesar el evento. Objetos escuchadores de este tipo, pueden ser raton, teclado, etc, y existe un objeto de este tipo muy generico, capaz de escuchar hasta cuando el usuario estornuda llamado "ACTION". Cada uno de estos escuchadores, tienen tambien cada uno sus propios metodos, por ejemplo el objeto raton, tiene metodos para detectar el click del raton, o el dobleclick del raton etc, mas adelante se presenta una relacion de estos objetos y los metodos que contienen. En un programa como en el siguiente ejemplo, uno crea el objeto escuchador y se lo agrega el objeto del programa que lo ocupa. import java.lang.*; import java.awt.*; import java.awt.event.*; public class prog2 { //declaracion, creacion e inicializacion de componentes, objetos y variables // en este caso un solo objeto la ventana static Frame ventana= new Frame(); // parte principal de programa public static void main(String[] args) { // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); ventana.setBackground(java.awt.Color.pink); ventana.setSize(200,150); ventana.setCursor(new Cursor(Cursor.HAND_CURSOR) ); ventana.setVisible(true); // area de asociacion de objetos-escuchadores ventana.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); }} ); // otro escuchador con un evento asociado a FRAME ventana.addKeyListener( new KeyAdapter() { public void keyPressed(KeyEvent e){ ventana.setBackground(java.awt.Color.blue); }} );
// otro escuchador con un evento asociado a FRAME ventana.addMouseListener( new MouseAdapter() { public void mouseExited(MouseEvent e){ ventana.setBackground(java.awt.Color.cyan); ventana.setTitle("adios ratoncito"); }} ); }; // termina main } // termina clase Como se observa al objeto ventana le estamos agregando tres tipos de escuchadores diferentes (windows, raton, teclado) esto se hace con la instrucción(.ADDESCUCHADOR) y a cada escuchador se le esta cargando de codigo o instrucciones a alguno de sus metodos. Para usar ADDESCUCHADOR, se debera crear el objeto-escuchador apropiado usando la instruccion NEW OBJETOLISTENER. Pero observar que en su lugar se uso NEW OBJETOADAPTER, esto es porque si se crea OBJETOLISTENER java exige que se escriban o codifique todos los metodos del LISTENER ( y creanlo son muchos de cada uno)aunque no se ocupen. OBJETOADAPTER es similar que OBJETOLISTENER excepto que en la aplicacion solo se escribe el metodo que realmente se ocupe, en jerga tecnica ADAPTER es LISTENER con metodo que se ocupe sobrecargado. Los principales (no unicos) escuchadores y sus principales metodos son: Escuchador Metodos WINDOW WindowActivated(), WindowClosed(), WindowClosing(), WindowDeactivated(), WindowOpened(). MOUSE MouseClicked(), MouseDragged(), MouseEntered(), MouseExited(), MouseMoved(), MousePressed(). MouseReleased(). KEY KeyPressed(), KeyReleased(), KeyTyped(). POPUPMENU investigar en ayuda de java FOCUS investigar en ayuda de java CONTAINER investigaren ayuda de java COMPONENT investigar en ayuda de java CHANGE investigar en ayuda de java CARET investigar en ayuda de java UNIDAD 2: JAVA APLICACIONES GRAFICAS JAVA TEMA 4: JAVA ENTRADA/SALIDA Procesos de entrada o captura de datos y procesos de salida de información son procesos basicos en cualquier programa o aplicacion de cualquier lenguaje de programacion. Para aplicaciones por consola ya se vieron las instrucciones respectivas, para el caso de aplicaciones visuales, este problema de e/s se resuelve usando componentes o controles especializados en cada una de las tareas respectivas. En particular en java para una aplicacion sencilla se ocupan los siguientes objetos: 1.- Un contenedor apropiado para todos los demas objetos, para este caso un objeto de tipo JAVA FRAME, que ya se analizo en los dos JAVA TEMA s anteriores.
2.-Componentes o controles que permitan desplegar textos o mensajes estaticos, JAVA LABEL. 3.-Componentes o controles que permitan capturar datos y/o desplegar datos o información, JAVA TEXTFIELD. 4.-Componentes o controles que permitan controlar o dirigir las conductas y codigos de los demas elementos de la aplicacion o programa, BUTTON. UNIDAD 2: JAVA APLICACIONES GRAFICAS JAVA TEMA 5.- JAVA LABEL Este componente se utiliza para desplegar textos o mensajes estáticos dentro de las formas, textos tales como encabezados, solicitud al usuario del programa para que proporcione algún dato o información(edad, dame sueldo, etc.), en cierta forma hace las funciones de printf, cout, writeln, print, display, etc., pero solo cuando se consideran en su parte de mensajes. También es un objeto en java y por tanto tiene asociados sus propias propiedades y objetos-eventos, al mismo tiempo como se está usando dentro del objeto FRAME, muchas propiedades que se definan para el objeto FRAME, el objeto Label las va a heredar. Es la propiedad TEXT, la que lleva el contenido del mensaje que se quiere desplegar, misma que se cargara de manera igual que con FRAME, es decir LABEL.setPROPIEDAD(parametros, en muchos de los casos; Algunas de sus propiedades mas importantes son: Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(), Name(), Opaque(), Text(), ToolTipText(), Visible() El listado completo de sus propiedades y metodos ya lo deben tener en la documentacion (api) que ya bajarón de java.sun ?o no es asi? Recordar que las propiedades se inicializan y se usan en codigo con .SETpropiedad. Algunos de sus escuchadores con sus metodos mas importantes son: WINDOW: WindowActivated(), WindowClosed(), WindowClosing(), WindowDeactivated(), WindowOpened(). MOUSE: MouseClicked(), MouseDragged(),MouseEntered(), MouseExited(),MouseMoved(), MousePressed(), MouseReleased(). KEY: KeyPressed(), KeyReleased(), KeyTyped(). UNIDAD 2: JAVA APLICACIONES GRAFICAS JAVA TEMA 6.- JAVA TEXTFIELD En Java este componente es un importante componente visual, su función principal es manejar todos los procesos de entrada y salida (input/output) al programa. Este componente TEXTFIELD es el equivalente a las variables en cualquier lenguaje de programación mas la instrucción de captura o despliegue correspondiente, es decir; a) En BASIC, Input Edad -> Text1 b) En PASCAL, Read(Ciudad) -> Text2 c) En C, printf("%d", sueldo) -> Text3 d) En C++, cin.get(nombre,30) -> Text4 e) En Cobol Display metros -> Text5 Su principal propiedad es TEXT(), que es la propiedad que contiene el dato de tipo STRING que se manipulara en los programas o aplicaciones. El dato dentro de esta propiedad es de tipo STRING y por tanto se tendra que convertir a datos numericos normales para poder efectuar procesos numericos con ellos como se vio en el JAVA TEMA de CAST y CONVERSIONES.
Aparte de esta propiedad TEXT, tiene otras propiedades que se pueden inicializar con el comando SET como ya se ha visto en los JAVA TEMA s de FRAME y LABEL. Algunas de sus propiedades mas importantes son: Background(), Border(), Bounds(),Columns(), Cursor(),Editable(), Enabled(), Font(), Foreground(), Name(), Opaque(), Text(), ToolTipText(), Visible() Espero que ya tengan la documentación completa en su disco duro. Recordar que las propiedades se inicializan y se usan en codigo con .SETpropiedad. Algunos de sus escuchadores con sus metodos mas importantes son: WINDOW: WindowActivated(), WindowClosed(), WindowClosing(), WindowDeactivated(), WindowOpened(). MOUSE: MouseClicked(), MouseDragged(),MouseEntered(), MouseExited(),MouseMoved(), MousePressed(), MouseReleased(). KEY: KeyPressed(), KeyReleased(), KeyTyped(). UNIDAD 2: APLICACIONES GRAFICAS JAVA TEMA 7.- JAVA SWING BUTTON En java es el control principal de la forma, contiene el código principal del programa y su activación por el usuario provoca que se realicen los principales procesos del problema planteado (aquí es donde se capturan datos, se realizan operaciones, etc.). De este control se maneja su propiedad TEXT para etiquetarlo con la palabra "OK" o "ACEPTAR" o "EXE" y su evento Click para activarlo, es en dicho evento donde se construye el código del programa. Recordar que aunque no es un control necesario en los programas, ya que el código se puede asociar o pegar a cualquier escuchador-evento de cualquier forma, o control del programa, pero Microsoft ya acostumbro a todos los usuarios al botón OK, de acuerdo, OK. PROPIEDADES Background(), Border(), Bounds(),Columns(), Cursor(),Editable(), Enabled(), Font(), Foreground(), Name(), Opaque(), Text(), ToolTipText(), Visible() Pensaba poner la nota de bajar la documentación de java sun pero me arrepenti. Recordar que las propiedades se inicializan y se usan en codigo con .SETpropiedad. ESCUCHADORES-EVENTOS WINDOW: WindowActivated(), WindowClosed(), WindowClosing(), WindowDeactivated(), WindowOpened(). MOUSE: MouseClicked(), MouseDragged(),MouseEntered(), MouseExited(),MouseMoved(), MousePressed(), MouseReleased(). KEY: KeyPressed(), KeyReleased(), KeyTyped(). UNIDAD II: JAVA APLICACIONES GRAFICAS JAVA TEMA 8: JAVA PRACTICA Se da el ejemplo clasico de programa o aplicacion con entrada/salida, convertir años a meses: import java.lang.*; import java.awt.*; import java.awt.event.*; public class prog3 { //declaracion, creacion e inicializacion de componentes, objetos y variables static Frame ventana= new Frame(); static Label l1 = new Label("dame edad :"); static TextField t1 = new TextField(12);
static Button b1 = new Button("años a meses"); // parte principal de programa public static void main(String[] args) { // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); ventana.setLayout(new FlowLayout()); ventana.add(l1); ventana.add(t1); ventana.add(b1); ventana.pack(); ventana.setVisible(true); //area de asociacion de objeto-eventos b1.addMouseListener( new MouseAdapter() { public void mousePressed(MouseEvent e){ int alfa = Integer.parseInt(t1.getText()); alfa = alfa * 12; t1.setText(String.valueOf(alfa)); }} ); ventana.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); }} ); }; // termina main } // termina clase CORRIDA:
Notas: El 12 en el constructor de TextField, es un parametro para indicarle de cuantos caracteres tendra la cajita. Se esta usando un layout nuevo (flowLayout), para acomodar los componentes dentro del panel de contenido, un layout (null) es para aomodarlos en coordenadas xy especificas esto no es recomendable por java, en virtud de que el programa o aplicación puede y debe ejecutarse en procesadores-sisJAVA TEMA s operativos diferentes, en el siguiente JAVA TEMA se tratan todos los layouts que tiene java. UNIDAD 2: APLICACIONES GRAFICAS JAVA TEMA 9: JAVA LAYOUTS Recordar que java esta enfocado a programas y aplicaciones que se estaran ejecutando en una plataforma muy amplia de procesadores y sisJAVA TEMA s operativos diferentes. Una cuestión pertinente a este problema, es que el metodo normal de construcción de interfases para el usuario ya no es suficiente, en este metodo normal es comun acomodar los controles o componentes de acuerdo a coordenadas XY predifinadas en la forma, desgraciadamente esto ya no es conveniente, porque diversos sisJAVA TEMA s operativos no tienen las mismas resoluciones que sisJAVA TEMA s operativos "normales". Pare resolver de mejor manera este problema java utiliza "layouts" que son maneras predefinidas de acomodar controles o componentes visuales en formas o ventanas visuales. En ninguno de los layouts se permite especificar una coordenada xy para un componente o control visual, solo se permite especificar si va primero o va al norte etc. Los layouts mas comunes de java son: A) BorderLayout: Arregla los componentes en posiciones CENTER, NORTH, SOUTH, EAST, WEST. Prog ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*; public class prog4 { //declaracion, creacion e inicializacion de componentes, objetos y variables static Frame ventana= new Frame(); static Label l1 = new Label("norte"); static Label l2 = new Label("sur"); static Label l3 = new Label("este"); static Label l4 = new Label("oeste"); static Button b1 = new Button("CENTRO"); // parte principal de programa public static void main(String[] args) { // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); ventana.setLayout(new BorderLayout()); ventana.add(l1,BorderLayout.NORTH); ventana.add(l2,BorderLayout.SOUTH); ventana.add(l3,BorderLayout.EAST); ventana.add(l4,BorderLayout.WEST); ventana.add(b1,BorderLayout.CENTER); ventana.pack(); ventana.setVisible(true); //area de asociacion de objeto-eventos ventana.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); }} ); }; // termina main } // termina clase corrida:
B) FlowLayout: acomoda los componentes de izquierda a derecha, hasta que se acaba la pantalla y entonces empieza en el siguiente renglon: Este layout es el default de FRAME y en el programa3 se esta demostrando. Corrida
C) GridLayout: Acomoda los componentes en columnas y renglones de tamaño fijo, su constructor ocupa como parametros la cantidad de renglones y de columnas. Programa ejemplo:
import java.lang.*; import java.awt.*; import java.awt.event.*; public class prog6 { //declaracion, creacion e inicializacion de componentes, objetos y variables static Frame ventana= new Frame(); static Label l1 = new Label("label1"); static Label l2 = new Label("label2"); static Label l3 = new Label("label3"); static Label l4 = new Label("label4"); static Button b1 = new Button("buton1"); // parte principal de programa public static void main(String[] args) { // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); ventana.setLayout(new GridLayout(0,3)); ventana.add(l1); ventana.add(l2); ventana.add(l3); ventana.add(l4); ventana.add(b1); ventana.pack(); ventana.setVisible(true); //area de asociacion de objeto-eventos ventana.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); }} ); }; // termina main } // termina clase Corrida
UNIDAD 2: APLICACIONES GRAFICAS JAVA TEMA 10.- PANEL Construir directamente programas o aplicaciones directamente en un FRAME, produce rapidamente un amontonamiento de controles o componentes en la propia forma. Es mas conveniente usar componentes de agrupamiento visuales que faciliten la separación fisica y logica de las diversas partes que componen un programa o aplicación. Estos controles de agrupamiento son conocidos como paneles, aunque en visual basic se conocen como frames (no confundirlos con frame de java). Java tiene los siguientes tipos de paneles, PANEL, SPLITPANE, SCROLLPANE, TABBEDPANE, TOOLBAR Recordar ademas que los panels pueden y deben usar su propio layout para acomodar los componentes visuales que contendra. En particular frame usando su layout acomoda sus paneles y panel usando su layout acomoda los componentes. UNIDAD 2: APLICACIONES GRAFICAS JAVA TEMA 11: JAVA PANEL
Es el componente mas común de agrupamiento su trabajo consiste en ser el contenedor del resto de los componenentes del programa. Su layout de default es FlowLayout. Es tarea común poner en un FRAME una serie de paneles, cada uno de estos enfocado a una tarea especifica: Las propiedades son: Autoscrolls(), Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(),Insets(), Layouts(), Name(), Opaque(), ToolTipText(), Visible(), VisibleRect(). Sus escuchadores son: WINDOW: WindowActivated(), WindowClosed(), WindowClosing(), WindowDeactivated(), WindowOpened(). MOUSE: MouseClicked(), MouseDragged(),MouseEntered(), MouseExited(),MouseMoved(), MousePressed(), MouseReleased(). KEY: KeyPressed(), KeyReleased(), KeyTyped(). Programa ejemplo: import java.lang.*; import java.awt.*; import java.awt.event.*; public class prog7 { //declaracion, creacion e inicializacion de componentes, objetos y variables static Frame ventana= new Frame(); static Panel panel1 = new Panel(); static Panel panel2 = new Panel(new GridLayout(0,2)); static Panel panel3 = new Panel(); static Label jl1 = new Label("flow label1"); static Label jl2 = new Label("flow label2"); static Label jl3 = new Label("grid label3"); static Label jl4 = new Label("grid label4"); static Label jl5 = new Label("grid label5"); static Label jl6 = new Label("flow label6"); static Label jl7 = new Label("flow label7"); // parte principal de programa public static void main(String[] args) { // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); // los layouts tambien se pueden asignar con la propiedad .set // agregando controles a paneles panel1.add(jl1);panel1.add(jl2); panel2.add(jl3);panel2.add(jl4);panel2.add(jl5); panel3.add(jl6);panel3.add(jl7); // los panels se tienen que agregar a frame y frame su layout default es borderlayout // abajo coordenadas de posicion en pantalla y tamaño en pixels ventana.setBounds(100,100,200,400); ventana.add(panel1,BorderLayout.NORTH); ventana.add(panel2,BorderLayout.EAST);
ventana.add(panel3,BorderLayout.SOUTH); ventana.pack(); ventana.setVisible(true); //area de asociacion de objeto-eventos ventana.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0); }} ); }; // termina main } // termina clase Corrida:
UNIDAD 2: APLICACIONES GRAFICAS JAVA TEMA 12: JSPLITPANE Lo siento JSPLITPANE solo existe en swing, no lo pueden usar en awt, se queda este JAVA TEMA ,para que tengan algunos programas swing de referencia. JsplitPane se usa para dividir con una barrita divisoria dos y solo dos componentes, mismos que pueden ser alineados de izquierda a derecha o de arriba hacia abajo. Sus propiedades mas importantes son: Autoscrolls(), Background(), Border(), Bounds(), Cursor(), DividerSize(), Enabled(), Font(), Foreground(),Insets(), Layouts(), Name(), Opaque(), Orientation(), Text(), ToolTipText(), Visible(), VisibleRect(). Sus escuchadores mas importantes son: WINDOW: WindowActivated(), WindowClosed(), WindowClosing(), WindowDeactivated(), WindowOpened(). MOUSE: MouseClicked(), MouseDragged(),MouseEntered(), MouseExited(),MouseMoved(), MousePressed(), MouseReleased(). KEY: KeyPressed(), KeyReleased(), KeyTyped(). Text: TEXT_VALUE_CHANGED Programa Ejemplo: import java.lang.*;import java.awt.*;import java.awt.event.*;import javax.swing.*; public class prog8 { //declaracion, creacion e inicializacion de componentes, objetos y variables static JFrame ventana= new JFrame(); // abajo se creando con orientacion vertical u horizontal static JSplitPane panel1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); static JLabel jl1 = new JLabel("en split1 label1"); static JLabel jl2 = new JLabel("en split2 label2"); // parte principal de programa public static void main(String[] args)
{ // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE); //cargando splitpanel panel1 con sus dos componentes panel1.add(jl1); panel1.add(jl2); // cargando la ventana con splitpanel ventana.getContentPane().add(panel1,BorderLayout.CENTER); ventana.pack(); ventana.setVisible(true); //area de asociacion de objeto-eventos }; // termina main } // termina clase Corrida:
UNIDAD 2: APLICACIONES GRAFICAS JAVA TEMA 13: JSCROLLPANE Tambien es swing. Cuando un componente ocupa mucho espacio en pantalla o contiene mucha información, un JSCROLLPANE permite asociarle una pequeña vista o ventana deslizable o corrediza que permite solo que se vea una parte de dicho componente. Un JSCROLLPANE, tambien puede asociarse a otros tipos de panels que contengan muchos componentes. Algunas sus propiedades mas importantes son: Autoscrolls(), Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(),Insets(), Name(), Opaque(), ToolTipText(), ViewPortBorder(), Visible(), VisibleRect(). Sus escuchadores mas importantes son: WINDOW: WindowActivated(), WindowClosed(), WindowClosing(), WindowDeactivated(), WindowOpened(). MOUSE: MouseClicked(), MouseDragged(),MouseEntered(), MouseExited(),MouseMoved(), MousePressed(), MouseReleased(). KEY: KeyPressed(), KeyReleased(), KeyTyped(). Programa ejemplo: import java.lang.*;import java.awt.*;import java.awt.event.*;import javax.swing.*; public class prog9 { //declaracion, creacion e inicializacion de componentes, objetos y variables static JFrame ventana= new JFrame(); static JScrollPane panel1 = new JScrollPane(); static JTextField jt1 = new JTextField(80);
// parte principal de programa public static void main(String[] args) { // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE); //cargando scrollpane panel1 con un componente grandote panel1.setViewportView(jt1); // cargando la ventana con el scrollpanel ventana.getContentPane().add(panel1,BorderLayout.CENTER); ventana.pack(); ventana.setVisible(true); //area de asociacion de objeto-eventos }; // termina main } // termina clase De momento el unico componente grandote a usar es el textfield con muchos caracteres, mas adelante se estudiaran componentes mas apropiados para este tipo de panel. Corrida:
UNIDAD 2: APLICACIONES GRAFICAS JAVA TEMA 14: JTABBEDPANE Tampoco estoy seguro si es de awt tambien, pero pueden intentarlo. Es un componente que permite a un usuario estarse intercambiando entre grupos de componentes que se encuentran en una especie de folders, cada uno de ellos con su propia pestaña(tab). Solo se puede poner un componente en cada folder o tab, asi que de preferencia, si se puede poner un panel en cada folder. Tabs/componentes son añadidos a este panel usando los metodos addTab e insertTab. Cada Tab(folder) tiene asociado un numero indice y el primer tab tiene como indice el numero 0 (cero). Algunas de sus propiedades mas importantes son: Autoscrolls(), Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(),Insets(), Name(), Opaque(), SelectedComponent(), SelectedIndex(), TabCount(), TabPlacement(), TabRunCount(), Titles(), ToolTipText(), Visible(), VisibleRect(). Algunos de sus escuchadores-eventos mas importantes son: WINDOW: WindowActivated(), WindowClosed(), WindowClosing(), WindowDeactivated(), WindowOpened(). MOUSE: MouseClicked(), MouseDragged(),MouseEntered(), MouseExited(),MouseMoved(), MousePressed(), MouseReleased(). KEY: KeyPressed(), KeyReleased(), KeyTyped(). Programa ejemplo: import java.lang.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;
public class prog10 { //declaracion, creacion e inicializacion de componentes, objetos y variables static JFrame ventana = new JFrame(); static JTabbedPane folders = new JTabbedPane(); static JPanel panel1 = new JPanel(); static JLabel jl1= new JLabel("label1");static JLabel jl2= new JLabel("label2"); static JLabel jl3= new JLabel("label3");static JLabel jl4= new JLabel("label4"); static JLabel jl5= new JLabel("label5");static JLabel jl6= new JLabel("label6"); // parte principal de programa public static void main(String[] args) { // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE); //cargando panel con sus componentes panel1.add(jl1); panel1.add(jl2); //cargando tabbedpane con un componente y titulo = componente folders.add(jl3); //cargando tabbedpane con un segundo componente usando indice folders.add(jl4,1); //cargando tabbedpane con un titulo y un componente folders.add(" pestaña 1 ",jl5); //Adds a component represented by a title and no icon Cover method for insertTab folders.addTab("pestaña 2",jl6); //cargando tabbedpane con panel1 folders.add("pestana panel",panel1); // cargando la ventana con el tabbedpane ventana.getContentPane().add(folders,BorderLayout.CENTER); ventana.pack(); ventana.setVisible(true); //area de asociacion de objeto-eventos }; // termina main } // termina clase Corrida: UNIDAD 2: APLICACIONES GRAFICAS JAVA TEMA 15: JTOOLBAR Las mismas dos notas anteriores y no han observado que en swing: La ventana lleva un contentpane() intermedio. no se ocupa un escuchador de ventana para cerrarla, solo un metodo mas de ventana (windows-on-close) que proporciona swing. Este componente es muy usado en programas de windows, su funcion es contener componentes que son usados frecuentemente por el usuario, por ejemplo save, print, etc, para evitar que el usuario tenga que accesar la barra de menu de arriba de la aplicacion. Sus propiedades mas comunes son: Autoscrolls(), Background(), Border(), Bounds(), Cursor(), Enabled(), Font(), Foreground(),Floatable(), Insets(), Layout(), Margin(), Name(), Opaque(), Orientation(), ToolTipText(), Visible(), VisibleRect().
Sus escuchadores-eventos mas comunes son: WINDOW: WindowActivated(), WindowClosed(), WindowClosing(), WindowDeactivated(), WindowOpened(). MOUSE: MouseClicked(), MouseDragged(),MouseEntered(), MouseExited(),MouseMoved(), MousePressed(), MouseReleased(). KEY: KeyPressed(), KeyReleased(), KeyTyped(). Programa ejemplo: import java.lang.*;import java.awt.*;import java.awt.event.*;import javax.swing.*; public class prog11 { //declaracion, creacion e inicializacion de componentes, objetos y variables static JFrame ventana = new JFrame(); //creando toolbar con nombre y orientacion verticaly usando uno de sus 4constructores static JToolBar jtb1 = new JToolBar("mi barrita",1 ); static JButton jb1 = new JButton("boton1 "); static JButton jb2 = new JButton("boton2 "); static JButton jb3 = new JButton("boton3 "); // parte principal de programa public static void main(String[] args) { // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE); //cargando toolbar panel con sus componentes jtb1.add(jb1); jtb1.add(jb2);jtb1.add(jb3); // cargando la ventana con el toolbar ventana.getContentPane().add(jtb1,BorderLayout.CENTER); ventana.pack(); ventana.setVisible(true); //area de asociacion de objeto-eventos }; // termina main } // termina clase Corrida:
UNIDAD 2: CONTROL DE PROGRAMA JAVA TEMA 16:JAVA JCOMBOBOX SOLO EN SWING. Existen muchas ocasiones en donde el usuario del programa tiene que proporcionar datos que provienen de un conjunto finito y muy pequeño de posibles respuestas, esto significa que cada vez que se ejecute el programa, el usuario estará proporcionando las mismas respuestas. Ejemplo de esta clase de datos, son por ejemplos Municipio en BC, las posibles respuestas solo son (Tecate, Tijuana, Mexicali, Ensenada, Rosarito), otro ejemplo es Sexo (Hombre, Mujer), etc.
Para situaciones como esta, existen componentes que permiten programar por adelantado las posibles respuestas, y el usuario solo debe seleccionar la respuesta apropiada , en lugar de tener que escribirla. Este componente ComboBox nos permite definir en primera instancia un conjunto de datos o valores respuestas asociados a una caja de edición cualesquiera, así ahora el usuario tendrá la oportunidad de seleccionar un dato del conjunto de datos o respuestas ya predefinido. Este componente ComboBox tiene dos partes, una parte de encabezado, para poner el nombre del grupo de respuestas( por ejemplo municipios, sexo, etc.). La segunda parte es la lista de opciones o respuestas que se debe cargar al tiempo de diseño de la ventana. Al momento de ejecución del programa, toda la lista de respuestas, estarán a la vista del usuario, para que este ultimo la seleccione. Recordar que el usuario al momento de ejecución del programa, solo vera el encabezado, para seleccionar su respuesta deberá apretar la flechita que esta a un lado del encabezado. Ejemplo: import java.lang.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class prog16 { //declaracion, creacion e inicializacion de componentes, objetos y variables static JFrame ventana= new JFrame(); static JPanel p1= new JPanel(); static JPanel p2= new JPanel(); static String[] lista={"municipios","tecate","tijuana","ensenada","tecate"}; static JComboBox municipios = new JComboBox(lista ); static JTextField jt1=new JTextField(15); static JButton jb1= new JButton("OK"); // parte principal de programa public static void main(String[] args) { // area de definicion de propiedades de el objeto ventana.setTitle("mi programa"); ventana.setDefaultCloseOperation(ventana.EXIT_ON_CLOSE); ventana.getContentPane().setLayout(new GridLayout(2,0)); //cargando panel1 con combobox y definiendo titulo p1.setLayout(new GridLayout(1,0)); //observar que index cero es el titulo (aunque es un elemento mas) municipios.setSelectedIndex(0); p1.add(municipios); //cargando segundo panel con jbutton y jtextfield p2.add(jb1); p2.add(jt1); ventana.getContentPane().add(p1); ventana.getContentPane().add(p2); ventana.pack(); ventana.setVisible(true); jb1.addMouseListener( new MouseAdapter() { public void mousePressed(MouseEvent e){ // la propiedad getselecteditem() regresa un objeto jt1.setText(String.valueOf( municipios.getSelectedItem() ) ); }} ); }; // termina main } // termina clase Para procesar este componentes solo usar getselecteditem() comor regresa objeto, se puede recibir en objeto de cualquier clase, ya como objeto con los metodos apropiado se puede mandar a variables u otros tipos (recordar operador cast y conversiones)
TAREAS JAVA 1.- REEDITAR ALGUNOS DE LOS PROBLEMAS YA RESUELTOS, AGREGANDO ESTE COMPONENTE EN LOS CASOS DE CAPTURAS QUE LO PUEDEN ADMITIR ( CAPTURAS DONDE YA SE TIENEN LAS ENTRADAS SELECCIONADAS O CONOCIDAS DE ANJAVA TEMA NO).
UNIDAD 3: APLICACIONES EN RED APPLETS JSP SERVLETS JAVA TEMA 1: INTRODUCCION APPLETS JSP SERVLETS En los ultimos años se ha venido presentando una revolución en el terreno de la construccion de programas o aplicaciones. Nuevas tecnologias y tecnicas de programación se han venido desarrollando para aprovechar el nuevo y moderno entorno computacional existente. Este nuevo entorno empieza a popularizarse a mediados de la decada de los 80's cuando en el terreno de las computadoras personales empiezan a aparecer una serie de sisJAVA TEMA s operativos que hacian enfasis en la creación de redes de computadoras personales. En la actualidad y a partir de mediados de los 90's muchas de estas nuevas redes se empiezan a integrar a la red de redes ya existente, el internet. Actualmente mas de 100 millones de computadores personales y mas de 300 millones de usuarios de las mismas estan o son parte de alguna red que esta integrada a internet y los numeros siguen creciendo exponencialmente. El nuevo entorno de programación enfatiza la construcción de programas, aplicaciones o sisJAVA TEMA s de información completos que son puestos y ejecutadas en maquinas especiales llamados servidores, en estos servidores un programa especial llamado servidor de paginas (web server) se encarga de interactuar con los diversos usuarios de la red o redes que puede alcanzar, es decir hay servidores (con su propio web server) que puede atender a una red interna pequeña o una red de una empresa que este dispersa geograficamente o a todas las maquinas que estan en la red de internet. Este proceso de interaccion con los usuarios remotos de esas maquinas, se lleva a cabo principalmente a travez de paginas html y gran parte del proceso de programación actual se centra en construir paginas.html que se mandan al web server, para que este ultimo lo mande al usuario que la este requiriendo. Existen muchas ventajas con este modelo, una de las primeras es que un peqeño programa o aplicación puede ser usado por millones de personas que tengan acceso al servidor y su servidor de paginas. El lenguaje de programación java fue desarrollado e implementado por la empresa sun para facilitar la construcción de programas y aplicaciones para este entorno, de hecho las primeras especificaciones y compiladores de java fueron creados en 1995. En esta unidad se ven de manera basica tres de los tipos de aplicaciones mas comunes que se pueden desarrollar en java para este entorno. Sin embargo antes de empezar con ellas ( applets servlets jsp ) se debe recordar que asi como ha ido evolucionando internet 1 (ya esta en puerta internet 2), existen otra serie de aplicaciones en java que siguen y facilitan este modelo, entre ellas tenemos beans java beans rmi ejb etc. que mas adelante en cuanto se actualize de nueva cuenta este material ya se incluiran. UNIDAD 3: APLICACIONES EN RED APPLETS JAVA TEMA 2: JAVA APPLET Y JAPPLET Applet y JApplet son aplicaciones mas parecidas a Frame y JFRAME que consola, pero que es enviada embebida o empotrada en una pagina html a una computadora o pc remota, para que esta ultima lo ejecute.
En general un applet es un pequeño programa en java, que es ejecutado remotamente, existen algunas restricciones acerca de los applets o programitas que se pueden mandar y ejecutar en maquinas remotas, por ejemplo no se pueden construir o mandar applets que trabajen con el disco duro de la maquina remota, etc. Como se observa de todo lo antes dicho, no solo se trata de crear un applet.java y compilarlo a applet.class, se tendra que crear tambien una pagina.html que tenga una liga y contenga el applet.class Ademas de la pagina.html y applet.class y todos los applets*.class que se generere al compilarlo con javac, se tendran que poner en un servidor de paginas (web server) para que sea el webserver quien mande la pagina, el applet y todas sus clases, al usuario o la maquina remota, para que sea esta ultima sea quien lo compile y ejecute. Es importante recordar que en la maquina remota, su browser debera tener actualizadu su maquina virtual de java, para internet-explorer actualizarlo con la opcion tools, windows update y bjar e instalar la maquina virtual de java mas actualizada que se encuentre. En resumen para resolver de manera adecuada este problema de applets se ocupa lo siguiente: 1.- Un programa o applet.java compilado a programa o applet.class, esto es sencillo y es parte de lo que se estudia en los siguientes JAVA TEMA s. Este applet se compila normalmente con javac y no borrar todos los diferente .class que se generen. 2.- Una pagina html que contenga una referencia o liga que active el applet class, esta pagina.html tambien se hace con el mejor editor de lenguajes de programación del mundo el notepad. 3.- Ya creada la pagina y compilado el applet se puede ejecutar localmente, para probarlo, usando un pograma que se llama appletviewr .exe que se encuentra en el directorio bin de jdk1.3, copiarlo al folder donde estan la pagina html y las clases que genero el javac con el applet Para ver el applet en ejecución dentro de msdos y en el folder donde esta todo ejecutar la orden: C:>appletviewer pagina.html 4.- Tambien se ocupara un servidor de paginas ( web server ) que es un programa que siempre esta corriendo o siendo ejecutado constantemente en la maquina servidora de paginas, y que su trabajo es almacenar las paginas.html y applets del usuario y estarlas mandando a las maquinas o pc remotas que esten accesando el servidor de paginas fisico. maquina). 5.- Ya creada la pagina, las clases y bien probado el applet, hacer un ftp ( revisar que en internet options advanced, este prendida la opcion ftp pasivo) a su www.susitio.programacionfacil.com y subir todo, excepto el applet.java (otra vez, no olvidar subir todas las clases intermedias). UNIDAD 3: JAVA APLICACIONES EN RED JAVA TEMA 3: JAVA APPLET Y JAPPLET CONTINUACION JApplet comparte muchos elementos comunes con Jframe y Jwindows en virtud de que todos estos descienden de swing entre otros elementos a considerar, estan que para
añadir controles, layouts, etc, se deberan hacer al contenpane() ya descrito y no directamente a el objeto de tipo Japplet. Sin embargo, en la actualidad la ejecución de un applet corre a cargo de la pc que la recibe y lamentablemente de sus maquinas virtuales de java instaladas, asi que en realidad mientras microsoft no actualize su maquina virtual para que reconozca swing.japplet, de momento solo reconoce awt.applet, los applets que se construyen en este curso son de awt.applet y no de swing.japplet(que por cierto estan mejores) Mejor un ejemplo: import java.awt.*; import java.applet.*; import java.awt.event.*; public class prog6 extends Applet { Panel p1; Label l1; TextField t1, t2; Button b1; public void init() { p1= new Panel(); p1.setLayout(new GridLayout(0,2) ); l1 = new Label("edad :"); t1= new TextField(15); t2=new TextField(15); b1= new Button("OK"); p1.add(l1);p1.add(t1);p1.add(t2);p1.add(b1); // abajo no se puso el objeto a la propiedad, porque el default es el propio prog6 o applet setLayout(new BorderLayout()); add(p1, BorderLayout.CENTER); b1.addMouseListener(new MouseAdapter() {public void mousePressed(MouseEvent e) { double edad= Double.parseDouble(t1.getText()); edad = edad * 12; t2.setText(String.valueOf(edad) ); } } ); } // cierra init } // cierra clase Notas: Solo se usa awt un applet no lleva main() lleva un metodo llamado init() La pagina que lo llama y se lo lleva a la pc remota, lleva el siguiente codigo: MI PRIMER APPLET Como se observa la directiva que lo activa es 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. 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: DAME SUELDO 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(""); //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(""); 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 DAME SUELDO CODIGO JSP 500){ out.println("RICO");} else {out.println("POBRE"); }; %> 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 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 = 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(""); pagina.println("ALUMNOS TABLA"); pagina.println("MATRICULA NOMBRE EDAD"); pagina.println(""); pagina.println(""); //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(""); while (true) { matricula=archivo.readInt(); nombre=archivo.readUTF(); edad=archivo.readInt(); if ( edad >= edad1){ pagina.println(""+matricula+""); pagina.println(""+nombre+""); pagina.println(""+edad+""); pagina.println("");}; } } catch(FileNotFoundException fnfe) { /* Archivo no encontrado */ } catch (IOException ioe) { /* Error al escribir */ } pagina.println(""); 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 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("MI SERVLET"); pagina.println("MI TABLA"); pagina.println("CLAVE NOMBRE EDAD"); pagina.println(""); pagina.println(""); while(tabla.next()) { pagina.println(""); pagina.println(""+tabla.getString(1)+""); pagina.println(""+tabla.getString(2)+""); pagina.println(""+tabla.getString(3)+""); pagina.println(""); }; // fin while pagina.println(""); 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 NOMBRE: EDAD:
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(""); pagina.println(n+"YA SE INSERTO, BACK PARA REGRESAR"); pagina.println("= "+edad1); PrintWriter pagina =response.getWriter(); pagina.println("MI SERVLET"); pagina.println("MI TABLA"); pagina.println("CLAVE NOMBRE EDAD"); pagina.println(""); pagina.println(""); while(tabla.next()) { pagina.println(""); pagina.println(""+tabla.getString(1)+""); pagina.println(""+tabla.getString(2)+""); pagina.println(""+tabla.getString(3)+""); pagina.println(""); }; // fin while pagina.println(""); 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: CLAVE A ELIMINAR: 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(""); pagina.println("BORRADO BACK TO REGRESAR"); pagina.println(""); 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 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: CLAVE A MODIFICAR: 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(""); //construyendo forma dinamica, recordar que se insistio en no usar "" en html pagina.println("");
pagina.println("CLAVE:"); pagina.println("NOMBRE:"); pagina.println("EDAD:"); pagina.println(""); pagina.println(""); 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(""); pagina.println(n+"YA SE MODIFICO, BACK PARA REGRESAR"); pagina.println("
View more...
Comments