miércoles, 25 de abril de 2012

Hilos en Java


Un hilo es un proceso que se está ejecutando en un momento determinado en nuestro sistema operativo, como cualquier otra tarea, esto se realiza directamente en el procesador.
Sirven para conseguir que Java haga varias cosas a la vez o que el programa no se quede parado mientras realiza una tarea compleja, tenemos los hilos (Threads).

Como crear un hilo

Crear un hilo en java es una tarea muy sencilla. Basta heredar de la clase Thread y definir el método run(). Luego se instancia esta clase y se llama al método start() para que arranque el hilo

public MiHilo extends Thread
{
   public void run()
   {
      // Aquí el código pesado que tarda mucho
   }
};
...
MiHilo elHilo = new MiHilo();
elHilo.start();
System.out.println("Yo sigo a lo mio");

Hemos creado una clase MiHilo que hereda de Thread y con un método run(). En el método run() pondremos el código que queremos que se ejecute en un hilo separado. Luego instanciamos el hilo con un new MiHilo() y lo arrancamos con elHilo.start(). El System.out que hay detrás se ejecutará inmediatamente después del start(), haya terminado o no el código del hilo.

Estados de los Hilos:

- Nuevo (new): Este es el estado en que un hilo se encuentra después de que un objeto de la clase Thread ha sido instanciado pero antes de que el método start() sea llamado.

- En ejecución (runnable): Este es el estado en que un hilo puede ser elegido para ser ejecutado por el programador de hilos pero aún no está corriendo en el procesador. Se obtiene este estado inmediatamente después de hacer la llamada al método start() de una instancia de la clase Thread.


- Ejecutándose (running): Este es el estado en el que el hilo está realizando lo que debe de hacer, es decir, está realizando el trabajo para el cual fue diseñado.


- Esperando/bloqueado/dormido (waiting/blocked/sleeping): Es el estado en el cual el hilo está vivo aún pero no es elegible para ser ejecutado,es decir, no está en ejecución pero puede estarlo nuevamente si algún evento en particular sucede. Por ejemplo, un hilo puede estar durmiendo por que en el código se le ha pedido que lo haga pero pasa a estado en ejecución cuando el tiempo que se le pidió dormir ha expirado.


- Muerto (dead): Un hilo está muerto cuando se han completado todos los procesos y operaciones contenidos en el método run(). Una vez que un hilo ha muerto NO puede volver nunca a estar vivo, recordemos que no es posible llamar al método start() más de una vez para un solo hilo.


miércoles, 28 de marzo de 2012

JavaBeans y sus Componentes.

Un JavaBean es un componente hecho en software que se puede reutilizar y que puede ser manipulado visualmente por una herramienta de programación en lenguaje Java.
Se define un interfaz para el momento del diseño que permite a la herramienta de programación o IDE, interrogar al componente y conocer las propiedades que define y los tipos de sucesos que puede generar en respuesta a diversas acciones.
Aunque los Beans individuales pueden variar ampliamente en funcionalidad desde los más simples a los más complejos, todos ellos comparten las siguientes características:
  • Introspection: Permite analizar a la herramienta de programación o IDE como trabaja el Bean
  • Customization: El programador puede alterar la apariencia y la conducta del bean.
  • Events: Informa al IDE de los sucesos que puede generar en respuesta a las acciones del usuario o del sistema, y también los sucesos que puede manejar.
  • Properties: Permite cambiar los valores de las propiedades del Bean para personalizarlo.
  • Persistence: Se puede guardar el estado de los Beans que han sido personalizados por el programador, cambiando los valores de sus propiedades.
Una propiedad es un atributo del JavaBean que afecta a su apariencia o a su conducta. Por ejemplo, un botón puede tener las siguientes propiedades: el tamaño, la posición, el título, el color de fondo, el color del texto, si está o no habilitado, etc.
Las propiedades de un Bean pueden examinarse y modificarse mediante métodos o funciones miembro, que acceden a dicha propiedad, y pueden ser de dos tipos:
  • getter method: lee el valor de la propiedad
  • setter method: cambia el valor de la propiedad.
Cuando un programador, coge un Bean de la paleta de componentes y lo deposita en un panel, el IDE muestra el Bean sobre el panel. Cuando seleccionamos el Bean aparece una hoja de propiedades, que es una lista de las propiedades del Bean, con sus editores asociados para cada una de ellas.
Las especificaciones JavaBeans definen un conjunto de convenciones que el IDE usa para inferir qué métodos corresponden a propiedad.
Propiedades ligadas (bound)
Los objetos de una clase que tiene una propiedad ligada notifican a otros objetos interesados, cuando el valor de dicha propiedad cambia, permitiendo a estos objetos realizar alguna acción. Cuando la propiedad cambia, se crea un objeto que contiene información acerca de la propiedad, y lo pasa a los otros objetos interesados en el cambio.

