miércoles, 27 de octubre de 2010

CONTENEDORES EN JAVA

Un contenedor es un componente especial que permite contener en su interior a otros componentes, incluidos otros contenedores. Un contenedor posee, además de la habilidad de contener otros componentes, la de organizar dichos componentes en su interior.
Los contenedores descienden de la clase padre Container, la cual, a su vez, es descendiente directa de la clase Component
java.lang.Object 
   java.awt.Component 
      java.awt.Container
Esta clase posee los métodos comunes a todos los contenedores, como aquellos que permiten agregar componentes al contenedor, localizar componentes, establecer la organización o disposición de los componentes (layouts), etc.
Para agregar componentes a un contenedor existe un método llamado add(añadir, agregar), que posee diversas sintaxis:
public Component add (Component comp)// Añade el componente al final del contenedor 
public Component add (String name,   // Añade el componente al final del contenedor y 
   Component comp)                   // le asigna un nombre 
public Component add (Component comp,// Añade el componente en la posicion indicada 
   int index)                        // por index. Con –1 lo añade al final 
public void add (Component comp,     // Añade el componente al final e indica al
   Object constraints)               // Layout las restricciones (x, y, ancho y alto) 
public void add (Component comp,     // Idem al anterior pero indicando que agregue 
   Object constraints,               // el componente en la posicion index dentro de 
   int index)                        // la lista de componentes del contenedor
Para eliminar componentes del contenedor se utiliza el método remove, cuya sintaxis es la siguiente:
public remove (int index)       // Elimina el componente que hay en la posicion index 
public remove (Component comp)  // Elimina el componente especificado
Si se desea vaciar el contenedor, el método removeAll es el método indicado:
public void removeAll ( )
Para conocer el número de componentes que hay actualmente insertados en el contenedor, se puede utilizar el método siguiente:
public int getComponentCount ( )
Obtener el componente situado en un posición específica en la lista de componentes del contenedor es muy sencillo. El método getComponent se encarga de ello:
public Component getComponent (int n)
Es posible también obtener el componente en relación a unas coordenadas específicas dentro del contenedor. Para ello, hay varios métodos:
public Component getComponentAt (int x, int y) 
public Component getComponentAt (Point p) 
public findComponentAt (int x, int y) 
public findComponentAt (Point p)
La diferencia entre el método getComponentAt y findComponentAt es quegetComponentAt busca en el hijo más inmediato, mientras quefindComponentAt puede buscar dentro de hijos anidados.
En este caso, si se desea conocer si un componente dado está contenido dentro del contenedor, existe un método:
public boolean isAncestorOf (Component c)
Este método retorna true si el componente está contenido dentro del contenedor, o false en caso contrario.
Los contenedores poseen la habilidad de pintar, y poseen varios métodos que sirven para pintar en el contenedor en un determinado momento:
public void paint (Graphics g)            // Cuando se repinta todo el contenedor 
public void update (Graphics g)           // Cuando se actualiza el contenedor 
public void print (Graphics g)            // Cuando se imprime el contenedor 
public void paintComponents (Graphics g)  // Cuando se repinta cada componente 
public void printComponents (Graphics g)  // Cuando se imprime cada componentes
Los contenedores poseen también la habilidad de validar o no su contenido. Esto se consigue gracias a algunos métodos especiales:
public void invalidate ( )   // Invalida el contenedor 
public void validate ( )     // Valida el contenedor y sus subcomponentes
Cuando se invalida un contenedor, éste y sus padres son marcados como que necesitan reorganizarse. Cuando se valida el contenedor, el contenedor y sus subcomponentes son reorganizados. El uso habitual de estos métodos se realiza cuando se han añadido, eliminado o modificado sus subcomponentes.
Los contenedores poseen la facultad de organizar sus subcomponentes gracias a los Layouts (disposiciones u organizadores). Para gestionar dichos organizadores existen varios métodos, algunos de los cuales ya se han visto en capítulos anteriores:
public void setLayout (LayoutManager mgr) // Establece el tipo de disposicion 
public LayoutManager getLayout ( )        // Obtiene el tipo de disposicion 
public void doLayout ( )                  // Reorganiza la disposicion del contenedor
Las disposiciones u organizadores serán tratados más adelante dentro de este mismo tema dedicado a los contenedores.
Todos los métodos aquí vistos son comunes a todos los tipos de contenedores. Como se indicó desde un principio, la clase Container es la clase padre de los contenedores, y pone a disposición de las clases más especializadas (cada tipo de contenedor) estos métodos y los heredados de la clase Component. 
 

