Sunteți pe pagina 1din 34

UNMSM - FISI

Clase rpida de algortmica 2 - Java


Versin 1.0

13

CLASE RPIDA DE ALGORITMICA 2

CLASES Y OBJETOS DIFERENCIA ENTRE CLASES Y OBJETOS:


Para entender el concepto de clases veamos esta pequea historia: En un aula del knder Los Wachiturrosmasnah N69 la profesora le pregunta a toda el aula si tienen un perro de mascota, y 3 nios levantan la mano, a lo que la profesora pide que lo describan: Nio 1: Mi perro es de color negro y se llama Asesino (Oh estos nios de ahora! :3 ) Nio 2: Mi perro es de color blanco y se llama Sobaco Nio 3: Mi perro es de color rojo y se llama Pezua En este caso los nios tienen la IDEA general de un perro pero cada uno lo describe de una manera diferente, es decir cada perro tiene un nombre diferente y un color diferente, estoy seguro que t que ests leyendo esto describiras a un perro con otro nombre y color, bueno eso es precisamente un clase, una PLANTILLA de un objeto del mundo real que tiene atributos y mtodos. Resalt ms arriba la palabra IDEA por una razn, podemos entender a una clase como una idea, es decir los nios tenan la idea de un perro pero al describir a un perro cada uno lo haca a su manera. En este caso la clase vendra a ser Perro y cuando los nios empezaron a describir a su perro estuvieron creando mentalmente objetos a partir de la clase perro, pero con color diferente.

Mtodos y Atributos:
Estos son 2 conceptos ms fciles de entender: Un atributo es una propiedad o caracterstica de la clase, en el caso de los nios tena 1 atributo: Color. Pudimos agregarlo otros atributos como raza, nombre del dueo, cantidad de cras, etc Un mtodo es una funcin de la clase, o mejor explicado, una accin que realizar esa clase, por ejemplo la clase Perro puede tener los mtodos ladrar(), correr(), dormir(), comer(), esas con acciones que hacen todos los perros.

PILARES DE OBJETOS

LA

PROGRAMACIN

ORIENTADA

La programacin tiene 4 pilares en los que se asienta: Abstraccin, encapsulamiento, herencia y polimorfismo. A continuacin explicar cada una de ellas. Abstraccin: O tambin llamada ignorancia selectiva es fijarnos ni camente en lo necesario de un objeto del mundo real para llevarlo a la programacin. Por ejemplo queremos hacer un programa que mida el tiempo que necesita un carro para recorrer cierta distancia, en ese caso necesitaramos como atributos velocidad y aceleracin. Sin embargo los carros tambin tienen Nmero de llantas, peso, nmero de pasajeros, temperatura, color y cada uno de ellos podra ser un atributo, sin embargo no lo necesitamos para el propsito de programa, eso es abstraccin. Encapsulamiento: Solo nos interesa saber qu hace la clase, no como lo realiza. Herencia: Es cuando una clase hereda de otra atributos y mtodos. Polimorfismo: Literalmente significa varias formas, son las diversas maneras de cmo un mtodo se comporta dependiendo de la clase en la que est. Se explicar ms adelante.

INSTANCIACIN DE OBJETOS Y CONSTRUCTORES


Para crear un nuevo objeto de alguna clase se utiliza el operador NEW seguido del CONSTRUCTOR. A la izquierda podemos ver el ejemplo de los nios y sus mascotas pasadas a cdigo.

Se utiliza el operador NEW para brindarle espacio en la memoria al objeto creado, recuerda que al proceso de crear un nuevo objeto de una clase se le llama instanciacin, por tanto el objeto creado vendra a ser una instancia de la clase. Con respecto a los constructores recordar que sirven para inicializar los valores de los objetos creados, justamente para construir el objeto. Una clase puede tener ms de un constructor. En la imagen de la derecha se puede ver que la clase Perro tiene dos constructores, si le agregamos ms atributos podemos tener ms constructores. En el segundo constructor se usa la palabra clave this que indica que el atributo de la clase ser inicializada por el parmetro enviado por el constructor. Para que se entienda mejor, si no estuviera la palabra clave this al momento de compilar no se sabra cual atributo color es cual, estaramos poniendo algo as : color = color ; . Como se ve en la imagen se resalta el atributo color de la clase (en la parte superior) y el atributo color del constructor porque son el mismo atributo. OBSERVACIN: Los constructores no llevan ni un tipo de retorno (void,int,double,boolean) por tanto sera un error crear un constructor de la clase Perro de la siguiente manera: public void Perro(); SOBRECARGA DE MTODOS

La sobrecarga de mtodos se refiere a que pueden existir ms de un mtodo con el mismo nombre pero deben variar en algunas cosas, veamos:

NOTA: Cuando creamos una clase con muchsimos mtodos a veces no recordamos todos los atributos que tiene y mtodos, para sacar una lista de todo lo que contiene una clase basta con presiona Control+Espacio. Ejemplo:

MODIFICADORES DE ATRIBUTOS Y MTODOS Los modificadores de acceso indican desde que clases pueden acceder a los atributos y mtodos de otra clase.

Private.- Los mtodos y atributos declarados como privados (prvate) solo pueden ser accedidos por instancias de esa clase o desde la misma clase. Public .- Los mtodos y atributos declarados como pblicos indican que pueden ser accedidos desde cualquier parte del programa. Default .- Al no poner un modificador este queda marcado como default o defecto, indica que ese atributo o mtodo puede ser accedido desde cualquier parte del mismo paquete. Protected.- Indica que puede ser accedido desde cualquier parte del mismo paquete (como los default) pero tambin por sus subclases. STATIC Es un modificador especial, que hace que los atributos pertenezcan a la clase y no a las instancias. Por ejemplo tenemos esta clase Alumno que tiene como atributo un contador de alumnos, cada vez que se crea una nueva instancia se sumar en uno.

Pero vemos en la imagen anterior que en la consola aparece en consola 1,1,1 es porque estamos accediendo a la variable de cada instancia y cada una es independiente. Ahora har lo mismo solo que le agregar el modificador static al atributo.

Ahora s, la variable acta como un contador, lo que pasa es que ahora la variable se ha convertido a una variable general de toda la clase y no depende de las instancias. Es decir la variable esttica es nica por clase, usando el ejemplo de arriba, si se crean 100 objetos de la clase Alumno existir un nico atributo numeroAlumno y un cambio realizado desde cualquier objeto a ese atributo har un cambio para todos los dems. Normalmente para acceder a una variable se crea primero un objeto y luego con el operador punto (.) se acceden a sus mtodos y atributos. Los atributos y mtodos estticos pueden ser accedidos sin necesidad de crear algn objeto de esa clase, por ejemplo si tenemos una clase con mtodos y atributos estticos estos pueden ser fcilmente llamados desde otra parte, dependiendo de su modificador de acceso, sin necesidad de crear objetos y nicamente poniendo el nombre de la clase, el operador punto y el nombre de mtodo y atributo. Por ejemplo:

La clase Math tiene muchsimos mtodos y variables estticas al igual que la clase Thread. Recordar que en los mtodos estticos solo pueden haber variables y mtodos estticos. Final .- Los atributos final indican que son constantes y que no cambiarn a lo largo de la ejecucin del programa. Por lo general las constantes van en mayscula. HERENCIA La herencia es un tipo de relacin de clases, donde una clase (llamada superclase o clase padre) hereda sus mtodos y atributos a otra clase. Para poder crear una clase que sea padre debemos hacer un proceso ya conocido llamado factorizacin; en matemtica es sacar el factor comn entre unos nmeros, en POO sera coger los elementos comunes entre 2 o ms clases, es decir los atributos y mtodos comunes entre ellos y juntarlos en una nueva de la que todas heredarn. Hay que recordar que en Java la herencia es simple, es decir una clase solo puede heredar sus atributos y mtodos de UNA SOLA CLASE, no es como otros lenguajes de programacin orientado a objetos, como c++, que soporta la herencia de ms de una clase. Las clases hijas siempre son ms especializadas en su labor que las clases padre, ya que estas son ms generales (poseen menos atributos y mtodos). Sin embargo Java tiene una manera de solucionar este problema de de la herencia mltiple con las Interface.

Pondremos un ejemplo, tendremos 2 clases, una llamada Persona que tendr 2 atributos y 2 mtodos que llevarn los nombres de su misma

clase con fines didcticos. Se ve ac la clase Persona.

Esta es la clase Empleado, se usa la palabra extends que en ingls quiere decir extiende. Se lee : La clase Empleado extiende de la clase Persona . Esta clase tiene sus propios mtodos y atributos que tienen como nombre a su clase, solo con fines didcticos.

Ahora vamos a crear un objeto de la clase Empleado, y al revisar sus mtodos y atributos, observamos que empleado tiene los mtodos y atributos tanto de Empleado como de Persona. Adems tiene ms mtodos que nosotros no hemos declarado, esto se debe a que todas las clases heredaran de una superclase por excelencia llamada Object.