Propiedades restringidas (constrained)
Una propiedad restringida es similar a una propiedad ligada salvo que los objetos a los que se les notifica el cambio del valor de la propiedad tienen la opción de vetar cualquier cambio en el valor de dicha propiedad.

INSTALACION DE COMPONENETES.

1.- En el proyecto en el que estamos trabajando, nos dirigimos a la barra de herramientas nos ubicamos en el cajón de herramientas y seguido a paleta y seleccionamos Swing/AWT Components.
2.- Aparesera una ventana llamada Palette Manager y se selecciona Add from JAR.

3.- Los siguientes pasos solo son para la instalación y ubicación de los componentes, ubicas cual es la carpeta en la cual se encuentran ubicados los componentes y das doble clic en la carpeta.

4.- Contiene dentro dos carpetas y seleccionaras a llamada Jars y darás doble clic.

5.- Elijes el componente que quieres agregar a tu proyecto y presionas Next.

6.- Dependiendo el tipo de componente que se quiera agregar, puede tener oh no diferentes componentes del mismo tipo, seleccionas el requerido y presionas Next.

7.- Eliges la carpeta en la que quiere que se ubique e componente, para pode hacer uso de él, en este ejemplo la carpeta es Beans.

8.- Para empezar a hacer uso del componente ubícate en el lugar que lo guardaste.

9.-  Arrástralo hasta el lugar deseado.

viernes, 10 de febrero de 2012

EVENTOS

Manejo de eventos en Java
 Las GUI están controladas por eventos, alguno de estos eventos son, mover el Mouse, seleccionar o escribir en un campo de texto, hacer click  en un botón, ya sea en la pantalla o en el Mouse etc..
Cuando ocurre una interaccion con el usuario, se envia un mensaje al programa. La informacion de los eventos de la GUI se almacena en un objeto de la clase que extiende a AWTEvent.
 Los Tipos de eventos del paquete java.awt.event se utilizan con componentes de AWT y de Swing. Los tipos de eventos adicionales, especificos para SPNG, se declaran en el paquete javax.swing.event.
 El mecanismo de eventos consta de tres partes:
  • El origen del evento
  • El objeto del evento
  • El componente de escucha del evento
Librerias Java para diseñar GUI:
 AWT
  • Primera librería gráfica
  • Se usan llamadas a los sistemas de ventanas nativos (componentes “pesados”)" Intento de un API común mediante el “mínimo común denominador” de todos los sistemas de ventanas" Problemas: componentes escasos, aplicaciones dependientes del entorno de ventanas.
 Swing
  • Evolución tras AWT
  • Se usa código propio de Java que dibuja en una ventana proporcionada por el sistema de ventanas (componentes “ligeros”)." Mayor cantidad de componentes y uniformidad de las aplicaciones gráficas en todos los entornos de ventanas.


    Origen del evento:Es el componente de la GUI especifico con el cual interactua el usuario.
    Objeto del evento:Es el encargado de encapsular la informacion acerca del  evento que ocurrio. Esta informacion incluye una referencia al origen del evento  y cualquier informacion especifica del evento que pueda ser requerida por el objeto escucha.
    Objeto escucha:Es un objeto que recibe la notificación del origen del evento cuando este ocurre;en efecto “escucha” a la espera de un evento y se ejecuta en respuesta a ese evento.

     El programador debe realizar dos tareas clave para procesar un evento de interfaz grafica de usuario en un programa. 
    1. Primero debe registrar un componente de escucha del evento para el componente de la GUI que se espera que genere ese evento.
    2. Segundo: debe implementar un manejador para ese evento
     Básicamente un componente de escucha para un evento GUI es un objeto de una clase que implementa a una o mas de las “interfaces de componentes” de escucha de eventos de los paquetes java.awt.event y javax.swing.event.
         Cada interfaz de escucha de eventos especifica uno o mas métodos manejadores de eventos que deben declararse en la clase que lo implemente (que implemente dicha interfaz) esto es porque la interfaz al ser abstracta y como toda clase abstracta debe implementar todos sus métodos.
         En el momento que ocurre un evento, el componente de la GUI con el que el usuario interactuó notifica a sus componentes de escucha registrados, llamando al método manejador de eventos apropiado de cada componente de escucha.

    Imagen de la aplicación: