net.sf.bix
Class Bix

java.lang.Object
  extended bynet.sf.bix.Bix
All Implemented Interfaces:
java.awt.LayoutManager, java.awt.LayoutManager2
Direct Known Subclasses:
MatrixBix

public class Bix
extends java.lang.Object
implements java.awt.LayoutManager, java.awt.LayoutManager2

Layout manager que acomoda componentes en forma horizontal, vertical, o matricial.

Un punto a tener en cuenta de Bix, es que no se trata de un LayoutManager convencional como los de Swing. Usted no debe agregar los componentes al panel padre (generalmente el panel que obtiene con JFrame.getContentPane()), si no que simplemente debe crear un único Bix, y luego ir agregando los componentes que desee a dicho Bix (o sub-Bixes). Finalmente el componente hijo (Component) será agregado al panel que usted especificó en la creación del primer Bix, pero no es su trabajo hacerlo explícitamente como ocurre con otros Layout Managers.

Aquí tiene un ejemplo típico de cómo hacer una pantalla de login utilizando bixes:

  Bix bix = new Bix(getContentPane(), Bix.VERTICAL);
  Bix matrix = bix.addMatrix(Bix.NONE, 2);
  matrix.add(userNameLabel);
  matrix.add(userName, Bix.FILL);
  matrix.add(passwordLabel);
  matrix.add(password, Bix.FILL);
  bix.add(new JSeparator());
  Bix row = bix.addBix(Bix.HORIZONTAL);
  row.addBix(Bix.FILL);
  Bix subrow = row.addBix(Bix.HORIZONTAL | Bix.EVEN);
  subrow.add(loginButton);
  subrow.add(cancelButton);
 
Lo que da como resultado una pantalla como esta:

La estructura interna de dicha pantalla puede visualizarse en la siguiente figura:

Un Bix puede ser horizontal, vertical o matricial. En cualquier caso, cada celda puede ser un componente (por ej. un JLabel), o un sub-bix (que a su vez puede ser horizontal, vertical o matricial). Cualquiera sea el caso, cada celda puede ser expansible o no, esto se debe especificar en las banderas de los métodos add(Component, int), addBix(int) o addMatrix(int, int).

Author:
David A. Capello

Field Summary
static int EVEN
          Para crear un Bix uniforme.
static int FILL
          Para que este Bix, o un componente se expanda debe especificar esta bandera al agregarlo.
static int HFILL
          Rellenar sólo la fila horizontalmente (cuando se está dentro de una matriz)
static int HORIZONTAL
          Para crear un Bix con orientación horizontal debe especificar esta bandera.
static int NONE
          Sin banderas.
static int VERTICAL
          Para crear un Bix con orientación vertical.
static int VFILL
          Rellenar sólo la columna verticalmente (cuando se está dentro de una matriz)
 
Constructor Summary
Bix(java.awt.Container container, int flags)
          Crea un nuevo Layout Manager Bix para el contenedor especificado en container y con las banderas especificadas en flags.
 
Method Summary
 void add(java.awt.Component component)
          Agrega una celda que contendrá el componente especificado (sin banderas).
 void add(java.awt.Component component, int flags)
          Agrega una celda con el componente y las banderas especificadas.
 Bix addBix(int flags)
          Agrega un nuevo sub-Bix con las banderas especificadas en flags.
 void addEmpty()
           
 void addLayoutComponent(java.awt.Component comp, java.lang.Object constraints)
           
 void addLayoutComponent(java.lang.String name, java.awt.Component comp)
           
 Bix addMatrix(int flags, int cols)
          Crea una celda que contendrá un nuevo Bix de forma matricial.
 int getBorder()
          Devuelve el tamaño del borde.
 int getChildSpacing()
          Devuelve el tamaño entre celdas.
 float getLayoutAlignmentX(java.awt.Container target)
           
 float getLayoutAlignmentY(java.awt.Container target)
           
 void invalidateLayout(java.awt.Container target)
           
 boolean isEven()
          Devuelve true si el Bix es uniforme.
 boolean isFill()
          Devuelve true en el caso que esta Bix utilice el tamaño libre de la Bix padre.
 boolean isFill(java.awt.Component comp)
          Devuelve true si el componente especificado tiene la propiedad de expansible (Bix.FILL) activada.
 boolean isHFill()
           
 boolean isHorizontal()
          Devuelve true si la orientación del Bix es horizontal.
 boolean isVertical()
          Devuelve true si la orientación del Bix es vertical.
 boolean isVFill()
           
 void layoutContainer(java.awt.Container parent)
          El método principal de todo Layout Manager que se encarga de acomodar los componentes del contenedor parent.
 java.awt.Dimension maximumLayoutSize(java.awt.Container target)
          Obtiene el tamaño máximo posible que puede tener el Bix.
 java.awt.Dimension minimumLayoutSize(java.awt.Container parent)
          Obtiene el tamaño mínimo posible que puede tener el Bix.
 java.awt.Dimension preferredLayoutSize(java.awt.Container parent)
          Obtiene el tamaño preferido del Bix.
 void removeLayoutComponent(java.awt.Component comp)
           
 void setBorder(int border)
          Cambia el tamaño del borde.
 void setChildSpacing(int childSpacing)
          Cambia el interespaciado de celdas.
 void setEven(boolean even)
          Convierte el Bix en uniforme o no dependiendo del parámetro especificado.
 void setFill(boolean fill)
          Convierte a este Bix en expansivo o no (cambiando el estado de la bandera Bix.FILL).
 void setFill(java.awt.Component comp, boolean fill)
          Convierte al componente (que es hijo de este Bix) en expansivo o no.
 void setHorizontal()
          Convierte el Bix a orientación horizontal.
 void setVertical()
          Convierte el Bix a orientación vertical.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

NONE

public static final int NONE
Sin banderas.

See Also:
Constant Field Values

HORIZONTAL

public static final int HORIZONTAL
Para crear un Bix con orientación horizontal debe especificar esta bandera. Todos los hijos se ubican uno al lado de otro.

See Also:
Constant Field Values

VERTICAL

public static final int VERTICAL
Para crear un Bix con orientación vertical. Todos los hijos se ubican un debajo del otro.

See Also:
Constant Field Values

EVEN

public static final int EVEN
Para crear un Bix uniforme. Esto significa, que todos los hijos tendrán una distribución de tamaño uniforme.

See Also:
Constant Field Values

HFILL

public static final int HFILL
Rellenar sólo la fila horizontalmente (cuando se está dentro de una matriz)

See Also:
Constant Field Values

VFILL

public static final int VFILL
Rellenar sólo la columna verticalmente (cuando se está dentro de una matriz)

See Also:
Constant Field Values

FILL

public static final int FILL
Para que este Bix, o un componente se expanda debe especificar esta bandera al agregarlo. Si hay espacio sobrante, que no es utilizado por ningún otro componente, ese espacio será asignado a todos los hijos que tengan esta bandera activada. En una matriz, toma espacio tanto vertical como horizontalmente. Las tablas deberían tener esta bandera activada.

See Also:
Constant Field Values
Constructor Detail

Bix

public Bix(java.awt.Container container,
           int flags)
Crea un nuevo Layout Manager Bix para el contenedor especificado en container y con las banderas especificadas en flags. Usted no tiene la necesidad de hacer un container.setLayout(bix) explícito, ya que este constructor lo hace por usted.

El tamaño del borde (getBorder) por defecto es de 4 píxeles para el Bix principal, y 0 píxeles para los sub-Bixes que se agregan mediante addBix. El espaciado entre componentes (getChildSpacing) es siempre de 4 píxeles por defecto.

Parameters:
container - Contenedor al cual setear el Layout Manager.
flags - banderas (propiedades) que debe poseer el Bix, puede ser una combinación de los siguientes valores:
See Also:
getBorder(), addBix(int), getChildSpacing()
Method Detail

addBix

public Bix addBix(int flags)
Agrega un nuevo sub-Bix con las banderas especificadas en flags.

Parameters:
flags - banderas (propiedades) que debe poseer el Bix, puede ser una combinación de los siguientes valores:
  • Bix.HORIZONTAL o Bix.VERTICAL,
  • Bix.EVEN,
  • Bix.FILL, Bix.HFILL, Bix.VFILL.
Returns:
El nuevo Bix creado y ya agregado al bix padre (el objeto this se convierte en el padre).

addMatrix

public Bix addMatrix(int flags,
                     int cols)
Crea una celda que contendrá un nuevo Bix de forma matricial. Sólo debe especificar la cantidad de columnas, ya que las filas se calculan automáticamente dependiendo de cuantos componentes agregue al MatrixBix.

Parameters:
cols - Cantidad de columnas.
Returns:
El nuevo Bix matricial
See Also:
MatrixBix

addEmpty

public void addEmpty()

add

public void add(java.awt.Component component)
Agrega una celda que contendrá el componente especificado (sin banderas).

Parameters:
component - El componente a agregar en la nueva celda

add

public void add(java.awt.Component component,
                int flags)
Agrega una celda con el componente y las banderas especificadas.

Parameters:
component - componente a agregar en la nueva celda
flags - propiedades de la nueva celda

isEven

public boolean isEven()
Devuelve true si el Bix es uniforme. Un Bix uniforme divide el tamaño disponible por la cantidad de componentes hijos, dándole a cada uno una porción igual. En otras palabras, todos los componentes hijos tendrán el mismo tamaño (salvo el último, que puede tener unos píxeles más por el resto de la división).

No tiene sentido agregar componentes con la propiedad Bix.FILL a los Bix uniforme, ya que todos los componentes se expanderán al mismo tiempo y con una misma proporción.

Returns:
true si el Bix es uniforme.

isHorizontal

public boolean isHorizontal()
Devuelve true si la orientación del Bix es horizontal. Esto significa, que el Bix acomoda los componentes hijos uno al lado del otro de izquierda a derecha.

Returns:
true si el Bix es horizontal (Bix.HORIZONTAL)

isVertical

public boolean isVertical()
Devuelve true si la orientación del Bix es vertical. Esto significa, que el Bix acomoda los componentes hijos uno debajo de otro.

Returns:
true si el Bix es vertical (Bix.VERTICAL)

isFill

public boolean isFill()
Devuelve true en el caso que esta Bix utilice el tamaño libre de la Bix padre.

Returns:
true si esta Bix se expande en la Bix padre, en caso contrario false.

isVFill

public boolean isVFill()

isHFill

public boolean isHFill()

isFill

public boolean isFill(java.awt.Component comp)
Devuelve true si el componente especificado tiene la propiedad de expansible (Bix.FILL) activada. El componente debe pertenecer al Bix.

Parameters:
comp -
Returns:
true si el componente en esta Bix se expande, en caso contrario false.

setFill

public void setFill(boolean fill)
Convierte a este Bix en expansivo o no (cambiando el estado de la bandera Bix.FILL). Este método es útil para sub-Bixes, el Bix padre siempre utiliza todo el área del componente contenedor.

Parameters:
fill -

setFill

public void setFill(java.awt.Component comp,
                    boolean fill)
Convierte al componente (que es hijo de este Bix) en expansivo o no.

Parameters:
comp - El componente a cambiarle su estado expansivo.
fill - true si quiere que el componente se expanda, o false en caso contrario.

setHorizontal

public void setHorizontal()
Convierte el Bix a orientación horizontal.


setVertical

public void setVertical()
Convierte el Bix a orientación vertical.


setEven

public void setEven(boolean even)
Convierte el Bix en uniforme o no dependiendo del parámetro especificado.

Parameters:
even - true si desea que el Bix sea uniforme, false en caso contrario.

getBorder

public int getBorder()
Devuelve el tamaño del borde. Por defecto es 4 píxeles para el primer Bix creado, y de 0 píxeles para los sub-bixes.

Returns:
El tamaño del borde en píxeles.
See Also:
setBorder(int)

setBorder

public void setBorder(int border)
Cambia el tamaño del borde.

Parameters:
border -
See Also:
getBorder()

getChildSpacing

public int getChildSpacing()
Devuelve el tamaño entre celdas. Por defecto es de 4 píxeles.

Returns:
Cantidad de píxeles entre celdas.
See Also:
setChildSpacing(int)

setChildSpacing

public void setChildSpacing(int childSpacing)
Cambia el interespaciado de celdas.

Parameters:
childSpacing -
See Also:
getChildSpacing()

addLayoutComponent

public void addLayoutComponent(java.lang.String name,
                               java.awt.Component comp)
Specified by:
addLayoutComponent in interface java.awt.LayoutManager

addLayoutComponent

public void addLayoutComponent(java.awt.Component comp,
                               java.lang.Object constraints)
Specified by:
addLayoutComponent in interface java.awt.LayoutManager2

removeLayoutComponent

public void removeLayoutComponent(java.awt.Component comp)
Specified by:
removeLayoutComponent in interface java.awt.LayoutManager

minimumLayoutSize

public java.awt.Dimension minimumLayoutSize(java.awt.Container parent)
Obtiene el tamaño mínimo posible que puede tener el Bix.

Specified by:
minimumLayoutSize in interface java.awt.LayoutManager

maximumLayoutSize

public java.awt.Dimension maximumLayoutSize(java.awt.Container target)
Obtiene el tamaño máximo posible que puede tener el Bix.

Specified by:
maximumLayoutSize in interface java.awt.LayoutManager2

preferredLayoutSize

public java.awt.Dimension preferredLayoutSize(java.awt.Container parent)
Obtiene el tamaño preferido del Bix.

Specified by:
preferredLayoutSize in interface java.awt.LayoutManager

layoutContainer

public void layoutContainer(java.awt.Container parent)
El método principal de todo Layout Manager que se encarga de acomodar los componentes del contenedor parent.

Specified by:
layoutContainer in interface java.awt.LayoutManager

getLayoutAlignmentX

public float getLayoutAlignmentX(java.awt.Container target)
Specified by:
getLayoutAlignmentX in interface java.awt.LayoutManager2

getLayoutAlignmentY

public float getLayoutAlignmentY(java.awt.Container target)
Specified by:
getLayoutAlignmentY in interface java.awt.LayoutManager2

invalidateLayout

public void invalidateLayout(java.awt.Container target)
Specified by:
invalidateLayout in interface java.awt.LayoutManager2