CLASE ABSTRACTA
Las clases abstractas son un tipo especial de clase, estas no pueden ser instanciadas, es decir no pueden crearse objetos de estas clases. Entonces Para qu sirven? Este tipo de clases sirven como molde para otras clases por ser muy generales. Por ejemplo yo tengo 2 clases, la clase padre llamada Mamfero y la clase hija llamada Perro, yo puedo decir: Voy a crear un objeto Perro, entonces uno instancia un objeto de la clase Perro que uno ya lo tiene bien definido y no cabe error de a qu animal nos referimos. Pero si decimos: Voy a

crear un objeto Mamfero, pero Qu mamfero? Puede ser un perro, un gato, un caballo, un elefante, una jirafa, etc... Esa clase es muy general, y bien puede servir como molde para todas las clases anteriormente mencionadas mas no puede ser instanciada. Adems las clases abstractas tienen uno o ms mtodos abstractos. Los mtodos abstractos son mtodos que no estn implementados, solo su prototipo. Usaremos a la super clase Persona como ejemplo, lo volveremos una clase Abstracta con la palabra clase abstract y como vuelvo a repetir necesita como mnimo un mtodo abstracto, que tambin lo declararemos.

Inmediatamente en la clase que habamos heredado los atributos y mtodos de Persona, es decir la clase Empleado marcar un error porque si se hereda de una clase abstracta la clase hija necesariamente tiene que implementar (escribir el cuerpo o contenido) del mtodo abstracto. Como se ve en la imagen nos marca un error en la clase Empleado y como una solucin esta la de Implementar todos los mtodos abstractos.

HERENCIA MLTIPLE E INTERFACE Como ya haba adelantado, Java soluciona el problema de la herencia mltiple con el uso de Interfaces. INTERFACE Una interface es una clase Abstracta pura, es decir todos sus mtodos deben ser abstractos y adems puras constantes. Tenemos estas 2 interfaces, que como se ve tiene todos sus mtodos abstractos:

Ahora la implementaremos a nuestra clase Empleado que es nuestro conejillo de indias. Como vemos nuevamente nos sale el error, ya que al igual que una clase abstracta debemos implementar TODOS los mtodos abstractos. Observar que las interfaces se implementan usando la palabra clave implements y separando cada interface con una coma (,) .

Luego de dar clic para corregir nos aparecern todos los mtodos con un contenido por defecto, que puede ser eliminado y dejarlo en blanco para nosotros cambiarlo. Solo visualizamos en la imagen 4 de los mtodos abstractos pero solo mostr 4 porque se haca muy grande, pero obviamente se implementaron todos los mtodos de las dos interfaces.

Polimorfismo Literalmente significa varias formas, es decir como un mtodo puede tener diferente implementacin dependiendo de la clase u objeto que est. Por ejemplo declararemos una Clase animal con un mtodo abstracto llamado desplazarse() , tambin est el mtodo comer, salvo que todos los animales que se mencionarn comen de manera muy parecida excepto que su manera de desplazarse de un punto a otro es diferente.

A continuacin creamos las clases Serpiente, Topo, Paloma y Perro que extendern de la clase Animal ambos mtodos e implementaremos el mtodo

abstracto.

Se puede observar como 4 clases diferentes extendiendo de la misma clase padre han redefinido un mismo mtodo pero tienen comportamientos diferentes.

ARRAYLIST Y ARREGLO DE OBJETOS Los ArrayList son clases para guardar objetos de otra clase, es decir son arreglo de objetos. Son almacenados de manera secuencial es decir se van poniendo segn los vamos agregando. La clase ArrayList es una clase genrica, es decir se va adecuando segn la clase que queremos guardar dentro de ella. A diferencia de los arreglos, los arraylist pueden guardar una cantidad ilimitada de elementos. Generalmente se le pone entre < > el nombre de la clase de la cual guardaremos sus objetos. Ahora veremos algunos mtodos de la clase ArrayList:

add(Object e) .- Como el mtodo indica es para agregar un nuevo elemento al array, se le tiene que pasar un objeto como parmetro y este devolver un valor booleano que puede ser usado para verificar si se guard correctamente o no. add(int index, Object element).- Es para insertar un elemento segn el ndice que le pongamos. clear() .- Elimina todos los elementos del array. Iterator() .- Devuelve el iterator con todos los elementos del array, para poder recorrerlo. remove(Object e) .- Se le manda un objeto como parmetro y elimina el objeto de arraylist que sea igual. ITERATOR

La clase Iterator nos ofrece un patrn de diseo independiente de la estructura de datos que estamos utilizando. Por ejemplo podemos usar un iterator para recorrer un ArrayList, HashTable, Cola, Pila, rbol Binario, etc todos de la misma forma, eso nos brinda mucha simplicidad al momento de codificar. Para obtener un Iterator de una ArrayList se hace de la siguiente forma:

Lo que hace el mtodo iterator() es devolvernos el iterador del arraylist. Ahora veamos sus mtodos:

Solo necesitaremos principalmente dos mtodos sencillsimos: hasNext().- Tal como indica nos devuelve un valor booleano. Nos indica si el iterador tiene algn elemento que le sigue. Se usa como condicin para recorrer el arraylist. Next().- Nos devuelve un objeto de la clase Object esto es importante recordar ya que si guardamos en un array elementos de una clase, por ejemplo Alumno, tenemos que hacer cast (convertir una clase a otra) para recuperarlo como la clase Alumno.

Ahora veremos como recorrer un array en java: Crearemos primero un

ArrayList de la clase Alumno.

Primero guardaremos 10 alumnos en el ArrayList pero esta vez instanciaremos de una forma diferente. Usaremos de frente el operador "new", esto crear un nuevo objeto pero no tendr un variable que lo referencie. Ahora usaremos un iterador, cada clase para guardar objetos tiene su propio iterador que se obtiene con el mtodo iterator(), hay que importar la clase Iterator.

Ahora recorreremos el mostrando su nombre.

array

Como ya se mencion el mtodo next() devuelve un objeto de la clase Object, pero nosotros queremos uno de la clase alumno, as que usaremos un objeto auxiliar y luego haremos cast.

Este es el resultado mostrado en consola. Esta forma de recorrer el arraylist sirve para buscar si un elemento ya existe, o comparar 2 objetos con el mtodo equals, eliminar un elemento, etc

INTERFAZ GRFICA Para empezar a crear una interfaz grfica haremos clic derecho en un paquete donde ir la interfaz y daremos clic a nuevo y elegiremos JFrame Form o JPanel Form.

Al crear un nuevo JFrame nos llevar a esta ventana. Un JFrame es una ventana 1.- Esa pestaa nos llevar al cdigo del Frame, se va autogenerando segn vamos avanzando el diseo. 2.- Es diseo. la vista de

3.- Ese botn nos permite ir viendo cmo va quedando la ventana sin necesidad de ejecutar el programa. 4.- Es el lienzo donde iremos agregando los elementos. Un JFrame es un contenedor donde podremos ir agregando los dems elementos de una interfaz grfica como botones y paneles (JPanel).

DATO: Para que una clase se vuelva una ventana o un panel debern heredar desde un JFrame o un JPanel dependiendo del caso. Este es el cdigo que se autogenera cuando se crea un nuevo JFrame o un JPanel. La partes en gris no son modificables, solo lo puede hacer el mismo NetBeans. El mtodo initComponents() dentro del constructor del JFrame inicializa los componentes del JFrame o Panel segn lo modificamos en el gestor de diseo. En caso de querer modificar algn componente de una manera distinta, como por ejemplo usando los Model que veremos ms adelante, creamos un mtodo aparte y lo llamamos debajo de initComponente().

Los paneles (JPanel) tienen la misma modalidad de creacin que un JFrame. Una ventana puede contener varios paneles, de hecho un JFrame tiene su propio panel interno pero podemos agregarle otro con el fin de modificar mejor. Ahora veremos la paleta, en la paleta estn los elementos que se le pueden poner dentro de un contenedor, sea un JFrame o un JPanel. Se encuentra en la pestaa de diseo, en la parte derecha. Veamos los ms usados:

Paneles Mencion que para que una clase sea un panel deber extender de un JPanel, tambin se pueden jalar de la paleta otros paneles que servirn como contenedor de otros elementos. En la imagen se ve como a un JFrame le metimos 4 paneles de diferentes colores.

Barra de Herramientas(ToolBar) Las barras de herramientas son muy usadas en las interfaces grficas. Prcticamente todo actualmente tiene una programa barra de

herramientas con botones para guardar,copiar, cortar, etc Por defecto se ve que tiene unos puntos a los costados, eso indica que es floatable o flotante es decir se le puede sacar haciendo clic y moverlo a otra parte. Esta opcin se puede desactivar.

Split Panel Los Split Panel nos ofrece ms que nada una ayuda visual, su funcin es la de poder separar dos contenedores ( por ejemplo 2 paneles) y mostrarlos con una barra de separacin al medio. Dicha barra puede moverse en la ventana de propiedades del Split panel .

JLabel o Etiquetas Muestra mensajes que el usuario no podr modificar, generalmente se usa para dar indicaciones como Ingrese su nombre al costado de un campo de texto u otras advertencias.

JButton o Botn Un clsico botn nada ms que decir. Le das clic y mediante eventos puede desencadenar una serie de instrucciones.

JCheckBox o Casillero de Chequeo Los CheckBox se usan para marcar opciones. Por defecto cada check box es independiente, es decir si hay 6 checkbox

podemos marcar las 6 sin problema.

ButtonGroup o Grupo de Botones

Un inconveniente en los Check Box, y Radio Button (que veremos ms adelante) es que en ocasiones necesitaremos marcar solo 1 opcin de un grupo de botones. Los grupo de botones solucionan ese inconveniente, y aplicarlo es sencillo, basta con jalar de la paleta hacia el Frame o Panel que estemos diseando, no aparecer ningn elemento nuevo ah pero en la ventana de los componentes (parte inferior-izquierda) se ver que se ha creado un nuevo elemento.

Ahora queramos unir ms de un presionada la propiedades buttonGroup, y grupos que tengamos.

seleccionamos los botones que en el grupo (puede seleccionar elemento manteniendo tecla Control) y en sus veremos una opcin que dice nos aparecer una lista de los

Finalmente presionamos el botn de previsualizar y si tratamos de seleccionar ms de uno nos damos cuenta que solo podemos seleccionar uno de ellos. JTextField o Campo de Texto Los campos de texto son muy usados en las interfaces grficas, y como ya mencione ms arriba son mayormente usados junto a las etiquetas. Un mtodo muy usado es el de getText() que retorna el contenido ingresado y el setText(String ) para modificarlo.

JTextArea o rea de Texto Se podra decir que un rea de texto es una secuencia de campos de textos. Tiene filas y columnas que pueden ser modificadas tanto desde la ventana de propiedades como agrandando en el visor de diseo. Por defecto al usar el gestor de diseo de NetBeans viene con un scroll o barra de desplazamiento que va haciendo que se visualize el contenido que no alcance.

Antes de pasar a los siguientes elementos, bastante usados y muy importantes veremos los Eventos y Listeners. Listeners Listeners, literalmente significa Oyentes, son Interfaces que se implementan en las clases que vamos a monitorear es decir, al agregarle un listener estamos ponindole una especie de vigilante a la espera que se realice alguna accin sobre ese elemento para ejecutar algn evento. Algunos de los ms usados son el MouseListener que monitorea las acciones del Mouse, y el KeyListener que monitorea las acciones realizadas con el teclado. Eventos El Gestor de Diseo de Netbeans nos ofrece una manera sencilla de manejar los eventos, nos dejaremos de preocupar por los listeners ya que este los va agregando a cada elemento que queramos monitorear, incluso de distintas manera. Para acceder a la lista de eventos es simple, hacemos clic en el elemento grfico que queremos aplicar el evento y en la pestaa de Events (o eventos) tendremos una lista completa de todos los eventos disponibles. Por ejemplo: FocusGained: Cuando un elemento gana el focus o la atencin del usuario.

FocusLost: Cuando un elemento pierde el focus o la atencin del usuario. KeyPressed: Se activa al presionar una tecla en particular. MouseClicked: Se activa cuando damos clic al elemento. MouseDragged: Cuando hacemos clic y arrastramos el mouse. MouseMoved: Cuando movemos el mouse. WindowClosed: Al cerrar una ventana (Frame). WindowClosing: Evento que se ejecuta mientras se est cerrando la ventana. WindowOpened: Al abrir una ventana nueva. Pondremos como ejemplo lo siguiente, pondremos un simple botn que al momento de darle clic nos aparezca un mensaje. Ya tenemos un botn puesto simplemente en medio de un contenedor, en este caso un JFrame, le hacemos clic y entramos en la pestaa de eventos, buscamos la opcin mouseClicked y le hacemos clic a la opcin que nos aparece. Al momento de hacerle clic nos llevar a la pestaa de cdigo y se habr creado automticamente un mtodo. En ese mtodo haremos todo el cdigo que queramos que se ejecute al momento de hacer clic. NOTA: Si usamos el gestor de diseo de NetBeans este no importar ni un solo paquete, es decir nosotros en este caso queremos acceder a la clase JOptionPane y para hacerlo podemos importar directamente la clase(import javax.swing.JOptionPane) o simplemente escribir toda su ubicacin como en el ejemplo de abajo.

Ahora ejecutamos el programa y le hacemos clic al Botn y voil :3 Nos aparecer el mensaje que escribimos en ese caso, recordar que el JOptionPane tiene diversos constructores que podemos acceder con Control+Espacio como ya se mencion en los captulos anteriores.

JComboBox o Lista Desplegable Otro elemento que revisaremos a fondo son las listas desplegables, estas contienen una serie de elementos que pueden ser seleccionados. Existen dos formas de agregar elementos a una Lista Desplegable. Una, que es la ms sencilla, hace que los elementos de una lista desplegable sean estticos, es decir si ponemos 10 elementos, esos 10 elementos quedarn a lo largo de programa. Otra son los elementos dinmicos, o aquellos que van aumentando o disminuyendo segn creamos conveniente.

Primero veremos lo ms sencillo. Para agregar una Lista Desplegable simplemente la arrastramos de la paleta al Frame o Panel y le hacemos clic para ver sus propiedades. Tiene una opcin que dice model le hacemos clic en los tres puntos que tiene (). Con eso lograremos abrir la ventaba de edicin del model.

Esto nos abrir la ventana para editar los elementos que hay en un lista desplegable, cada elemento est separado por un salto de lnea.

Ahora veremos cmo modificar la cantidad de elementos de un Combo Box o Lista Desplegable. Para ello necesitaremos la clase DefaultComboBoxModel que sirve para modelar a nuestro gusto un Combo Box . A continuacin vemos como instanciamos un objeto de esa clase y nos permite tres constructores diferentes.

En los tres casos lo que se manda por parmetro son los elementos (tems) que irn dentro de la lista desplegable, puede ser un arreglo o un objeto de la clase Vector (que tiene una implementacin igual que un ArrayList). Recordar que aparte de las propiedades existe una pestaa llamada Code, donde su principal uso ser la de cambiar el nombre de la variable de cada elemento que se le agregue al Frame o Panel, siempre se crea uno por defecto. En la siguiente imagen instanciamos un objeto de la clase DefaultComboBoxModel, en este caso no le pasaremos parmetros, solo es para fines didcticos.

Luego cada combo box tiene un mtodo llamado setModel que sirve para asignarle manualmente un Modelo, en este caso le pasaremos como parmetro el que hemos creado.

Podemos usar la clase Vector para que vaya almacenando los tems que tendr el combo box, luego para actualizar su contenido del combo box tenemos que hacer un setModel nuevamente. Un mtodo muy usado es el de getSelectedItem() del Combo Box, que nos devuelve en forma de una instancia de la clase Object el elemento seleccionado Pongamos el siguiente ejemplo:

Crearemos un programa sencillo, lo nico que hace es que a partir de un Combo Box, al que previamente le borramos todos sus elementos desde la ventana de propiedades, usando un campo de texto(nombre de variable campoElemento) y un botn(nombre de variable botonIngresar) que tendr un evento al hacerle clic que ir agregando elementos al combo box.

Primero instanciamos un objeto de la clase Vector que contendr todos los elementos de que se agregarn. Ahora como hicimos arriba, crearemos un evento MouseClicked en el botn. 1.- Primero guardamos en un String elemento el texto ingresado en el campo de texto. 2.- Lo agregamos al vector con el mtodo add. 3.- Instanciamos un objeto de la clase DefaultComboBoxModel y en el constructor le pasaremos como parmetro los elementos del Vector. 4.- Luego le damos el Modelo creado por nosotros al combo box con el mtodo setModel (asignar modelo). 5.- Ahora al campo de texto lo limpiaremos, es decir con el mtodo setText(String); podemos asignarle un texto al campo de texto, en este caso dejaremos dos comillas para indicar que esta vacio.

Ahora ejecutamos el programa, y vemos como el Combo Box est totalmente vaco. Ahora le agregar 5 nombres: Gianmarco, Andreli, Judith, Angie y Las Pelotas.

Ya ingresados los 5 elementos vemos como en el Combo Box tenemos ya ingresados los elementos. Podemos ir agregando ms y este mtodo es bastante til si necesitamos, por ejemplo, ir agregando alumnos a un registro, o empleados, etc las posibilidades son muchas y como aprovechar esto ya depende de cada uno.

JTable o Tablas Las tablas ofrecen una buena forma de mostrar informacin disponible. Para agregar informacin a una Tabla usaremos, al igual que en un ComboBox, un Model en este caso un objeto de la clase DefaultTableModel.

Con la clase DefaultTableModel podemos modificar los ttulos de cada columna, el nmero de columnas, filas , etc Aunque existe la posibilidad de cambiar los ttulos mediante la opcin model de la ventana propiedades del JTable.

Ahora veremos este sencillo programa, que hace que ingresemos en la tabla el nombre y edad de una persona. Ntese que este es la ventana de pre visualizacin, es decir an no hemos ejecutado el programa sin embargo esta sera la forma en que se vera nuestro programa si lo ejecutramos, claro que an no le hemos cambiado los ttulos manualmente, ni la cantidad de filas ni columnas pero lo haremos a travs de un DefaultTableModel.

