org.greenstone.gs3client
Class GraphPaperLayout

java.lang.Object
  extended by org.greenstone.gs3client.GraphPaperLayout
All Implemented Interfaces:
java.awt.LayoutManager, java.awt.LayoutManager2

public class GraphPaperLayout
extends java.lang.Object
implements java.awt.LayoutManager2

The GraphPaperLayout class is a layout manager that lays out a container's components in a rectangular grid, similar to GridLayout. Unlike GridLayout, however, components can take up multiple rows and/or columns. The layout manager acts as a sheet of graph paper. When a component is added to the layout manager, the location and relative size of the component are simply supplied by the constraints as a Rectangle.

 import java.awt.*;
 import java.applet.Applet;
 public class ButtonGrid extends Applet {
     public void init() {
         setLayout(new GraphPaperLayout(new Dimension(5,5)));
         // Add a 1x1 Rect at (0,0)
         add(new Button("1"), new Rectangle(0,0,1,1));
         // Add a 2x1 Rect at (2,0)
         add(new Button("2"), new Rectangle(2,0,2,1));
         // Add a 1x2 Rect at (1,1)
         add(new Button("3"), new Rectangle(1,1,1,2));
         // Add a 2x2 Rect at (3,2)
         add(new Button("4"), new Rectangle(3,2,2,2));
         // Add a 1x1 Rect at (0,4)
         add(new Button("5"), new Rectangle(0,4,1,1));
         // Add a 1x2 Rect at (2,3)
         add(new Button("6"), new Rectangle(2,3,1,2));
     }
 }
 

Author:
Michael Martak

Field Summary
(package private)  java.util.Hashtable compTable
           
(package private)  java.awt.Dimension gridSize
           
(package private)  int hgap
           
(package private)  int vgap
           
 
Constructor Summary
GraphPaperLayout()
          Creates a graph paper layout with a default of a 1 x 1 graph, with no vertical or horizontal padding.
GraphPaperLayout(java.awt.Dimension gridSize)
          Creates a graph paper layout with the given grid size, with no vertical or horizontal padding.
GraphPaperLayout(java.awt.Dimension gridSize, int hgap, int vgap)
          Creates a graph paper layout with the given grid size and padding.
 
Method Summary
 void addLayoutComponent(java.awt.Component comp, java.lang.Object constraints)
          Adds the specified component to the layout, using the specified constraint object.
 void addLayoutComponent(java.lang.String name, java.awt.Component comp)
          Adds the specified component with the specified name to the layout.
 java.awt.Dimension getGridSize()
           
protected  java.awt.Dimension getLargestCellSize(java.awt.Container parent, boolean isPreferred)
          Algorithm for calculating the largest minimum or preferred cell size.
 float getLayoutAlignmentX(java.awt.Container target)
          Returns the alignment along the x axis.
 float getLayoutAlignmentY(java.awt.Container target)
          Returns the alignment along the y axis.
protected  java.awt.Dimension getLayoutSize(java.awt.Container parent, boolean isPreferred)
          Algorithm for calculating layout size (minimum or preferred).
 void invalidateLayout(java.awt.Container target)
          Invalidates the layout, indicating that if the layout manager has cached information it should be discarded.
 void layoutContainer(java.awt.Container parent)
          Lays out the container in the specified container.
 java.awt.Dimension maximumLayoutSize(java.awt.Container target)
          Returns the maximum size of this component.
 java.awt.Dimension minimumLayoutSize(java.awt.Container parent)
          Calculates the minimum size dimensions for the specified panel given the components in the specified parent container.
 java.awt.Dimension preferredLayoutSize(java.awt.Container parent)
          Calculates the preferred size dimensions for the specified panel given the components in the specified parent container.
 void removeLayoutComponent(java.awt.Component comp)
          Removes the specified component from the layout.
 void setConstraints(java.awt.Component comp, java.awt.Rectangle constraints)
           
 void setGridSize(java.awt.Dimension d)
          Set the size of the graph paper in logical units (n x m)
 void setGridSize(int width, int height)
          Set the size of the graph paper in logical units (n x m)
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

hgap

int hgap

vgap

int vgap

gridSize

java.awt.Dimension gridSize

compTable

java.util.Hashtable compTable
Constructor Detail

GraphPaperLayout

public GraphPaperLayout()
Creates a graph paper layout with a default of a 1 x 1 graph, with no vertical or horizontal padding.


GraphPaperLayout

public GraphPaperLayout(java.awt.Dimension gridSize)
Creates a graph paper layout with the given grid size, with no vertical or horizontal padding.


GraphPaperLayout

public GraphPaperLayout(java.awt.Dimension gridSize,
                        int hgap,
                        int vgap)
Creates a graph paper layout with the given grid size and padding.

Parameters:
gridSize - size of the graph paper in logical units (n x m)
hgap - horizontal padding
vgap - vertical padding
Method Detail

getGridSize

public java.awt.Dimension getGridSize()
Returns:
the size of the graph paper in logical units (n x m)

setGridSize

public void setGridSize(java.awt.Dimension d)
Set the size of the graph paper in logical units (n x m)


setGridSize

public void setGridSize(int width,
                        int height)
Set the size of the graph paper in logical units (n x m)


setConstraints

public void setConstraints(java.awt.Component comp,
                           java.awt.Rectangle constraints)

addLayoutComponent

public void addLayoutComponent(java.lang.String name,
                               java.awt.Component comp)
Adds the specified component with the specified name to the layout. This does nothing in GraphPaperLayout, since constraints are required.

Specified by:
addLayoutComponent in interface java.awt.LayoutManager

removeLayoutComponent

public void removeLayoutComponent(java.awt.Component comp)
Removes the specified component from the layout.

Specified by:
removeLayoutComponent in interface java.awt.LayoutManager
Parameters:
comp - the component to be removed

preferredLayoutSize

public java.awt.Dimension preferredLayoutSize(java.awt.Container parent)
Calculates the preferred size dimensions for the specified panel given the components in the specified parent container.

Specified by:
preferredLayoutSize in interface java.awt.LayoutManager
Parameters:
parent - the component to be laid out
See Also:
minimumLayoutSize(java.awt.Container)

minimumLayoutSize

public java.awt.Dimension minimumLayoutSize(java.awt.Container parent)
Calculates the minimum size dimensions for the specified panel given the components in the specified parent container.

Specified by:
minimumLayoutSize in interface java.awt.LayoutManager
Parameters:
parent - the component to be laid out
See Also:
preferredLayoutSize(java.awt.Container)

getLayoutSize

protected java.awt.Dimension getLayoutSize(java.awt.Container parent,
                                           boolean isPreferred)
Algorithm for calculating layout size (minimum or preferred).

The width of a graph paper layout is the largest cell width (calculated in getLargestCellSize() times the number of columns, plus the horizontal padding times the number of columns plus one, plus the left and right insets of the target container.

The height of a graph paper layout is the largest cell height (calculated in getLargestCellSize() times the number of rows, plus the vertical padding times the number of rows plus one, plus the top and bottom insets of the target container.

Parameters:
parent - the container in which to do the layout.
isPreferred - true for calculating preferred size, false for calculating minimum size.
Returns:
the dimensions to lay out the subcomponents of the specified container.
See Also:
getLargestCellSize(java.awt.Container, boolean)

getLargestCellSize

protected java.awt.Dimension getLargestCellSize(java.awt.Container parent,
                                                boolean isPreferred)
Algorithm for calculating the largest minimum or preferred cell size.

Largest cell size is calculated by getting the applicable size of each component and keeping the maximum value, dividing the component's width by the number of columns it is specified to occupy and dividing the component's height by the number of rows it is specified to occupy.

Parameters:
parent - the container in which to do the layout.
isPreferred - true for calculating preferred size, false for calculating minimum size.
Returns:
the largest cell size required.

layoutContainer

public void layoutContainer(java.awt.Container parent)
Lays out the container in the specified container.

Specified by:
layoutContainer in interface java.awt.LayoutManager
Parameters:
parent - the component which needs to be laid out

addLayoutComponent

public void addLayoutComponent(java.awt.Component comp,
                               java.lang.Object constraints)
Adds the specified component to the layout, using the specified constraint object.

Specified by:
addLayoutComponent in interface java.awt.LayoutManager2
Parameters:
comp - the component to be added
constraints - where/how the component is added to the layout.

maximumLayoutSize

public java.awt.Dimension maximumLayoutSize(java.awt.Container target)
Returns the maximum size of this component.

Specified by:
maximumLayoutSize in interface java.awt.LayoutManager2
See Also:
Component.getMinimumSize(), Component.getPreferredSize(), LayoutManager

getLayoutAlignmentX

public float getLayoutAlignmentX(java.awt.Container target)
Returns the alignment along the x axis. This specifies how the component would like to be aligned relative to other components. The value should be a number between 0 and 1 where 0 represents alignment along the origin, 1 is aligned the furthest away from the origin, 0.5 is centered, etc.

Specified by:
getLayoutAlignmentX in interface java.awt.LayoutManager2

getLayoutAlignmentY

public float getLayoutAlignmentY(java.awt.Container target)
Returns the alignment along the y axis. This specifies how the component would like to be aligned relative to other components. The value should be a number between 0 and 1 where 0 represents alignment along the origin, 1 is aligned the furthest away from the origin, 0.5 is centered, etc.

Specified by:
getLayoutAlignmentY in interface java.awt.LayoutManager2

invalidateLayout

public void invalidateLayout(java.awt.Container target)
Invalidates the layout, indicating that if the layout manager has cached information it should be discarded.

Specified by:
invalidateLayout in interface java.awt.LayoutManager2