com.gargoylesoftware.base.gui
Class TableLayout

java.lang.Object
  extended bycom.gargoylesoftware.base.gui.TableLayout
All Implemented Interfaces:
LayoutManager, LayoutManager2, Serializable, SwingConstants

public class TableLayout
extends Object
implements LayoutManager2, SwingConstants, Serializable

The TableLayout lays out items based on a table of rows and columns.

If you are doing simple layout, you can specify constraints as strings of the format "row,column". If you want the component to stretch over multiple rows/columns then you can specify the constraint as "row+rowspan,column+columnspan" as shown in the sample below.

 final TableLayout layout = new TableLayout();
 final JPanel panel = new JPanel(layout);

 panel.add( new JLabel("squirrel"), "1,1" );
 panel.add( new JLabel("raccoon"), "1,2" );
 panel.add( new JLabel("bluejay"), "2,1" );
 panel.add( new JLabel("goldfish"), "2,2" );
 panel.add( new JLabel("marshhawk"), "3,1+3" );
 
If you want more flexibility over the layout then this, use a TableLayoutConstraints object instead of a string. Here is a more complicated sample that uses TableLayoutConstraints to customize the layout a bit more. Note the use of TableLayoutDebuggingPanel - this will draw lines on layout boundaries to help debug layout problems.
 final TableLayout layout = new TableLayout();
 final JPanel panel = new TableLayoutDebuggingPanel(layout);

 TableLayoutConstraints constraints;

 layout.setRowExpandable(1, true);

 constraints = new TableLayoutConstraints(1,1);
 constraints.setVerticalStretch(true);
 panel.add( new JButton("squirrel"), constraints );

 constraints = new TableLayoutConstraints(1,2);
 constraints.setVerticalAlignment(TableLayout.TOP);
 panel.add( new JButton("raccoon"), constraints );

 panel.add( new JButton("bluejay"), "2,1" );
 panel.add( new JButton("goldfish"), "2,2" );
 panel.add( new JButton("marshhawk"), "3,1+3" );
 
Debugging tip: Most layout problems become obvious if you use a TableLayoutDebuggingPanel to see where the layout boundaries are. In those rare cases where this doesn't give you enough information, try calling setTraceChannel(TraceChannel) with a non-null TraceChannel such as Trace.out or Trace.err. This will dump quite a bit of diagnostic information.
 layout.setTraceChannel(Trace.out)
 

Version:
$Revision: 1.6 $
Author:
Mike Bowler
See Also:
Serialized Form

Field Summary
 
Fields inherited from interface javax.swing.SwingConstants
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST
 
Constructor Summary
TableLayout()
          Create a new TableLayout.
 
Method Summary
 void addLayoutComponent(Component comp, Object constraints)
          Add the specified component to the layout with the specified constraints.
 void addLayoutComponent(String name, Component comp)
          Add the specified component to the layout with the specified constraints.
protected  void assertNotNull(String fieldName, Object fieldValue)
          Verify that the specified value is not null.
 void drawOutlines(Graphics graphics)
          A debugging method that draws lines on the parent component to show where the table cell boundaries are.
 int getHorizontalAlignment()
          Return the horizontal alignment.
 boolean getIgnoreInvisibleComponents()
          Get whether or not we should ignore an components that are not visible.
 float getLayoutAlignmentX(Container target)
          I don't really understand what this method is supposed to return so I always return 0F.
 float getLayoutAlignmentY(Container target)
          I don't really understand what this method is supposed to return so I always return 0F.
 TraceChannel getTraceChannel()
          Return the trace channel.
 int getVerticalAlignment()
          Return the vertical alignment.
 void invalidateLayout(Container target)
          Invalidate the layout and throw away and temporary calculations.
 boolean isColumnExpandable(int index)
          Return true if this column can be expanded beyond its preferred size.
 boolean isRowExpandable(int index)
          Return true if this row can be expanded beyond its preferred size.
 void layoutContainer(Container parent)
          Layout all the components in this container.
 Dimension maximumLayoutSize(Container target)
          Return the maximum layout size.
 Dimension minimumLayoutSize(Container parent)
          Get the minimum size of this layout.
 Dimension preferredLayoutSize(Container parent)
          Return the preferred layout size.
 void removeLayoutComponent(Component comp)
          Remove the specified component from the layout.
 void setColumnExpandable(int index, boolean isExpandable)
          Set whether this column can be expanded beyond its preferred size.
 void setHorizontalAlignment(int alignment)
          Set the vertical alignment.
 void setIgnoreInvisibleComponents(boolean ignore)
          Set whether or not we should ignore an components that are not visible.
 void setMinimumColumnWidth(int index, int size)
          Set the minimum column width for a specific column.
 void setMinimumRowHeight(int index, int size)
          Set the minimum row height for a specific row.
 void setRowExpandable(int index, boolean isExpandable)
          Set whether this row can be expanded beyond its preferred size.
 void setTraceChannel(TraceChannel channel)
          Set the trace channel used for printing diagnostic information.
 void setVerticalAlignment(int alignment)
          Set the vertical alignment.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

TableLayout

public TableLayout()
Create a new TableLayout.

Method Detail

setVerticalAlignment

public void setVerticalAlignment(int alignment)
Set the vertical alignment. Legal values are:

Parameters:
alignment - The new vertical alignment.

setHorizontalAlignment

public void setHorizontalAlignment(int alignment)
Set the vertical alignment. Legal values are:

Parameters:
alignment - The new horizontal alignment.

setMinimumRowHeight

public void setMinimumRowHeight(int index,
                                int size)
Set the minimum row height for a specific row.

Parameters:
index - The row that we are setting the height for.
size - The new minimum height.

setMinimumColumnWidth

public void setMinimumColumnWidth(int index,
                                  int size)
Set the minimum column width for a specific column.

Parameters:
index - The column that we are setting the width for.
size - The new width.

setRowExpandable

public void setRowExpandable(int index,
                             boolean isExpandable)
Set whether this row can be expanded beyond its preferred size.

Parameters:
index - The row index.
isExpandable - true if the row is to be expandable.

setColumnExpandable

public void setColumnExpandable(int index,
                                boolean isExpandable)
Set whether this column can be expanded beyond its preferred size.

Parameters:
index - The column index.
isExpandable - true if the column is to be expandable.

setTraceChannel

public void setTraceChannel(TraceChannel channel)
Set the trace channel used for printing diagnostic information. If the channel is null then no tracing will be done.

Parameters:
channel - The new trace channel.

setIgnoreInvisibleComponents

public void setIgnoreInvisibleComponents(boolean ignore)
Set whether or not we should ignore an components that are not visible.

Parameters:
ignore - True if we should ignore them.

getLayoutAlignmentX

public float getLayoutAlignmentX(Container target)
I don't really understand what this method is supposed to return so I always return 0F. If you can explain this one to me then send me an email at mbowler@GargoyleSoftware.com and I'll fix this method up appropriately.

Specified by:
getLayoutAlignmentX in interface LayoutManager2
Parameters:
target - The container that this layout is managing.
Returns:
Zero.

getLayoutAlignmentY

public float getLayoutAlignmentY(Container target)
I don't really understand what this method is supposed to return so I always return 0F. If you can explain this one to me then send me an email at mbowler@GargoyleSoftware.com and I'll fix this method up appropriately.

Specified by:
getLayoutAlignmentY in interface LayoutManager2
Parameters:
target - The container that this layout is managing.
Returns:
Zero.

getVerticalAlignment

public int getVerticalAlignment()
Return the vertical alignment.

Returns:
The vertical alignment.
See Also:
setVerticalAlignment(int)

getHorizontalAlignment