Primero crearemos una variable modeloTabla de la clase DefaultTableModel, pero an no crearemos el objeto con el operador new, esto lo ponemos ac para que esta variable pueda ser accedido desde cualquier parte de la clase.

Ahora crearemos un mtodo llamado aplicarDiseoTabla() donde crearemos un arreglo de String llamado ttulos que contendr los dos ttulos de ambas columnas en este caso sern Nombre y Edad. Luego instanciaremos un objeto de la clase DefaultTableModel y veremos que tiene varios constructores. Usaremos el segundo donde se le pasa por parmetros los ttulos y el nmero de filas inicial.

Tenemos ac el mtodo creado y listo, como vemos en el mismo constructor, debajo del mtodo initComponents() hemos llamado a nuestro mtodo aplicarDiseoTabla(), como se explico anteriormente el mtodo initComponents lo que hace es iniciar los componentes tal cual lo hemos hecho en el gestor de diseo, ahora si queremos, como en este caso, modificar un componente en especfico podemos hacerlo agregando el mtodo debajo de este. Nota: Ntese que pusimos 0 filas, porque queremos la tabla completamente vaca la iniciar.

Para que se entienda mejor lo de initComponents(), a continuacin tenemos el programa ejecutado con el cdigo del DefaultTableModel compilado y a la izquierda la ventana de pre visualizacin es decir sin ejecutar el programa.

Ya que tenemos el modelo asignado, pasaremos a crear el evento en el botn Ingresar. El campo de texto donde se colocar el nombre tiene como nombre de variable campoTexto, y el de la edad campoEdad. Tenemos un nuevo String, un arreglo de String que contendr solo 2 elementos, el nombre y le edad que hemos obtenido. Usando la variable de DefaultTableModel podemos usar el mtodo addRow o Agregar Fila que lo que hace es agregar una nueva fila a la tabla pasndole como parmetro un arreglo con la informacin contenida.

Ahora ejecutamos el programa y este es el resultado obtenido. En la imagen ya agregu 3 nombre y edades. Podemos hacer muchos usos a este mtodo de agregar informacin a una tabla y como ya dije, depende de nuestra imaginacin darle un buen uso :3

Archivos Interface Serializable Para que un clase pueda guardarse dentro de un archivo, base de datos, o enviado a travez de una red este necesita ser convertido a un montn de bytes y posteriormente reconstruido. Para esto la clase debe ser Serializable. La forma de serializar una clase es sensilla ya que Serializable es una interface por tanto basta con un implements Serializable para indicar que esa clase ser transformada a un montn de bytes, es sencillo de implementar ya que Serializable no contiene ningn mtodo. Si vamos a guardar una clase entonces debemos serializarla, ahora si es clase usa otras clases, estas deben ser Serializables tambin. Muchas clases por defecto en java ya son serializables, de hecho casi todas. Algunas no lo son, por ejemplo la clase Iterator no est serializada entonces si tenemos un Iterator como en el ejemplo siguiente:

Se aprecia como la clase implementa Serializable, que es una interface sin mtodos, por tanto no hay que redefinir ningn mtodo. Ahora tenemos un arrayList y un Iterator que lo usaremos para recorrer el ArrayList; aunque ArrayList es una clase que previamente ya esta Serializada, la clase Iterator no lo est y por tanto esta clase (ClaseQueSerializaremos) no podr guardarse. Sin embargo existe un modificador que nos ayudar a solucionar este problema.

El modificador transient indica que esa variable no se serializar y por tanto podemos presindir de ella, generalmente se usa en constantes y auxiliares.

Ahora el primer paso es crear el archivo, para eso haremos uso de la clase File (Archivo) que nos permitir crear una variable para hacer referencia al archivo que vamos a manejar. En el constructor lo nico que le pasaremos como parmetros ser la localizacin del archivo. El archivo File lo pondremos fuera de todos los mtodos para que pueda ser accedido desde cualquier parte de la clase. Ahora analizaremos el mtodo crearArchivo(); Primero crearemos dentro de la carpeta del proyecto una carpeta llamada archivos y dentro crearemos el archivo llamado datos.dat. La clase File tiene mtodos para crear nuevo archivo (createNewFile) que crea un archivo si no existe, y no lo har si es que ya existe.Y un mtodo llamado isExist() que devuelve un booleano si existe o no el archivo OJO: Todos estamos acostumbrados a poner como ruta del a siguiente manera C:\carpeta\archivo.dat por poner un ejemplo. En Java se usan dos \\ para indicar un cambio de carpeta.