Tipos de contenedores
En sí, la clase Container no se utiliza directamente, pues es una clase abstracta que define el comportamiento de los distintos tipos de contenedores. Sin embargo, sí es utilizada para extenderla y crear clases más especializadas. No obstante, Java posee varios tipos de contenedores, dispuestos en la siguiente jerarquía:
java.lang.Object 
   java.awt.Component 
      java.awt.Container 
         java.awt.Panel 
            java.applet.applet 
         java.awt.ScrollPane 
         java.awt.Window 
            java.awt.Dialog 
               java.awt.FileDialog 
            java.awt.Frame 
 

Panel
Un panel es la clase de contenedor más simple, ya que únicamente proporciona el espacio para contener otros componentes y contenedores. 
 

Applet
Un applet es un contenedor que deriva de la clase Panel. Además de proporcionar espacio para contener otros componentes, tiene la funcionalidad de ser una aplicación autónomo e independiente dentro de una página web. 
 

ScrollPane
Este tipo de contenedor puede implementar desplazamientos horizontales y/o verticales para poder acceder a posiciones de sus componentes hijos, si éstos no son visualizados. 
 

Window
Representa el nivel más básico de una ventana, sin bordes ni menús. Una instancia de una ventana no puede estar contenida dentro de otro contenedor. 
 

Dialog
Es una especialización de una ventana, y muestra bordes y título, y es utilizada comúnmente como formularios de entrada por los usuarios. 
 

FileDialog
Es una especialización de un diálogo (Dialog), permitiendo al usuario seleccionar navegar por los discos para seleccionar ficheros o archivos. 
 

Frame
Un frame (marco) es una especialización de ventana y muestra bordes y título, y además pueden tener menús. La diferencia con los diálogos es que éstos son dependientes de una ventana padre. Si esta ventana padre se minimiza, se restaura o se cierra, automáticamente los diálogos también se minimizan, se restauran o se cierran. Además, los diálogos pueden redimensionarse o moverse, pero no minimizarse ni maximizarse. 
 


Constructores
public Container ( ) 
 

Métodos
public Component add (Component comp) 
public Component add (String name, Component comp) 
public Component add (Component comp,int index) 
public void add (Component comp, Object constraints) 
public void add (Component comp, Object constraints, int index) 
public remove (int index) 
public remove (Component comp) 
public void removeAll ( ) 
public int getComponentCount ( ) 
public Component getComponent (int n) 
public Component getComponentAt (int x, int y) 
public Component getComponentAt (Point p) 
public findComponentAt (int x, int y) 


public findComponentAt (Point p) 
public boolean isAncestorOf (Component c) 
public void paint (Graphics g) 
public void update (Graphics g) 
public void print (Graphics g) 
public void paintComponents (Graphics g) 
public void printComponents (Graphics g) 
public void invalidate ( ) 
public void validate ( ) 
public void setLayout (LayoutManager mgr) 
public LayoutManager getLayout ( ) 
public void doLayout ( ) 

1 comentario:

  1. bien me gusto mucho este blog lo estaba buscando gracias man...oye me puedes ayudar es que quiero aprender esto de los contenedores bien, dominarlo de la mejor manera...me gustaria saber si tienes algunos archivos planos...con (modificar,editar,eliminar,conexion) ya listas pero lo que quiero es que este codigo tenga en cada linea su explicacion asi para ir viendo como en realidad el orden que se lleva en la programacion y como crear los contenedores..disculpa mi ignorancia pero me a dado por aprender programacion en java y los contenedores los considero muy necesarios...este es mi correo: soyleonardocordero@gmail.com

    ResponderEliminar