public int getHorizontalAlignment()
Return the horizontal alignment.

Returns:
The horizontal alignment.

isRowExpandable

public boolean isRowExpandable(int index)
Return true if this row can be expanded beyond its preferred size. The default is false.

Parameters:
index - The row index
Returns:
true if the specified row is expandable.

isColumnExpandable

public boolean isColumnExpandable(int index)
Return true if this column can be expanded beyond its preferred size. The default is false.

Parameters:
index - The column.
Returns:
true if the column is expandable.

getTraceChannel

public TraceChannel getTraceChannel()
Return the trace channel.

Returns:
The trace channel or null if one wasn't set.

getIgnoreInvisibleComponents

public boolean getIgnoreInvisibleComponents()
Get whether or not we should ignore an components that are not visible.

Returns:
True if we should ignore them.

addLayoutComponent

public void addLayoutComponent(String name,
                               Component comp)
                        throws UnsupportedOperationException
Add the specified component to the layout with the specified constraints. This method should never be called as Container.addImpl() should call addLayoutComponent(Component,Object) instead. Not implemented.

Specified by:
addLayoutComponent in interface LayoutManager
Parameters:
name - The constraints string.
comp - the component that is being added.
Throws:
UnsupportedOperationException - If called.

addLayoutComponent

public void addLayoutComponent(Component comp,
                               Object constraints)
Add the specified component to the layout with the specified constraints. Throw an IllegalArgumentException if the same component is specified twice. The constraints object can be either an instance of TableLayoutConstraints or a String. If it is a string then an instance of TableLayoutConstraints will be created with the method TableLayoutConstraints.makeConstraints(String).

Specified by:
addLayoutComponent in interface LayoutManager2
Parameters:
comp - The component that is being added.
constraints - The constraints object.
See Also:
TableLayoutConstraints.makeConstraints(String)

removeLayoutComponent

public void removeLayoutComponent(Component comp)
Remove the specified component from the layout.

Specified by:
removeLayoutComponent in interface LayoutManager
Parameters:
comp - The component to remove.

minimumLayoutSize

public Dimension minimumLayoutSize(Container parent)
Get the minimum size of this layout.

Specified by:
minimumLayoutSize in interface LayoutManager
Parameters:
parent - The container that this layout is managing.
Returns:
The minimum size required for this layout.

preferredLayoutSize

public Dimension preferredLayoutSize(Container parent)
Return the preferred layout size.

Specified by:
preferredLayoutSize in interface LayoutManager
Parameters:
parent - The container that this layout is managing.
Returns:
The preferred layout size.

layoutContainer

public void layoutContainer(Container parent)
Layout all the components in this container.

Specified by:
layoutContainer in interface LayoutManager
Parameters:
parent - The container that this layout is managing.

maximumLayoutSize

public Dimension maximumLayoutSize(Container target)
Return the maximum layout size.

Specified by:
maximumLayoutSize in interface LayoutManager2
Parameters:
target - The container that this layout is managing.
Returns:
The maximum layout size.

invalidateLayout

public void invalidateLayout(Container target)
Invalidate the layout and throw away and temporary calculations.

Specified by:
invalidateLayout in interface LayoutManager2
Parameters:
target - The container that this layout is managing.

drawOutlines

public void drawOutlines(Graphics graphics)
A debugging method that draws lines on the parent component to show where the table cell boundaries are. The lines will be drawn in the current colour.

Parameters:
graphics - The graphics object.
See Also:
TableLayoutDebuggingPanel

assertNotNull

protected final void assertNotNull(String fieldName,
                                   Object fieldValue)
                            throws DetailedNullPointerException
Verify that the specified value is not null. If it is then throw an exception

Parameters:
fieldName - The name of the field to check
fieldValue - The value of the field to check
Throws:
DetailedNullPointerException - If fieldValue is null


Copyright © 1998-2005 Gargoyle Software Inc.. All Rights Reserved.