Ahora veremos los flujos. En java existen varios flujos de entrada y de salida especializados para los diversos tipos de datos que le pasemos, aunque ahora solo usamos para archivos de texto. Primero diferenciemos un flujo de salida de uno de entrada, un flujo de salida es un canal de comunicacin entre la JVM (Mquina Virtual de Java) con el exterior puede ser un archivo, una base de datos, otra red, etc es decir es informacin que sale de nuestro programa al archivo. Un flujo de entrada, como ya deberieron haber deducido es un flujo de comunicacin entre el exterior con nosotros, es informacin entrante que nosotros podremos leer.

Para comunicarnos con un archivo existen las clases FileOutputStream y FileInputStream del paquete java.IO que como su nombre nos indican darn un flujo de entrada y de salida con un archivo, a su constructor tenemos que pasarle como parmetro un objeto de la clase File que ya creamos en la imagen anterior. Estas clases no hace nada ms que abrir un canal de comunicacin entre la JVM y un archivo, pero para especializar ms ese canal de comunicacin, quiero decir podemos especificarle de antemano que se prepare especialmente para pasarle una cadena de caracterers, una secuencia de nmeros o un objeto. Existe la clase OutputStreamWriter que como su nombre lo indica es un flujo de salida que escribe, en este caso a un archivo de texto, lo que le pasemos. Es un FILTRO es decir se le aplica sobre un canal de comunicacin ya abierto para especializarlo. Ahora vamos al ejemplo, tengo un mtodo que se llama escribirEArchivo() que como su nombre indica tendremos que usar un flujo de salida para escribir en el archivo. Primero instanciamos un objeto de la clase FileOutputStream y le pasamos como parmetro el objeto archivo que ya creamos. Generalmente nos pedir que ciertas lneas de cdigo estn en un bloque trycatch de excepciones pero se agregarn automticamente si le damos a corregir el error. Luego instanciamos un objeto de la clase OutputStreamReader que ser el filtro que le aplicaremos al FileOutputStream. Crearemos un Scanner con el mtodo nextLine(siguiente lnea) para leer una lnea y lo guardar en el String de variable lnea. Luego usamos el mtodo write(String) y le pasaremos como parmetro un String para que lo guarde en el archivo de texto.

Finalmente una buena prctica de programacin es la de cerrar los flujos de entrada y de salida (con el mtodo close() ) ya que estos a veces pueden causar errores si no se cierran, a veces causan perdida de informacin. El primer mensaje nos dice que el archivo fue creado correctamente, recuerda que siempre hay que crear el archivo o tenerlo creado y hacerle una referencia a l con un objeto de la clase File.Luego escribo la lnea deseada y espero que se guarde. Ahora revisamos el archivo, que como indicamos esta dentro de la carpeta del proyecto en la carpeta archivos. Y lo abrimos y vemos el archivo datos.txt creado y la lnea que ingresamos por consola. (Que lnea tan loquilla :3) Ahora vamos a leer el archivo de texto, para ello usaremos la clase InputStreamReader que se encargar de establecer un canal de comunicacin especializado para la lectura de bytes y arreglo de caracteres un momento, pero nosotros necesitamos leer un lnea, un String, en este caso la clase InputStreamReader no cuenta con ningn mtodo para leer lneas de caracteres bueno, recordemos que InputStreamReader es un filtroy le podemos aplicar otro.

La clase BufferedReader es un filtro que le tenemos que pasar como parmetro un input Stream, en este caso el InputStreamReader, el BufferedReder s cuenta con un mtodo para leer lneas y cuenta con una caracterstica especial. La manera en la que lee del archivo es especial para grandes cantidades de texto, lo que pasa es que las dems clases leen directamente del archivo y van a la JVM, en cambio el BufferedReader usa el buffer de la memoria Ram como intermediario, es decir, la JVM lee lo que esta en el buffer y las lneas de texto quedan almacenadas en el buffer, y como ya sabemos es mucho ms rpido leer del buffer que del disco duro.

En el mtodo empezamos con un mensaje indicando que se empez a leer el archivo. Luego instanciamos un objeto de FileInputStreamReader y le pasamos como parmetro el archivo. Luego le aplicamos el filtro InputStreamReader al FIleInputStream. Luego le aplicamos el filtro de BufferedReader al InputStreamReader. Luego creamos un string de nombre lnea donde ir la lnea que obtengamos. Luego usamoe le mtodo readLine() que nos retornar un string de la lnea del archivo y lo guardamos en la variable lnea. Finalmente lo mostramos.

S-ar putea să vă placă și