Post on 03-Mar-2015
José Antonio García Mejía 1
Introducción a la POO
José Antonio García Mejía 2
Objetivo
Conocer los principios de la POO y aplicarlos en el lenguaje Java
José Antonio García Mejía 3
Características
Abstracción Encapsulamiento Herencia PolimorfismoExplicar con ejemplos prácticos
José Antonio García Mejía 4
Abstracción
“ELIMINAR LO IRRELEVANTE Y AMPLIFICAR LO
ESENCIAL”
José Antonio García Mejía 5
Abstracción
Granularidad A los elementos en el dominio del
problema y su representación en el dominio de la solución se le llama OBJETO.
Abstracción de datos
José Antonio García Mejía 6
Tipo de dato abstracto
Un tipo abstracto de datos define una especie de caja negra
ModeloAbstracción
José Antonio García Mejía 7
Encapsulamiento Encapsular es agrupar en una misma entidad las estructuras de
datos y las funciones, ocultando la implementación bajo una interface.
Implementación es la manera cómo se llevan a cabo las operaciones, es decir que tipo de datos se utilizan, cuanta memoria utilizan, etc.
Si todos los datos miembro de una clase estuvieran disponibles para cualquiera, entonces el cliente podrá hacer lo que quiera con la clase y no habría manera de forzar un comportamiento en especial. De ahí, la necesidad de mantener claramente separada y protegida la interface y la implementación.
José Antonio García Mejía 8
Herencia Definición (Herencia). Herencia es
el mecanismo que permite que un clase A herede propiedades de una clase B. Decimos "A hereda de B". Objetos de la clase A tienen así acceso a los atributos y métodos de la clase B sin necesidad de redefinirlos.
Definición (Superclase/Subclase)Si la clase A hereda de la clase B, entonces B es la superclase de A. A es subclase de B.
A
B
José Antonio García Mejía 9
Polimorfismo– “poly” muchos, varios– “morph” forma o apariencia.
En la programación orientada a objetos, “morph” forma se refiere a la interface o a las propiedades de los objetos mientras que “poly” que las la interface o los atributos de los objetos son diferentes.
Las interfaces son fundamentales en los sistemas orientados a objetos ya que es la manera de conocerlos.
Se dice que dos o mas objetos son polimórficos si tienen interfaces idénticas pero comportamiento diferente; desde el punto de vista del cliente esos objetos son indistinguibles.
El polimorfismo se logra cuando una clase hereda la interfaz de otra clase ya sea total o parcial o bien, con tipo o sin tipo.
José Antonio García Mejía 10
Objeto y claseEn la Programación orientada a objetos cualquier cosa es un
objeto, mantienen un estado que indica sus transiciones y tienen métodos que sirven para que expresar un comportamiento deseado.
Se puede ver a un objeto como una caja negra la cual contiene código (secuencia de instrucciones) y datos (información sobre la cual actúan las instrucciones). Tradicionalmente el código y los datos son entidades separadas, por ejemplo en el lenguaje C, las unidades de código son las funciones mientras que las unidades de información son las estructuras.
Un programa es un conjunto de objetos comunicándose entre ellos mediante mensajes.
José Antonio García Mejía 11
Objeto y claseLa clase implementa al tipo. Un objeto se define por medio de su clase de ahí que un objeto
sea una instancia individual de una clase. Al proceso de crear un objeto se le llama instanciación.
Una clase es la combinación de estructuras, funciones e interfaces.
La interfaz de una clase es todo lo visible para aquellas funciones que no forman parte de la clase. Las funciones clientese comunican con la clase mediante la invocación de su interfaz.
Los objetos están protegidos por una interfaz: el contrato entre el objeto y el cliente.
Todos los objetos de un mismo tipo pueden recibir los mismos mensajes.
José Antonio García Mejía 12
Objeto y clase
objeto
código
código
método
método
datos
interfaz
implementación
Nombre de la Clase
Atributos
Métodos
José Antonio García Mejía 13
Objeto y clase Las solicitudes que se puden hacer a
un objeto están definidas por su interface. El tipo del objeto determina la interface de éste.
Light lt;lt.on();
José Antonio García Mejía 14
Objeto y clase En el ámbito de la programación, existen creadores de clases
(aquellos que crean nuevos tipos de datos) y programadores clientes (aquellos que usan las clases creadas por los primeros).
La meta del programador cliente es coleccionar una completa caja de herramientas de clases que le permita el rápido desarrollo de aplicaciones.
La meta del creador de las clases es exponer únicamente lo que necesita el programador cliente y manterner lo demás oculto.
José Antonio García Mejía 15
Objeto y clase
Especificaciones de estado: Las clases describen la manera de almacenar la información del estado dentro de sus instancias. Los tipos de variables dentro de una clase se clasifican en dos categorías:
Variables de instancia: Son variables que aparecen cada vez que se instancia un objeto.
Variables de Clase: Son variables que contienen datos que sólo son relevantes a la clase misma y no a cualquier instancia de clase. Una variable de clase la comparten todos los objetos de la clase.
José Antonio García Mejía 16
Objeto y clase
Especificación del comportamiento: El algoritmo que define el comportamiento de un objeto se especifica en la clase del objeto y al igual que las variables se catalogan en dos grupos:
Métodos de Instancia: Son funciones que manipulan al estado de un objeto en particular.
Métodos de Clase: Son funciones que son relevantes a una clase, pero no operan en alguna instancia en particular de la clase. Se pueden usar para crear nuevas instancias de clase.
José Antonio García Mejía 17
Clases y objetos
José Antonio García Mejía 18
Introducción a la programación en Java
José Antonio García Mejía 19
¿Qué es Java?
Es un lenguaje de OOP, desarrollado por Sun Microsystems, diseñado para ser pequeño, sencillo y portátil a través de plataformas y sistemas operativos, tanto a nivel de código fuente como en binario
José Antonio García Mejía 20
Historia de Java (1)• Fue desarrollado por Sun Microsystems en 1991, se llamóOak.
• Creación de software para dispositivos electrónicos (TV, VCR, tostadores).
• En 1994 se escribe WebRunner (HotJava).
José Antonio García Mejía 21
Historia de Java (2)
• En 1994 se reescribe el compilador de Java en Java a partir de su original en C.
• Sun introduce Java en 1995 en la Sun World 95 convention.
José Antonio García Mejía 22
Características de Java
• Simple.
• Orientado a objetos.
• Distribuido
• Robusto.
• Arquitectura neutral.
José Antonio García Mejía 23
Java es un lenguaje Multiplataforma
José Antonio García Mejía 24
Compilación de un programa en Java
José Antonio García Mejía 25
Programas en Java
José Antonio García Mejía 26
Características de Java
• Seguro.
• Portable
• Interpretado.
• Multihilos.
• Dinámico.
José Antonio García Mejía 27
Java para aplicaciones (1)
¿Es Java en realidad es una buena tecnología para desarrollar aplicaciones corporativas?
A continuación se muestran algunas necesidades importantes del desarrollo de aplicaciones
José Antonio García Mejía 28
Java para aplicaciones (2)
• Desarrollo rápido de aplicaciones
• Aplicaciones efectivas y eficientes
• Portabilidad para programador y programa
José Antonio García Mejía 29
Java para aplicaciones (3)
• Costos de desarrollo
• Mantenimiento y soporte
• Aprendizaje
José Antonio García Mejía 30
Instalación de Java
El programa de instalación se encuentra en el CD
Seguir los siguientes pasos– Copiar el archivo a su máquina– Ejecutar el archivo jdk1_2_2-000-win.exe– Modificar agregar c:\jdk1.2.2\bin en la
variable PATH, del archivo autoexec.bat
José Antonio García Mejía 31
Construcción y compilación de programas en Java
José Antonio García Mejía 32
Tipos de Programas en Java
Aplicaciones.- Los programas se ejecutan en consolas
Applet.- Los programas se ejecutan en un browser o navegador de la Web
José Antonio García Mejía 33
Primer programa en Java
1: class HelloWorld 2: {3: public static void main (String args[ ]) 4: {5: System.out.println("Hello World!");6: }7: }
José Antonio García Mejía 34
Compilación en Java
javac HelloWorld.java
José Antonio García Mejía 35
Ejecución del programa
java HelloWorld
José Antonio García Mejía 36
Primer Applet en Java
1: import java.awt.Graphics;2: public class HelloWorldApplet
extends java.applet.Applet 3: {4: public void paint(Graphics g) 5: {6: g.drawString("Hello world!", 5,
25);7: }8: }
José Antonio García Mejía 37
Página HTML para el Applet
1: <HTML>2: <HEAD>3: <TITLE>Hola a Todos!</TITLE>4: </HEAD>5: <BODY>6: <P>Mi primer Applet Dice:7: <APPLET Code=“HolaMundoApplet.class“8: width=150 height=25>9: </APPLET>10: </BODY>11:</HTML>
José Antonio García Mejía 38
Ejecución del Applet
• Compile.
javac HolaMundoApplet.java
• Ejecutar el Applet.appletviewer HolaMundoApplet.html
José Antonio García Mejía 39
Tipos de clases en Java
•Abstract
•final
•public
•synchronizable
José Antonio García Mejía 40
Métodos y atributos
Cada clase que escribe en Java estáformada por dos componentes:
atributos y comportamiento
José Antonio García Mejía 41
Atributos
Son las características individuales, que diferencian a un objeto de otro, y determinan la apariencia, estado u
otras cualidades de ese objeto.
José Antonio García Mejía 42
Atributos
Los atributos se definen con variables. Cada instancia de una
clase puede tener diferentes valores para sus variables, por lo que cada
variable se le llama variable de instancia
José Antonio García Mejía 43
Métodos
Se establece a través de un conjunto de funciones, llamados métodos,
definidas dentro de las clases.
José Antonio García Mejía 44
Creando una clase
class Motorcycle {
}
José Antonio García Mejía 45
Agregando atributos
String make;String color;boolean engineState = false;
José Antonio García Mejía 46
Agregando métodosvoid startEngine( )
{if (engineState == true)
System.out.println("The engine is already on.");
else {engineState = true;
System.out.println("The engine is now on.");
}}
José Antonio García Mejía 47
Agregando métodos
void showAtts() {System.out.println("This motorcycle is a "
+ color + " " + make);if (engineState == true)
System.out.println("The engine is on.");else System.out.println("The engine is off.");
}
José Antonio García Mejía 48
Agregando el método main()1: public static void main (String args[])2: {3: Motorcycle m = new Motorcycle();4: m.make = "Yamaha RZ350";5: m.color = "yellow";6: System.out.println("Calling showAtts...");7: m.showAtts();8: System.out.println("--------");9: System.out.println("Starting engine...");10: m.startEngine();11: System.out.println("--------");12: System.out.println("Calling showAtts...");13: m.showAtts();14: System.out.println("--------");15: System.out.println("Starting engine...");16: m.startEngine();17: }
José Antonio García Mejía 49
Salida del programa
Calling showAtts...This motorcycle is a yellow Yamaha RZ350The engine is off.--------Starting engine...The engine is now on.--------Calling showAtts...This motorcycle is a yellow Yamaha RZ350The engine is on.--------Starting engine...The engine is already on.
José Antonio García Mejía 50
Alcance de objetos y reciclado de memoria
En Java, la recolección y liberación de memoria es responsabilidad de un threadllamado automatic garbage collector (recolector automático de basura).
José Antonio García Mejía 51
Herencia (1)
Permite la creación de nuevas clases a partir de clases existentes, definiendo
solamente las diferencias existentes entre ambas.
José Antonio García Mejía 52
Herencia (2)
Clase A
Clase B
Clase C Clase D Clase E
José Antonio García Mejía 53
Subclasificación
Crear una nueva clase que heredará atributos y métodos de alguna otra
clase en la jerarquía.
José Antonio García Mejía 54
Una jerarquía de clases
Object
Vehiculo
VehiculoPersonal VehiculoGrupo
José Antonio García Mejía 55
Una jerarquía de clasesObject
Vehiculo
Vehiculo_Dos_Llantas Vehiculo_Cuatro_Llantas
Moto Automovil Camion
José Antonio García Mejía 56
¿Cómo funciona la herencia?
José Antonio García Mejía 57
¿Cómo sobreponer métodos?
José Antonio García Mejía 58
Java solo contempla la herencia simple,
pero se puede simular la herencia múltiple
José Antonio García Mejía 59
Modificadores de acceso
• public
• protected
• private
• friendly
José Antonio García Mejía 60
Creando una subclase1:import java.awt.Graphics;2:import java.awt.Font;3:import java.awt.Color;4:5:public class HolaOApplet extends java.applet.Applet6: {7:8: Font f = new Font("TimesRoman",Font.BOLD,36);9:10: public void paint(Graphics g) 11: {12: g.setFont(f);13: g.setColor(Color.red);14: g.drawString(“Hola Otra vez!", 5, 40);15: }16: }
José Antonio García Mejía 61
Página HTML para el Applet<HTML>
<HEAD><TITLE>Otro Applet</TITLE>
</HEAD><BODY><P>Mi Segundo Applet dice:<BR><APPLET Code="HolaOApplet.class" Width=200
Height=50></APPLET>
</BODY></HTML>
José Antonio García Mejía 62
Salida del Applet
José Antonio García Mejía 63
Variables y métodos estáticos
Sirven para crear una clase en la que el valor de una variable de instancia sea el mismo para todos los objetos instanciados a partir de esa clase.
José Antonio García Mejía 64
Tipos de variables
•Variables de instancia.
•Variables de clase.
•Variables locales.
José Antonio García Mejía 65
Declaración de variables
int myAge;String myName;boolean isTired;int x, y, z;String firstName, LastName;int myAge, mySize, numShoes = 28;String myName = "Laura";boolean isTired = true;int a = 4, b = 5, c = 6;
José Antonio García Mejía 66
Tipos de datos
•int
•float
•String
•char
•boolean
•byte
•short
•long
José Antonio García Mejía 67
Tipos de constantes
•Número
•String
•char
•boolean
•long
José Antonio García Mejía 68
Operadores
+,-,*,/
+=, -=, *=, /=
++,--
==, !=, <, >, <=, >=
José Antonio García Mejía 69
Precedencia de operadores (1)
. [ ] ( )
++ -- ! instanceof
new (tipo) expresión
* / %
+ -
< > <= >=
José Antonio García Mejía 70
Precedencia de operadores (2)
== !=
&&
| |
? :
= += -= *= /= %=
José Antonio García Mejía 71
¿Cómo crear nuevos objetos?
String str=new String();
Random r = new Random();
Motorcycle m2= new Motorcycle()
José Antonio García Mejía 72
Lo que hace new
•Crea una nueva instancia de la clase dada.
•Se llama al método constructor.
José Antonio García Mejía 73
Método constructor
Es un método especial para crear e inicializar nuevas
instancias de clase. Tiene el mismo nombre de la clase y no posee un tipo de retorno.
José Antonio García Mejía 74
Acceso a las variables de instancia y de clase
Con la notación de punto, un nombre de variable de
instancia o de clase tiene dos partes:
objeto.variable
José Antonio García Mejía 75
Variables de instancia
Point thePoint = new Point(10,10);
thePoint.x = 5;
System.out.println(“Y es :”+thePoint.y);
José Antonio García Mejía 76
Variables de clase
class FamilyMember {
static String surname = “Johnson”;
String name;
int age;
}
José Antonio García Mejía 77
Métodos de instancia
myObject.methodOne(arg1,arg2,arg3);
myObject.methodNoArgs();
myObject.getClass().getName();
myObject.var.methodTwho(arg1,arg2);
José Antonio García Mejía 78
Métodos de clase
Clase.myMetod();
String.valueOf(5);
José Antonio García Mejía 79
Cast en tipos primitivos
(typename) value
(int) x/y;
(String) arg;
José Antonio García Mejía 80
Cast de objetos
(classname) object
GreenApple a;
Apple a2;
a = new GreenApple();
a2 = (Apple) a;
José Antonio García Mejía 81
Comparación de objetos
El único tipo de comparación que se puede llevar a cabo entre los objetos
es con los operadores:
== (igual)
!= (diferente)
Object.equals(Object Object)
José Antonio García Mejía 82
Ejemplo de igualdad en Strings
1: class EqualsTest {2: public static void main(String args[]) {3: String str1, str2;4: str1 = "she sells sea shells by the sea
shore.";5: str2 = str1;6: 7: System.out.println("String1: " + str1);8: System.out.println("String2: " + str2);9: System.out.println("Same object? " + (str1 ==
str2));
José Antonio García Mejía 83
Prueba de igualdad
10: 11: str2 = new String(str1);12: 13: System.out.println("String1: " + str1);14: System.out.println("String2: " + str2);15: System.out.println("Same object? " + (str1
== str2));16: System.out.println("Same value? " +
str1.equals(str2));17: }18: }
José Antonio García Mejía 84
Determinación de la clases de un objeto
String name = obj.getClass().getName();
"foo" instanceof String // truePoint pt = new Point(10, 10);pt instanceof String // false
José Antonio García Mejía 85
Paquetes de clases en Java
•java.lang•java.util•java.net•java.awt•java.applet
José Antonio García Mejía 86
Arreglos
Son una forma de almacenar una lista de elementos. En Java
son verdaderos objetos que pueden pasarse y tratarse de la
misma manera que otros objetos.
José Antonio García Mejía 87
Pasos para crear arreglos
• Declare una variable para guardar el arreglo.
• Cree un nuevo objeto de arreglo y asígnelo a la variable de arreglo.
• Guarde lo que desee en el arreglo.
José Antonio García Mejía 88
Declaración de arreglos
String[ ] difficultWords;
Point[ ] hits;
int[ ] temps;
José Antonio García Mejía 89
Creando arreglos de objetos
•String[] names = new String[10];
•int[ ] temps = new int[99];
•String[ ] chiles = { "jalapeno", "anaheim", "serrano", "habanero", "thai" };
José Antonio García Mejía 90
Acceso a los elementos de un arreglo
myArray[subscript]
José Antonio García Mejía 91
Arreglos multidimensionales
int coords[ ][ ] = new int[12][12];coords[0][0] = 1;coords[0][1] = 2;
José Antonio García Mejía 92
Sentencia ifif (x < y)
System.out.println("x is smaller thany");if (x < y)
System.out.println("x is smaller thany");
else System.out.println("y is bigger");
José Antonio García Mejía 93
Condicionales ifif (engineState == true )
System.out.println("Engine is already on.");
else {System.out.println("Now starting
Engine.");if (gasLevel >= 1)
engineState = true;else System.out.println("Low on gas! Can't
start engine.");
José Antonio García Mejía 94
Sentencia switchswitch (test) {
case valueOne: resultOne;break;
case valueTwo: resultTwo;break;
case valueThree: resultThree;break;
...default: defaultresult;
}
José Antonio García Mejía 95
Condicional switch
switch (x) {case 2:case 4:case 6:case 8:
System.out.println("x is an even number.");break;
default: System.out.println("x is an odd number.");}
José Antonio García Mejía 96
Condicional switch1: class NumberReader {2:3: String convertNum(int val) {4: switch (val) {5: case 0: return "zero ";6: case 1: return "one ";7: case 2: return "two ";8: case 3: return "three ";9: case 4: return "four ";10: case 5: return "five ";11: case 6: return "six ";12: case 7: return "seven ";
José Antonio García Mejía 97
Condicional switch
13: case 8: return "eight ";14: case 9: return "nine ";15: default: return " ";16: }17: }18: 19: public static void main (String args[]) {20: NumberReader n = new NumberReader();21: String num = n.convertNum(4) +
n.convertNum(1) + n.convertNum(5);22: System.out.println("415 converts to " +
num);23: }24:}
José Antonio García Mejía 98
Ciclos for
for (initialization; test; increment) {statements;
}
José Antonio García Mejía 99
Ciclos for1: class NamesLoop {2:3: String[] firstNames = { "Dennis",
"Grace", "Bjarne", "James" };4: String[] lastNames = new
String[firstNames.length];5: 6: void printNames() {7: for (int i = 0; i < firstNames.length; i++) 8: System.out.println(firstNames[i] + " "
+ lastNames[i]); 9: }
José Antonio García Mejía 100
Ciclos for
10: 11: public static void main (String args[]) {12: ArrayTest a = new ArrayTest();13: a.printNames();14: System.out.println("----------");15: a.lastNames[0] = "Ritchie";16: a.lastNames[1] = "Hopper";17: a.lastNames[2] = "Stroustrup";18: a.lastNames[3] = "Gosling";19: 20: a.printNames(); 21:}22:}
José Antonio García Mejía 101
Ciclos while
while (condition) {bodyOfLoop;
}
José Antonio García Mejía 102
Ciclos while1: class CopyArrayWhile {2: public static void main (String args[]) {3: int[] array1 = { 5, 7, 3, 6, 0, 3, 2, 1 };4: float[] array2 = new float[array1.length];5: 6: System.out.print("array1: [ ");7: for (int i = 0; i < array1.length; i++) {8: System.out.print(array1[i] + " ");9: }10: System.out.println("]");
José Antonio García Mejía 103
Ciclos while
11: 12: System.out.print("array2: [ ");13: int count = 0;14: while ( count < array1.length &&
array1[count] != 0) { 15: array2[count] = (float) array1[count];16: System.out.print(array2[count++] + "
");17: }18: System.out.println("]");19: }20:}
José Antonio García Mejía 104
Ciclos do ... while
do {bodyOfLoop;
} while (condition);
José Antonio García Mejía 105
Ciclos do ... while1: class DoTest {2: public static void main (String args[]) {3: int x = 1;4: 5: do {6: System.out.println("Looping, round " + x);7: x++;8: } while (x <= 10);9: }10: }
José Antonio García Mejía 106
¿Cómo salir de los ciclos?
•break
•continue
José Antonio García Mejía 107
Ejemplo del uso de break
int count = 0;while (count < array1.length) {
if (array1[count] == 0) {break;
}array2[count] = (float)
array1[count++];}
José Antonio García Mejía 108
Ejemplo del uso de continue
int count1 = 0;int count2 = 0;while (count < array1.length) {
if (array1[count1] == 0) {continue;count1++
}array2[count2++] =
(float)array1[count1++];}
José Antonio García Mejía 109
Definición de Clases
class MyClassName{
...}
José Antonio García Mejía 110
Herencia
class myClassName extends mySuperClassName {...}
José Antonio García Mejía 111
Constantes
final float pi = 3.141592;final boolean debug = false;final int maxsize = 40000;
José Antonio García Mejía 112
Variables de clase
static int sum;static final int maxObjects = 10;
José Antonio García Mejía 113
Métodos
returntype methodname(type1 arg1, type2 arg2, type3 arg3..) {
...}
José Antonio García Mejía 114
La clase RangeClass
1: class RangeClass {2: int[] makeRange(int lower, int upper) {3: int arr[] = new int[ (upper - lower) + 1 ];4: 5: for (int i = 0; i < arr.length; i++) {6: arr[i] = lower++;7: }8: return arr;9: }10:
José Antonio García Mejía 115
La clase RangeClass
11: public static void main(String arg[]) {12: int theArray[];13: RangeClass theRange = new RangeClass();14: 15: theArray = theRange.makeRange(1, 10);16: System.out.print("The array: [ ");17: for (int i = 0; i < theArray.length; i++) {18: System.out.print(theArray[i] + " ");19: }20: System.out.println("]");21: }22: 23: }
José Antonio García Mejía 116
La palabra reservada thisHace referencia al objeto actual
t = this.x; this.myMethod(this); return this;
José Antonio García Mejía 117
Pasando argumentos a los programas en Java
1: class EchoArgs {2: public static void main(String args[]) {3: for (int i = 0; i < args.length; i++) {4: System.out.println("Argument " + i + ": " + args[i]);5: }6: }7: }
José Antonio García Mejía 118
Métodos constructores
Es una clase especial de método que determina como se inicializa un objeto cuando se
crea.
José Antonio García Mejía 119
Constructores básicos
• Siempre tienen el mismo nombre de la clase.
• No tiene un tipo de retorno (return)
José Antonio García Mejía 120
Sobrecargando constructores
1: import java.awt.Point;3: class MyRect2 {4: int x1 = 0;5: int y1 = 0;6: int x2 = 0;7: int y2 = 0;9: MyRect2(int x1, int y1, int x2, int y2) {10: this.x1 = x1;11: this.y1 = y1;12: this.x2 = x2;13: this.y2 = y2;14: }
José Antonio García Mejía 121
Sobre carga de constructores
16: MyRect2(Point topLeft, Point bottomRight) {
17: x1 = topLeft.x;18: y1 = topLeft.y;19: x2 = bottomRight.x;20: y2 = bottomRight.y;21: }22: 23: MyRect2(Point topLeft, int w, int h) {24: x1 = topLeft.x;25: y1 = topLeft.y;26: x2 = (x1 + w);27: y2 = (y1 + h);28: }
José Antonio García Mejía 122
Sobre carga de constructores
30: void printRect() {31: System.out.print("MyRect: <" + x1 +
", " + y1);32: System.out.println(", " + x2 + ", " +
y2 + ">");33: }
José Antonio García Mejía 123
Sobre carga de constructores
35: public static void main(String args[]) {36: MyRect2 rect;37: 38: System.out.println("Calling MyRect2
with coordinates 25,25 50,50:");39: rect = new MyRect2(25, 25, 50,50);40: rect.printRect();41: System.out.println("----------");42: 43: System.out.println("Calling MyRect2
w/points (10,10), (20,20):");
José Antonio García Mejía 124
Sobre carga de constructores
44: rect= new MyRect2(new Point(10,10), new Point(20,20));
45: rect.printRect();46: System.out.println("----------");47: 48: System.out.print("Calling MyRect2 w/1 point
(10,10)");49: System.out.println(" width (50) and height (50):");50: rect = new MyRect2(new Point(10,10), 50, 50);51: rect.printRect();52: System.out.println("----------");54: } }
José Antonio García Mejía 125
Sobre carga de métodos
1: class PrintClass {2: int x = 0;3: int y = 1;4: 5: void printMe() {6: System.out.println("x is " + x + ", y is " + y);7: System.out.println("I am an instance of the
class " +8: this.getClass().getName());9: }
10: }
José Antonio García Mejía 126
Sobre carga de métodos
1: class PrintSubClass extends PrintClass {2: int z = 3;3: 4: public static void main(String args[]) {5: PrintSubClass obj = new PrintSubClass();6: obj.printMe();7: }8: }
José Antonio García Mejía 127
Sobre carga de métodos
1: class PrintSubClass2 extends PrintClass {2: int z = 3;3: 4: void printMe() {5: System.out.println("x is " + x + ", y is "
+ y +6: ", z is " + z);7: System.out.println("I am an instance of
the class " +8: this.getClass().getName());9: }
José Antonio García Mejía 128
Sobre carga de métodos
11: public static void main(String args[]) {12: PrintSubClass2 obj = new
PrintSubClass2();13: obj.printMe();14: }15: }
José Antonio García Mejía 129
Llamada del método original
// From PrintSubClass2
void printMe() {super.printMe();System.out.println("z is " + z);
}
José Antonio García Mejía 130
“Sobreponiendo”Constructores
1: import java.awt.Point;2: class NamedPoint extends Point {3: String name;4:5: NamedPoint(int x, int y, String name) {6: super(x,y);7: this.name = name;8: }
José Antonio García Mejía 131
“Sobreponiendo”Constructores
9: public static void main (String arg[]) {10: NamedPoint np = new NamedPoint(5,
5, "SmallPoint");11: System.out.println("x is " + np.x);12: System.out.println("y is " + np.y);13: System.out.println("Name is " +
np.name);14: }15:}
José Antonio García Mejía 132
Applets
Son pequeñas aplicaciones que se
pueden ejecutar desde un visualizador del World Wide Web
José Antonio García Mejía 133
Restricciones de Applets
• No pueden leer o escribir en el sistema de archivos del director.
• Sólo se pueden comunicar con el servidor donde residen.
• No pueden ejecutar ningún programa en el sistema del lector.
José Antonio García Mejía 134
Creando Applets
public class myClass extends java.applet.Applet{
...}
José Antonio García Mejía 135
Actividades principales de los applets
• Inicialización.
• Arranque.
• Detención.
• Destrucción.
José Antonio García Mejía 136
Inicialización
public void init() {...
}
José Antonio García Mejía 137
Arranque
public void start() {...
}
José Antonio García Mejía 138
Detención
public void stop() {...
}
José Antonio García Mejía 139
Destrucción
public void destroy() {
...}
José Antonio García Mejía 140
Dibujo
public void paint(Graphics g) {...
}
José Antonio García Mejía 141
Un Applet sencillo
1: import java.awt.Graphics;2: import java.awt.Font;3: import java.awt.Color;4:5: public class HelloAgainApplet
extends java.applet.Applet {6:7: Font f = new Font("TimesRoman",
Font.BOLD, 36);8:
José Antonio García Mejía 142
Un applet sencillo
9: public void paint(Graphics g) {10: g.setFont(f);11: g.setColor(Color.red);12: g.drawString("Hello again!", 5, 40);13: }14: }
José Antonio García Mejía 143
El tag <APPLET>1: <HTML>
2: <HEAD>3: <TITLE>This page has an applet on it</TITLE>4: </HEAD>5: <BODY>6: <P>My second Java applet says:7: <BR><APPLET CODE="HelloAgainApplet.class"
WIDTH=200 HEIGHT=50>8: Hello Again!9: </APPLET>10: </BODY>11: </HTML>
José Antonio García Mejía 144
Resultado
José Antonio García Mejía 145
Pasando parámetros a los Applets
1: <HTML>2: <HEAD>3: <TITLE>Hello!</TITLE>4: </HEAD>5: <BODY>6: <P>7: <APPLET CODE="MoreHelloApplet.class"
WIDTH=200 HEIGHT=50>8: <PARAM NAME=name VALUE="Bonzo">9: Hello to whoever you are!10: </APPLET>11: </BODY>12: </HTML>
José Antonio García Mejía 146
Pasando parámetros a los Applets
1: import java.awt.Graphics;2: import java.awt.Font;3: import java.awt.Color;4:5: public class MoreHelloApplet extends
java.applet.Applet {6:7: Font f = new Font("TimesRoman",
Font.BOLD, 36);8: String name;9:
José Antonio García Mejía 147
Pasando parámetros a los Applets
10: public void init() {11: name = getParameter("name");12: if (name == null)13: name = "Laura";14:15: name = "Hello " + name + "!";16: }17:
José Antonio García Mejía 148
Pasando parámetros a los Applets
18: public void paint(Graphics g) {19: g.setFont(f);20: g.setColor(Color.red);21: g.drawString(name, 5, 40);22: }23: }
José Antonio García Mejía 149
Resultado
José Antonio García Mejía 150
La clase Graphics
import java.awt.Graphics;
public class MyClass extends java.applet.Applet {...}
José Antonio García Mejía 151
El sistema coordenado
José Antonio García Mejía 152
Líneas
import java.awt.Graphics;
public class MyLine extends java.applet.Applet {public void paint(Graphics g) {
g.drawLine(25,25,75,75);}
}
José Antonio García Mejía 153
Resultado
José Antonio García Mejía 154
Rectángulos
import java.awt.Graphics;
public class MyRect extends java.applet.Applet {public void paint(Graphics g) {
g.drawRect(20,20,60,60);g.fillRect(120,20,60,60);
}}
José Antonio García Mejía 155
Resultado
José Antonio García Mejía 156
Rectángulos redondeados
José Antonio García Mejía 157
Rectángulos redondeados
import java.awt.Graphics;
public class MyRRect extendsjava.applet.Applet {
public void paint(Graphics g) {g.drawRoundRect(20,20,60,60,10,10);g.fillRoundRect(120,20,60,60,20,20);
}}
José Antonio García Mejía 158
Resultado
Incluir la imagen para ejemplificar esto
José Antonio García Mejía 159
Rectángulos 3D
import java.awt.Graphics;
public class My3DRect extends java.applet.Applet {public void paint(Graphics g) {
g.draw3DRect(20,20,60,60,true);g.draw3DRect(120,20,60,60,false);
}}
José Antonio García Mejía 160
Resultado
Incluir la imagen para ejemplificar esto
José Antonio García Mejía 161
Polígonos
import java.awt.Graphics;
public class MyPoly extends java.applet.Applet{
public void paint(Graphics g) {int exes[] = { 39,94,97,142,53,58,26 };int whys[] = { 33,74,36,70,108,80,106 };int pts = exes.length;
g.drawPolygon(exes,whys,pts);}
}
José Antonio García Mejía 162
Resultado
José Antonio García Mejía 163
Óvalos
import java.awt.Graphics;
public class MyOval extends java.applet.Applet {public void paint(Graphics g) {
g.drawOval(20,20,60,60);g.fillOval(120,20,100,60);
}}
José Antonio García Mejía 164
Resultado
José Antonio García Mejía 165
La clase Lamp1: import java.awt.*;2: 3: public class Lamp extends java.applet.Applet {4: 5: public void paint(Graphics g) {6: // the lamp platform7: g.fillRect(0,250,290,290);8:9: // the base of the lamp10: g.drawLine(125,250,125,160);11: g.drawLine(175,250,175,160);12:
José Antonio García Mejía 166
La clase Lamp13: // the lamp shade, top and bottom edges14: g.drawArc(85,157,130,50,-65,312);15: g.drawArc(85,87,130,50,62,58);16: 17: // lamp shade, sides18: g.drawLine(85,177,119,89);19: g.drawLine(215,177,181,89);20: 21: // dots on the shade22: g.fillArc(78,120,40,40,63,-174);23: g.fillOval(120,96,40,40);24: g.fillArc(173,100,40,40,110,180);25: }26: }
José Antonio García Mejía 167
Resultado
José Antonio García Mejía 168
Texto y fuentes
1: import java.awt.Font;2: import java.awt.Graphics;3:4: public class ManyFonts extends java.applet.Applet {5:6: public void paint(Graphics g) {7: Font f = new Font("TimesRoman", Font.PLAIN, 18);8: Font fb = new Font("TimesRoman", Font.BOLD, 18);9: Font fi = new Font("TimesRoman", Font.ITALIC, 18);
10: Font fbi = new Font("TimesRoman", Font.BOLD + Font.ITALIC, 18);
José Antonio García Mejía 169
Texto y fuentes12: g.setFont(f);13: g.drawString("This is a plain font", 10, 25);14: g.setFont(fb);15: g.drawString("This is a bold font", 10, 50);16: g.setFont(fi);17: g.drawString("This is an italic font", 10, 75);18: g.setFont(fbi);19: g.drawString("This is a bold italic font", 10, 100);20: }21:22: }
José Antonio García Mejía 170
Texto y fuentes
José Antonio García Mejía 171
Centrando un texto
1: import java.awt.Font;2: import java.awt.Graphics;3: import java.awt.FontMetrics;4:5: public class Centered extends
java.applet.Applet {6:7: public void paint(Graphics g) {8: Font f = new Font("TimesRoman",
Font.PLAIN, 36);9: FontMetrics fm = getFontMetrics(f);10: g.setFont(f);
José Antonio García Mejía 172
Centrando un texto
11:12: String s = "This is how the world
ends.";13: int xstart = (size().width -
fm.stringWidth(s)) / 2;14: int ystart = size().height / 2;15:16: g.drawString(s, xstart, ystart);17: }18:}
José Antonio García Mejía 173
Manejando colores
1: import java.awt.Graphics;2: import java.awt.Color;3:4: public class ColorBoxes extends java.applet.Applet {5:6: public void paint(Graphics g) {7: int rval, gval, bval;8:9: for (int j = 30; j < (size().height -25); j += 30)10: for (int i = 5; i < (size().width -25); i += 30) {11: rval = (int)Math.floor(Math.random() * 256);
José Antonio García Mejía 174
Manejando colores
12: gval = (int)Math.floor(Math.random() * 256);
13: bval = (int)Math.floor(Math.random() * 256);
14:15: g.setColor(new Color(rval,gval,bval));16: g.fillRect(i, j, 25, 25);17: g.setColor(Color.black);18: g.drawRect(i-1, j-1, 25, 25);19: }20: }21: }
José Antonio García Mejía 175
Resultado
José Antonio García Mejía 176
Hilos
Son una secuencia de ejecución independiente de otras secuencias de ejecución o hilos que pudieran
existir.
José Antonio García Mejía 177
Como escribir Applets con hilos
• Cambie la identificación de su clase applet para incluir las palabras implements Runnable.
• Incluya una variable de instancia para guardar el hilo.
José Antonio García Mejía 178
Como escribir Applets con hilos
• Modifique el método start() para producir un hilo e iniciar su ejecución.
• Cree el método run() que contenga el código actual que inicie la ejecución de su applet.
José Antonio García Mejía 179
Un reloj Digital1: import java.awt.Graphics;2: import java.awt.Font;3: import java.util.Date;4:5: public class DigitalClock extends
java.applet.Applet 6: implements Runnable {7: 8: Font theFont = new
Font("TimesRoman",Font.BOLD,24);9: Date theDate;10: Thread runner;
José Antonio García Mejía 180
Un reloj Digital12: public void start() {13: if (runner == null) {14: runner = new Thread(this);15: runner.start();16: }17: }18:19: public void stop() {20: if (runner != null) {21: runner.stop();21: runner = null;22: }23: }
José Antonio García Mejía 181
Un reloj Digital25: public void run() {26: while (true) {27: theDate = new Date();28: repaint();29: try { Thread.sleep(1000); }30: catch (InterruptedException e) { }31: }32: }33: 34: public void paint(Graphics g) {35: g.setFont(theFont);36: g.drawString(theDate.toString(),10,50);37: }38:}
José Antonio García Mejía 182
El método repaint()
• La llamada a repaint() resulta en una llamada al método update().
• El método update() limpia el contenido existente en la pantalla y luego llama a paint().
• El método paint() dibuja el contenido del cuadro actual.
José Antonio García Mejía 183
Evitando el parpadeo en los Applets
Sobreponga update() para no borrar nada en la pantalla o para borrar sólo las partes de la
pantalla que usted cambió.
public void update(Graphics g) {g.setColor(getBackground());g.fillRect(0, 0, width, height);g.setColor(getForeground());paint(g);
}
José Antonio García Mejía 184
Uso de Imágenes
La clase Image en java.awt ofrece métodos abstractos para
representar un comportamiento de imagen común y métodos
especiales definidos en Applet yGraphics para desplegarlas y
usarlas en sus applets.
José Antonio García Mejía 185
Obteniendo ImágenesImage img = getImage(
newURL("http://www.server.com/files/image.gif"));
Image img = getImage(getDocumentBase(), "image.gif")
Image img = getImage(getCodeBase(), "image.gif")
Image img = getImage(getCodeBase(), "images/image.gif")
José Antonio García Mejía 186
Desplegando Imágenes
public void paint() {g.drawImage(img, 10, 10, this);
}
José Antonio García Mejía 187
El Applet Ladybug
1:import java.awt.Graphics;2:import java.awt.Image;3:4:public class LadyBug extends
java.applet.Applet {5:6: Image bugimg;7:8: public void init() {9: bugimg = getImage(getCodeBase(),10: "images/ladybug.gif");11: }
José Antonio García Mejía 188
EL Applet Ladybug
12:13: public void paint(Graphics g) {14: g.drawImage(bugimg, 10, 10,this);15: }16:}
José Antonio García Mejía 189
El Applet Ladybug
José Antonio García Mejía 190
El Applet Ladybug21: import java.awt.Graphics;2: import java.awt.Image;3:4: public class LadyBug2 extends java.applet.Applet {5:6: Image bugimg;7:8: public void init() {9: bugimg = getImage(getCodeBase(),10: "images/ladybug.gif");11: }
José Antonio García Mejía 191
El Applet Ladybug213: public void paint(Graphics g) {14: int iwidth = bugimg.getWidth(this);15: int iheight = bugimg.getHeight(this);16: int xpos = 10;17:18: // 25 %19: g.drawImage(bugimg, xpos, 10,20: iwidth / 4, iheight / 4, this);21:22: // 50 %23: xpos += (iwidth / 4) + 10;24: g.drawImage(bugimg, xpos , 10,25: iwidth / 2, iheight / 2, this);
José Antonio García Mejía 192
El Applet Ladybug2
27: // 100%28: xpos += (iwidth / 2) + 10;29: g.drawImage(bugimg, xpos, 10, this);30:31: // 150% x, 25% y32: g.drawImage(bugimg, 10, iheight + 30,33: (int)(iwidth * 1.5), iheight / 4, this);34: }35: }
José Antonio García Mejía 193
EL APPLET neko
José Antonio García Mejía 194
Eventos
Es la manera en la cual el AWT le comunica a usted y a otros
componentes Java AWT que algoha sucedido
José Antonio García Mejía 195
Algunos eventos sencillos
• Clics del mouse.
• Movimientos del mouse.
• Eventos del teclado.
José Antonio García Mejía 196
Clicks del Mouse
• mouseDown().
• mouseUp().
• mouseDrag().
• mouseMove().
José Antonio García Mejía 197
mouseDown()
public boolean mouseDown(Event evt, int x, int y) {...}
José Antonio García Mejía 198
mouseUp()
public boolean mouseUp(Event evt, int x, int y) {...}
José Antonio García Mejía 199
El Applet Spots1: import java.awt.Graphics;2: import java.awt.Color;3: import java.awt.Event;4:5: public class Spots extends
java.applet.Applet {6:7: final int MAXSPOTS = 10;8: int xspots[] = new int[MAXSPOTS];9: int yspots[] = new int[MAXSPOTS];10: int currspots = 0;
José Antonio García Mejía 200
EL Applet Spots12: public void init() {13: setBackground(Color.white);14: }15:16: public boolean mouseDown(Event evt, int x,
int y) {17: if (currspots < MAXSPOTS) {18: addspot(x,y);19: return true;20: }21: else {22: System.out.println("Too many spots.");23: return false;24: }25: }
José Antonio García Mejía 201
EL Applet Spots27: void addspot(int x,int y) {28: xspots[currspots] = x;29: yspots[currspots] = y;30: currspots++;31: repaint();32: }33: 34: public void paint(Graphics g) {35: g.setColor(Color.blue);36: for (int i = 0; i < currspots; i++) {37: g.fillOval(xspots[i] - 10, yspots[i] - 10, 20,
20);38: }39: }40: }
José Antonio García Mejía 202
EL APPLET SPOTS
José Antonio García Mejía 203
DOBLE CLIC
public boolean mouseDown(Event evt, int x, int y) {switch (evt.clickCount) {case 1: // single-clickcase 2: // double-clickcase 3: // triple-click....
}
José Antonio García Mejía 204
MOVIMIENTOS DEL MOUSE
• mouseDrag().
• mouseMove().
José Antonio García Mejía 205
mouseDrag()
public boolean mouseDrag(Event evt, int x, int y) {...}
José Antonio García Mejía 206
mouseMove()
public boolean mouseMove(Event evt, int x, int y) {...}
José Antonio García Mejía 207
ENTRADA Y SALIDA DEL APPLET
• mouseEnter().
• mouseExit().
José Antonio García Mejía 208
mouseEnter()
public boolean mouse Enter(Event evt, int x, int y) {...}
José Antonio García Mejía 209
mouseExit()
public boolean mouseExit(Event evt, int x, int y) {...}
José Antonio García Mejía 210
EL APPLET Lines1: import java.awt.Graphics;2: import java.awt.Color;3: import java.awt.Event;4: import java.awt.Point;5:6: public class Lines extends java.applet.Applet {7:8: final int MAXLINES = 10;9: Point starts[] = new Point[MAXLINES]; // starting
points10: Point ends[] = new Point[MAXLINES]; //
endingpoints11: Point anchor; // start of current line12: Point currentpoint; // current end of line13: int currline = 0; // number of lines
José Antonio García Mejía 211
EL APPLET Lines15: public void init() {16: setBackground(Color.white);17: }18:19: public boolean mouseDown(Event evt, int x, int
y) {20: if (currline < MAXLINES) {21: anchor = new Point(x,y);22: return true;23: }24: else {25: System.out.println("Too many lines.");26: return false;27: }28: }
José Antonio García Mejía 212
EL APPLET Lines30: public boolean mouseUp(Event evt, int x, int y) {
31: if (currline < MAXLINES) {32: addline(x,y);33: return true;34: }35: else return false;36: }37: 38: public boolean mouseDrag(Event evt, int x, int y) {39: if (currline < MAXLINES) {40: currentpoint = new Point(x,y);41: repaint();42: return true;43: }44: else return false;45: }
José Antonio García Mejía 213
EL APPLET Lines
46:47: void addline(int x,int y) {48: starts[currline] = anchor;49: ends[currline] = new Point(x,y);50: currline++;51: currentpoint = null;52: anchor = null;53: repaint();54: }55:
José Antonio García Mejía 214
EL APPLET Lines56: public void paint(Graphics g) {57: 58: // Draw existing lines59: for (int i = 0; i < currline; i++) {60: g.drawLine(starts[i].x, starts[i].y,61: ends[i].x, ends[i].y);62: }63: 64: // draw current line65: g.setColor(Color.blue);66: if (currentpoint != null)67: g.drawLine(anchor.x,anchor.y,68: currentpoint.x,currentpoint.y);69: }70:}
José Antonio García Mejía 215
EL APPLET Lines
José Antonio García Mejía 216
EVENTOS DEL TECLADO
public boolean keyDown(Event evt, int key) {...
}
public boolean keyDown(Event evt, int key) {System.out.println("ASCII value: " + key);System.out.println("Character: " + (char)key);return true;
}
José Antonio García Mejía 217
EVENTOS DEL TECLADO
public boolean keyUp(Event evt, int key) {...
}
José Antonio García Mejía 218
EL APPLET Keys1: import java.awt.Graphics;2: import java.awt.Event;3: import java.awt.Font;4: import java.awt.Color;5: 6: public class Keys extends
java.applet.Applet {7: 8: char currkey;9: int currx;10: int curry;
José Antonio García Mejía 219
EL APPLET Keys
12: public void init() {13: currx = (size().width / 2) -8; // default14: curry = (size().height / 2) -16;15:16: setBackground(Color.white);17: setFont(new
Font("Helvetica",Font.BOLD,36));18: }
José Antonio García Mejía 220
EL APPLET Keys
20: public boolean keyDown(Event evt, int key) {
21: switch (key) {22: case Event.DOWN:23: curry += 5;24: break;25: case Event.UP:26: curry -= 5;27: break;
José Antonio García Mejía 221
EL APPLET Keys
28: case Event.LEFT:29: currx -= 5;30: break;31: case Event.RIGHT:32: currx += 5;33: break;34: default:35: currkey = (char)key;36: }37:38: repaint();39: return true;40: }
José Antonio García Mejía 222
EL APPLET Keys
42: public void paint(Graphics g) {43: if (currkey != 0) {44:
g.drawString(String.valueOf(currkey), currx,curry);
45: }46: }47: }
José Antonio García Mejía 223
PROBANDO LAS TECLAS MODIFICADORES
Permite verificar las teclas de control y meta (Alt)
public boolean mouseDown(Event evt, int x, int y ) {if (evt.shiftDown())
// handle shift-clickelse // handle regular click
}
José Antonio García Mejía 224
PROBANDO LAS TECLAS MODIFICADORES
public boolean mouseDown(Event evt, int x, inty ) {
if (evt.metaDown())// handle a right-click
else if (evt.controlDown())// handle a middle-click
else // handle a regular click}
José Antonio García Mejía 225
EL MANEJADOR DE EVENTOS AWT
public boolean handleEvent(Event evt) {switch (evt.id) {case Event.MOUSE_DOWN:
System.out.println("MouseDown: " +evt.x + "," + evt.y);
return true;case Event.MOUSE_UP:
System.out.println("MouseUp: " +evt.x + "," + evt.y);
return true;
José Antonio García Mejía 226
EL MANEJADOR DE EVENTOS AWT
case Event.MOUSE_MOVE:
System.out.println("MouseMove: " +evt.x + "," + evt.y);
return true;case Event.MOUSE_DRAG:
System.out.println("MouseDrag: " +evt.x + "," + evt.y);
return true;default:
return false;}
}
José Antonio García Mejía 227
OBJETIVO
Conocer los elementos fundamentales para el manejo del
AWT en Java
José Antonio García Mejía 228
EL AWT OFRECE
•Un conjunto completo de accesorios UI.
•Respaldo para contenedores UI.•Un sistema de eventos.•Mecanismos para distribuir los componentes de forma que permitan un diseño UI independiente de la plataforma.
José Antonio García Mejía 229
IDEA BÁSICA
Una ventana Java es un conjunto de componentes anidados que
empieza desde la ventana exterior hasta el más pequeño
componente UI.
José Antonio García Mejía 230
COMPONENTES AWT
José Antonio García Mejía 231
PRINCIPALES COMPONENTES
• Contenedores.
• Lienzos.
• Componentes UI.
• Componentes de construcción de ventana.
José Antonio García Mejía 232
JERARQUÍA DE CLASES AWT PARCIAL
José Antonio García Mejía 233
COMPONENTES BÁSICOS DE LA UI
public void init() {Button b = new Button("OK");add(b);
}
José Antonio García Mejía 234
ETIQUETAS
Son cadenas de texto que puede usar para etiquetar otros componentes
•Label()
•Label(String)
•Label(String,int)
José Antonio García Mejía 235
ETIQUETASimport java.awt.*;
public class LabelTest extends java.applet.Applet {
public void init() {setFont(new Font ("Helvetica", Font.BOLD, 14));setLayout(new GridLayout(3,1));add(new Label("aligned left", Label.LEFT));add(new Label("aligned center",
Label.CENTER));add(new Label("aligned right", Label.RIGHT));
}}
José Antonio García Mejía 236
BOTONES
Son componentes UI sencillos que inician alguna acción cuando se les
oprime
•Button().
•Button(String).
José Antonio García Mejía 237
BOTONESpublic class ButtonTest extends java.applet.Applet {
public void init() {add(new Button("Rewind"));add(new Button("Play"));add(new Button("Fast Forward"));add(new Button("Stop"));
}}
José Antonio García Mejía 238
CASILLAS DE VERIFICACIÓN
Son componentes que tienen dos estados:activada o desactivada. No inician acciones directas en la UI,
pero, en su lugar, se usan para indicar características opcionales de
alguna otra acción
José Antonio García Mejía 239
CASILLAS DE VERIFICACIÓN
•Checbox( ).
•Checbox(String).
•Checbox(String, null, boolean).
José Antonio García Mejía 240
CASILLAS DE VERIFICACIÓN
import java.awt.*;
public class CheckboxTest extends java.applet.Applet{
public void init() {setLayout(new FlowLayout(FlowLayout.LEFT));add(new Checkbox("Shoes"));add(new Checkbox("Socks"));add(new Checkbox("Pants"));add(new Checkbox("Underwear", null, true));add(new Checkbox("Shirt"));
}}
José Antonio García Mejía 241
BOTONES DE RADIO
Tienen la misma apariencia de las casillas de verificación, pero sólo uno
de una serie de ellos puede seleccionarse a la vez.
José Antonio García Mejía 242
BOTONES DE RADIOimport java.awt.*;
public class CheckboxGroupTest extendsjava.applet.Applet {
public void init() {setLayout(new FlowLayout(FlowLayout.LEFT));CheckboxGroup cbg = new CheckboxGroup();
add(new Checkbox("Red", cbg, false));add(new Checkbox("Blue", cbg, false));add(new Checkbox("Yellow", cbg, false));add(new Checkbox("Green", cbg, true));add(new Checkbox("Orange", cbg, false));add(new Checkbox("Purple", cbg, false));
}}
José Antonio García Mejía 243
MENÚS DE OPCIONES
Permiten seleccionar un elemento de un menú que se despliega en pantalla
José Antonio García Mejía 244
MENÚS DE OPCIONESimport java.awt.*;
public class ChoiceTest extendsjava.applet.Applet {
public void init() {Choice c = new Choice();c.addItem("Apples");c.addItem("Oranges");c.addItem("Strawberries");c.addItem("Blueberries");c.addItem("Bananas");add(c);
}}
José Antonio García Mejía 245
CAMPOS DE TEXTO
Permiten al lector introducir texto
•Textfield().
•Textfield(int).
•Textfield(String).
•Textfield(String,int).
José Antonio García Mejía 246
CAMPOS DE TEXTO
add(new Label("Enter your Name"));add(new TextField("your name here", 45));add(new Label("Enter your phone number"));add(new TextField(12));add(new Label("Enter your password"));TextField t = new TextField(20);t.setEchoCharacter('*');add(t);
José Antonio García Mejía 247
ADMINISTRADORES DE DISEÑO
Determina la forma en la cual los componentes AWT se muestran en la pantalla.
José Antonio García Mejía 248
LA CLASE FlowLayoutimport java.awt.*;
public class FlowLayoutTest extendsjava.applet.Applet {
public void init() {setLayout(new FlowLayout());add(new Button("One"));add(new Button("Two"));add(new Button("Three"));add(new Button("Four"));add(new Button("Five"));add(new Button("Six"));
}}
José Antonio García Mejía 249
LA CLASE GridLayoutimport java.awt.*;
public class GridLayoutTest extendsjava.applet.Applet {
public void init() {setLayout(new GridLayout(3,2);add(new Button("One"));add(new Button("Two"));add(new Button("Three"));add(new Button("Four"));add(new Button("Five"));add(new Button("Six"));
}}
José Antonio García Mejía 250
LA CLASE BorderLayoutimport java.awt.*;
public class BorderLayoutTest extendsjava.applet.Applet {
public void init() {setLayout(new BorderLayout());add("North", new Button("One"));add("East", new Button("Two"));add("South", new Button("Three"));add("West", new Button("Four"));add("Center", new Button("Five"));add(new Button("Six"));
}}
José Antonio García Mejía 251
MANEJO DE ACCIONES Y EVENTOS UI
public boolean action(Event evt, Object arg) {...
}
José Antonio García Mejía 252
MANEJO DE ACCIONES Y EVENTOS UI
Todos los componentes UI básicos cuentan con diferentes acciones y argumentos:
•El argumento de un botón es la etiqueta del botón.
•Las casillas de verificación, exclusivas y no exclusivas, generan acciones cuando se seleccionan. El argumento es siempre true.
José Antonio García Mejía 253
MANEJO DE ACCIONES Y EVENTOS UI
•Los campos de texto crean acciones cuando el usuario presiona Return dentro del campo de texto.
José Antonio García Mejía 254
MANEJO DE ACCIONES Y EVENTOS UI
public boolean action(Event evt, Object arg) {if (evt.target instanceof TextField)
return handleText(evt.target);else if (evt.target instanceof Choice)
return handleChoice(arg);...}
José Antonio García Mejía 255
MANEJO DE ACCIONES Y EVENTOS UI
1:import java.awt.*;3:public class ButtonActionsTest extends
java.applet.Applet {4:5: public void init() {6: setBackground(Color.white);7:8: add(new Button("Red"));9: add(new Button("Blue"));10: add(new Button("Green"));11: add(new Button("White"));12: add(new Button("Black"));13: }
José Antonio García Mejía 256
MANEJO DE ACCIONES Y EVENTOS UI
15: public boolean action(Event evt, Object arg) {
16: if (evt.target instanceof Button) {17: changeColor((String)arg);18: return true;19: } else return false;20: }
José Antonio García Mejía 257
MANEJO DE ACCIONES Y EVENTOS UI
22: void changeColor(String bname) {23: if (bname.equals("Red")) setBackground(Color.red);24: else if (bname.equals("Blue"))
setBackground(Color.blue);25: else if (bname.equals("Green"))
setBackground(Color.green);26: else if (bname.equals("White"))
setBackground(Color.white);27: else setBackground(Color.black);28:29: repaint();30: }31:}
José Antonio García Mejía 258
ANIDANDO PANELES Y COMPONENTES
Permite crear diferentes diseños para distintas partes generales del
área general del applet, aislar colores de fondo y primer plano y fuentes a partes individuales de un applet.
José Antonio García Mejía 259
ANIDANDO PANELES Y COMPONENTES
setLayout(new GridLayout(1, 2, 10, 10));Panel panel1 = new Panel();Panel panel2 = new Panel();add(panel1);add(panel2);
José Antonio García Mejía 260
ANIDANDO PANELES Y COMPONENTES
panel1.setLayout(new FlowLayout());panel1.add(new Button("Up"));panel1.add(new Button("Down"));
José Antonio García Mejía 261
EVENTOS Y PANELES ANIDADOS
Al crear un applet con paneles anidados, los paneles forman una jerarquía desde el panel más externo hasta el componente
UI más interno.Esta jerarquía afecta el manejo de
eventos. Los eventos son recibido por el componente más interno y son
trasladados en cadena hacia la raíz.
José Antonio García Mejía 262
EVENTOS Y PANELES ANIDADOS
Un método de manejo de eventos, ya sea los métodos de eventos básicos
(mouseDown, mouseUp) o el más genérico puede realizar una de tres tareas
posibles:
José Antonio García Mejía 263
EVENTOS Y PANELES ANIDADOS
•No estar interesado en el evento. El evento se pasa hacia arriba en la jerarquía hasta que un componente lo procese. El método de manejo de eventos debe regresar false.
José Antonio García Mejía 264
EVENTOS Y PANELES ANIDADOS
•Interceptar el evento, procesarlo y regresar true. En este caso, el evento se detiene en ese método.
José Antonio García Mejía 265
EVENTOS Y PANELES ANIDADOS
•Interceptar el método, procesarlo y pasarlo al siguiente manejador de eventos.
José Antonio García Mejía 266
OTROS COMPONENTES UI
•Áreas de texto.
•Listas desplazables.
•Barras de desplazamiento.
•Deslizadores.
José Antonio García Mejía 267
ÁREAS DE TEXTO
Permite la introducción de grandes cantidades de texto.
•TextArea().
•TextArea(int,int).
•TextArea(String).
•TextArea(String,int,int).
José Antonio García Mejía 268
ÁREAS DE TEXTOimport java.awt.*;
public class TextAreaTest extendsjava.applet.Applet {
public void init() {String str = ”Esta es una prueba de un
área de texto";// more text deleted for space
add(new TextArea(str,10,50));}
}
José Antonio García Mejía 269
LISTAS DESPLAZABLES
Es similar a un menú de opciones que permite escoger varias opciones
de una lista
•List()
•List(int, boolean).
José Antonio García Mejía 270
LISTAS DESPLAZABLESimport java.awt.*;public class ListsTest extends
java.applet.Applet {public void init() {List lst = new List(5, true);lst.addItem("Hamlet");lst.addItem("Claudius");lst.addItem("Gertrude");lst.addItem("Polonius");lst.addItem("Horatio");lst.addItem("Laertes");lst.addItem("Ophelia");add(lst);
}}
José Antonio García Mejía 271
BARRAS DE DESPLAZAMIENTO
Permiten seleccionar un valor entre un valor máximo y uno mínimo.
•Scrollbar().
•Scrollbar(int).
•Scrollbar(int,int,int,int)
José Antonio García Mejía 272
BARRAS DE DESPLAZAMIENTOimport java.awt.*;
public class SliderTest extendsjava.applet.Applet {
Label l;
public void init() {setLayout(new GridLayout(1,2));l = new Label("0", Label.CENTER);add(l);add(new
Scrollbar(Scrollbar.HORIZONTAL,0,0,1,100));}
José Antonio García Mejía 273
BARRAS DE DESPLAZAMIENTO
public Insets insets() {return new Insets(15,15,15,15);
}public boolean handleEvent(Event evt) {if (evt.target instanceof Scrollbar) {int v = ((Scrollbar)evt.target).getValue();l.setText(String.valueOf(v));repaint();return true;
} else return false;}
}
José Antonio García Mejía 274
CANVAS
Es un componentes sobre el que se puede dibujar
Canvas can = new Canvas();add(can);
José Antonio García Mejía 275
MAS EVENTOS UI
Para eventos relacionados con las barras de desplazamiento y las listas
desplazables, la única manera de interceptar estos eventos es sobreponer handleEvent( )
José Antonio García Mejía 276
EL AWT OFRECE
•Ventanas.•Menús.•Cuadros de diálogo.
José Antonio García Mejía 277
CLASE WINDOW DEL AWT
José Antonio García Mejía 278
FRAMES
Permite crear una ventana funcional completa con una barra de menús.
•Frame
•Frame(String)
José Antonio García Mejía 279
UNA VENTANA POP-UP1:import java.awt.*;2:3:public class PopupWindow extends
java.applet.Applet {4: Frame window;5:6: public void init() {7: add(new Button("Open Window"));8: add(new Button("Close Window"));9:10: window = new BaseFrame("A Popup
Window");11: window.resize(150,150);12: window.show();13: }
José Antonio García Mejía 280
UNA VENTANA POP-UP15: public boolean action(Event evt, Object arg) {16: if (evt.target instanceof Button) {17: String label = (String)arg;18: if (label.equals("Open Window")) {19: if (!window.isShowing()) 20: window.show();21: }22: else if (label.equals("Close Window")) {23: if (window.isShowing())24: window.hide();25: }26: return true;27: } 28: else return false;29: }30:}
José Antonio García Mejía 281
LA CLASE BASEFRAME1:import java.awt.*;2:3:class BaseFrame extends Frame {4: String message = "This is a Window";5:6: BaseFrame1(String title) {7: super(title);8: setFont(new Font("Helvetica", Font.BOLD,
12));9: }10:11: public void paint(Graphics g) {12: g.drawString(message, 20, 20);13: }14:}
José Antonio García Mejía 282
CERRANDO LA VENTANA
Agregue el siguiente método para poder cerrar la ventana
public boolean handleEvent(Event evt) {if (evt.id == Event.WINDOW_DESTROY) hide();return super.handleEvent(evt);
}
José Antonio García Mejía 283
MENÚS Y BARRAS DE MENÚS
José Antonio García Mejía 284
MENÚS Y BARRAS DE MENÚS
1:import java.awt.*;2:3:class BaseFrame2 extends Frame {4: String message = "This is a Window";5:6: BaseFrame2(String title) {7: super(title);8: setFont(new Font("Helvetica", Font.BOLD, 12));9:
José Antonio García Mejía 285
MENÚS Y BARRAS DE MENÚS
10: MenuBar mb = new MenuBar();11: Menu m = new Menu("Colors");12: m.add(new MenuItem("Red"));13: m.add(new MenuItem("Blue"));14: m.add(new MenuItem("Green"));15: m.add(new MenuItem("-"));16: m.add(new CheckboxMenuItem("Reverse Text"));17: mb.add(m);18: setMenuBar(mb);19: }
José Antonio García Mejía 286
MENÚS Y BARRAS DE MENÚS21: public boolean action(Event evt, Object arg) {
22: String label = (String)arg;23: if (evt.target instanceof MenuItem) {24: if (label.equals("Red")) setBackground(Color.red);25: else if (label.equals("Blue"))
setBackground(Color.blue);26: else if (label.equals("Green"))
setBackground(Color.green);27: else if (label.equals("Reverse Text")) {28: if (getForeground() == Color.black) {29: setForeground(Color.white);30: } else setForeground(Color.black);31: }32: repaint();33: return true;34: } else return false;35: }
José Antonio García Mejía 287
MENÚS Y BARRAS DE MENÚS
37: public void paint(Graphics g) {38: g.drawString(message, 20, 20);39: }40:41: public boolean handleEvent(Event evt) {42: if (evt.id == Event.WINDOW_DESTROY)
hide();43: return super.handleEvent(evt);44: }45:}
José Antonio García Mejía 288
DIÁLOGOS
Tienen una función similar a los frames, sin embargo, están destinados a emplearse como
ventanas transitorias, ventanas que le permiten
conocer advertencias, solicitan información
específica, etc.
José Antonio García Mejía 289
DIÁLOGOS
Para agregar un diálogo de texto en la clase BaseFrame,
agregue :
TextDialog dl;
José Antonio García Mejía 290
DIÁLOGOS
Para agregar un diálogo de texto en la clase BaseFrame, agregue al
constructor:
m.add(new CheckboxMenuItem("Reverse Text"));
m.add(new MenuItem("Set Text..."));
José Antonio García Mejía 291
DIÁLOGOS
Para agregar un diálogo de texto en la clase BaseFrame, agregue al
constructor:
dl = new TextDialog(this, "Enter Text", true);dl.resize(150,100);
José Antonio García Mejía 292
DIÁLOGOS
Para agregar un diálogo de texto en la clase BaseFrame, agregue al método
action():
else if (label.equals("Green")) setBackground(Color.green);
else if (label.equals("Set Text...")) dl.show();else if (label.equals("Reverse Text")) {
José Antonio García Mejía 293
LA CLASE TextDialog( )
1:import java.awt.*;2:3:class TextDialog extends Dialog {4: TextField tf;5: BaseFrame3 theFrame;
José Antonio García Mejía 294
LA CLASE TextDialog( )
7: TextDialog(Frame parent, String title, boolean modal) {
8: super(parent, title, modal);9:10: theFrame = (BaseFrame3)parent;11: setLayout(new BorderLayout(10,10));12: setBackground(Color.white);13: tf = new
TextField(theFrame.message,20);14: add("Center", tf);15: add("South", new Button("OK"));16: resize(150,75);17: }
José Antonio García Mejía 295
LA CLASE TextDialog( )19: public Insets insets() {20: return new Insets(30,10,10,10);21: }23: public boolean action(Event evt, Object
arg) {24: String label = (String)arg;25: if (evt.target instanceof Button) {26: if (label == "OK") {27: hide();28: theFrame.message = tf.getText();29: theFrame.repaint();30: }}32: else return false;33: return true;34: } }
José Antonio García Mejía 296
DIÁLOGOS DE ARCHIVO
Es un cuadro de diálogo básico para abrir y (o) guardar
archivos, el cual le permite tener acceso al sistema de
archivos de la plataforma sobre la cual ejecuta la aplicación
Java.
José Antonio García Mejía 297
DIÁLOGOS DE ARCHIVO
•FileDialog(Frame,String)
•FileDialog(Frame,String,int)
José Antonio García Mejía 298
DIÁLOGOS DE ARCHIVO
FileDialog fd = new FileDialog(this, "FileDialog");
fd.show();
José Antonio García Mejía 299
JDBC
•Creado por Hughes Technologies en Australia.
•DBMS light para UNIX accesible por Internet.
•Orientado a Intranet’s.
José Antonio García Mejía 300
Java Networking
Java posee clases para la construcción
de aplicaciones cliente-servidor
José Antonio García Mejía 301
Java Networking
Las clases están orientadas a utilizar
los servicios que ofrece TCP/IP
José Antonio García Mejía 302
Paquete
java.net.*;
José Antonio García Mejía 303
TIPOS DE APLICACIONES
•Socket API.•URL’s
José Antonio García Mejía 304
SOCKET’S
Interface de bajo nivel para comunicaciones
en red
José Antonio García Mejía 305
TIPOS DE SOCKET’S
•Orientados a la conexión (TCP).
•Sin conexión (UDP).
José Antonio García Mejía 306
CLIENTES Y SERVIDORES
El cliente es quien inicia la conversión creando un
socket.
José Antonio García Mejía 307
CLIENTES Y SERVIDORES
El servidor se debe preparar para escuchar
las comunicaciones entrantes
José Antonio García Mejía 308
PROTOCOLOS
Es el conjunto de reglas que gobiernan el
comportamiento de una red
José Antonio García Mejía 309
TIPOS DE PROTOCOLOS
•Telnet
•SMTP
•FTP
•HTTP
José Antonio García Mejía 310
PROTOCOLO SMTP
HELO host.dominio.nombre
MAIL FROM:usuario@direccion
RCPTTO:usuario@direccion
José Antonio García Mejía 311
PROTOCOLO SMTP
DATA
(mensaje de correo)
.
QUIT
José Antonio García Mejía 312
JDBC
Es una API de Java para ejecutar
estatutos de SQL a prácticamente
cualquier base de datos relacional.
José Antonio García Mejía 313
JDBCProvee una API
estándar que posibilita la escritura de aplicaciones de
base de datos utilizando Java
José Antonio García Mejía 314
JDBCCon Java y JDBC es posible publicar una
página Web conteniendo applets que accedan a bases
de datos
José Antonio García Mejía 315
JDBCLas empresas pueden continuar utilizando sus
bases de datos instaladas y pueden acceder a
información aún si están almacenadas en diferentes
DBMS
José Antonio García Mejía 316
¿Qué es lo que hace JDBC?
•Establece una conexión con la base de datos.
•Envía estatutos SQL.•Procesa los resultados.
José Antonio García Mejía 317
Estableciendo conexión
Connection con = DriverManager.getConnection(“jdbc:odbc:wombat”,”l
ogin”,”password”);
José Antonio García Mejía 318
Enviando estatutos
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(“Select *
fromTable”);
José Antonio García Mejía 319
Procesando resultados
while (rs.next()){
int x = getInt(1);String s = getString(2);
}
José Antonio García Mejía 320
JDBC vs. ODBC
•ODBC utiliza una interfaz C.
•ODBC es difícil de usar desde otros lenguajes.
•ODBC utiliza apuntadores void*
•ODBC es difícil de aprender.
•ODBC puede trabajar con JDBC.
José Antonio García Mejía 321
Modelos de 2 y 3 enlaces
JDBC soporta los modelos de 2 y 3
enlaces de base de datos.
José Antonio García Mejía 322
Modelo de 2 enlaces
José Antonio García Mejía 323
Modelo de 2 enlaces
La aplicación o el applet habla
directamente a la base de datos.
José Antonio García Mejía 324
Modelo de 2 enlaces
Requiere un controlador JDBC que
pueda comunicarse directamente con la
base de datos.
José Antonio García Mejía 325
Modelo de 2 enlaces
Los estatutos SQL son enviados a la base de datos y los resultados
son regresados al usuario.
José Antonio García Mejía 326
Modelo de 3 enlaces
José Antonio García Mejía 327
Modelo de 3 enlaces
Los comandos son enviados a un enlace
intermedio (middle-tier)
José Antonio García Mejía 328
Modelo de 3 enlaces
El middle-tier envía los estatutos SQL a la base
de datos
José Antonio García Mejía 329
Modelo de 3 enlaces
La base de datos procesa los estatutos
SQL y regresa los resultados al middle-
tier
José Antonio García Mejía 330
Modelo de 3 enlaces
El middle-tier regresa los resultados al
usuario.
José Antonio García Mejía 331
JavaSoft FrameWork
El admnistrador de controladores JDBC.
El suite de prueba de controladores JDBC.
El bridge JDBC-ODBC
José Antonio García Mejía 332
JavaSoft FrameWork
José Antonio García Mejía 333
ABRIENDO UNA CONEXIÓN
String url=“jdbc:odbc:db”;Connection con = DriverManager.getConnection(url,”login”,”password”);
José Antonio García Mejía 334
JDBC URLs
Provee la forma de identificar una base de datos a fin de
que el controlador apropiado la reconozca y establezca
una conexión con la misma.
José Antonio García Mejía 335
JDBC URLs
jdbc:<subprotocol>:<subname>
José Antonio García Mejía 336
El subprotocoloODBC
jdbc:odbc:<data-source-name>[;<atribute-name>=<atribute-
name>]*
José Antonio García Mejía 337
Ejemplos ODBC
jdbc:odbc:qeor7jdbc:odbc:wombatjdbc:odbc:wombat;CacheSize=20jdbc:odbc:qeora;UID=kgh;PWD=fooey
José Antonio García Mejía 338
DriverManager
Es una capa administradora que
trabaja entre el usuario y los controladores
José Antonio García Mejía 339
CARGANDO EL CONTROLADOR
Class.forName(“acme.db.Driver”);
José Antonio García Mejía 340
CARGANDO EL CONTROLADOR
•Se crea una instancia de la clase Driver.
•Se invoca al método DriverManager.registerDriver
José Antonio García Mejía 341
Estableciendo la conexión
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
String url=“jdbc:odbc:fred”;DriverManager.getConnection(url,”login”,”passwd”);
José Antonio García Mejía 342
INTRODUCCIÓN A LA TECNOLOGÍA OOP
JAVA
SESIÓN -15
José Antonio García Mejía 343
OBJETIVO
Conocer como enviar estatutos SQL a una base de datos desde
JDBC
José Antonio García Mejía 344
LA CLASE Statement
Un objeto Statement se utiliza para enviar estatutos SQL a una
base de datos
José Antonio García Mejía 345
TIPOS DE OBJETOS Statement
•Statement
•PreparedStatement
•CallableStatement
José Antonio García Mejía 346
OBJETOS Statement
Ejecuta estatutos SQL simples sin parámetros
José Antonio García Mejía 347
OBJETOS PreparedStatement
Ejecuta estatutos SQL simples
precompilados con o sin parámetros IN
José Antonio García Mejía 348
OBJETOS CallableStatement
Ejecuta una llamada a un procedimientos almacenado en la
base de datos
José Antonio García Mejía 349
CREANDO OBJETOS Statement
Connection con=DriverManager.getConnection(url,
”sunny”,””);
Statement stmt = con.createStatement();
José Antonio García Mejía 350
ENVIANDO ESTATUTOS SQL
ResultSet rs=stmt.executeQuery(“Select a,b,c from Table”);
José Antonio García Mejía 351
MÉTODOS PARA EJECUTAR ESTATUTOS UTILIZANDO
OBJETOS Statement
•executeQuery
•executeUpdate
•execute
José Antonio García Mejía 352
MÉTODO executeQuery
•Está diseñado para estatutos que producen un sólo conjunto resultado.
•Por ej., SELECT
José Antonio García Mejía 353
MÉTODO executeUpdate
•Estatutos INSERT, UPDATE, DELETE.
•Estatutos de DDL : CREATE TABLE, DROP TABLE.
Se utiliza para ejecutar :
José Antonio García Mejía 354
MÉTODO executeUpdate
Para estatutos como CREATE TABLE o DROP TABLE el valor
regresado es siempre 0
José Antonio García Mejía 355
EJECUCIÓN CONSECUTIVA DE
MÉTODOS Statement
Todos los métodos para ejecutar estatutos Statement cierran el conjunto resultado actual, si existe uno abierto
José Antonio García Mejía 356
LA CLASE ResultSet
Contiene todos los renglones que han
satisfecho las condiciones de un
estatuto SQL
José Antonio García Mejía 357
LA CLASE ResultSet
Permite acceder a los datos en los
renglones del resultado
José Antonio García Mejía 358
LA CLASE ResultSet
Permite acceder a los datos en los
renglones del resultado
José Antonio García Mejía 359
EJEMPLO
Statement stmt=con.createStatement( );
ResultSet r = stmt.executeQuery(“Select a,b,c from Table1”);
José Antonio García Mejía 360
EJEMPLO
while (r.next())
{
int i = r.getInt(“a”);
String s=r.getString(“b”);
float f=r.getFloat(“c”);
}
José Antonio García Mejía 361
RENGLONES
•El OBJETO ResultSet mantiene un cursor al renglón de datos actual.
•Al inicio el cursor se coloca un renglón antes del primer renglón.
•El método next() avanza el cursor.
José Antonio García Mejía 362
COLUMNAS
•Se accede a las columnas del renglón actual con los métodos getXXX.
•Puede utilizarse el número o el nombre de la columna.
José Antonio García Mejía 363
EJEMPLO COLUMNAS
•String s = rs.getString(“titulo”);
•String s = rs.getString(2);
José Antonio García Mejía 364
COLUMNAS
En el caso de QUERY’s “SELECT *” no es posible usar los nombres
de los campos
José Antonio García Mejía 365
RESULTADOS NULL
•Utilice el método getXXX correspondiente.
•Utilice el método ResultSet.wasNull
José Antonio García Mejía 366
EL BRIDGE JDBC-ODBC
Es posible utilizar un controlador Java Puro
en lugar del controlador y bridge
JDBC-ODBC
José Antonio García Mejía 367
JDBC PURO vs JDBC-ODBC
Esto elimina la configuración
necesaria en el cliente requerida por ODBC
José Antonio García Mejía 368
JDBC PURO vs JDBC-ODBC
Elimina el error potencial de que la
JVM se corrompa por errores en el código
nativo del Bridge
José Antonio García Mejía 369
¿QUÉ ES EL BRIDGE JDBC-ODBC?
Es un controlador JDBC que implementa las operaciones JDBC
traduciéndolas en operaciones ODBC
José Antonio García Mejía 370
¿QUÉ ES EL BRIDGE JDBC-ODBC?
Para ODBC se muestra como un
programa de aplicación normal.
José Antonio García Mejía 371
¿QUÉ ES EL BRIDGE JDBC-ODBC?
El Bridge implementa JDBC para cualquier base de datos para la
cual exista un controlador ODBC
José Antonio García Mejía 372
¿QUÉ ES EL BRIDGE JDBC-ODBC?
Es implementado en el paquete
sun.jdbc.odbc
José Antonio García Mejía 373
VERSIÓN DE ODBC SOPORTADA
ODBC 2.x
José Antonio García Mejía 374
USANDO EL BRIDGE
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
José Antonio García Mejía 375
DRIVERS ODBC QUE FUNCIONAN CON EL BRIDGE
Oracle, Sybase, Informix, Microsoft SQL Server, Ingres,
xBASE, Access
José Antonio García Mejía 376
DEBUGGING
java.sql.DriverManager.setLogStream(System.out);