First it has been split into two classes, one whose instances each represent a whole form, and another whose instances represent individual components on a form
Second, it has been redesigned to permit the whole range of GridBagLayout constraints options to be used.
////////////////////////////////////////////////////////////////////////////////
// HelpIndex: (c) 1996 PHD Computer Consultants Ltd
//
// see http://www.phdcc.com/helpindex/
////////////////////////////////////////////////////////////////////////////////
// GridBagForm statically represents a whole form
// instances represents individual components on form
////////////////////////////////////////////////////////////////////////////////
// Version history
// 23-Sep-96 1.2.1 Split from HelpIndex.java file
// 2-Oct-96 1.2.4 Font parameter for component
// 3-Oct-96 1.2.5 statusText added
////////////////////////////////////////////////////////////////////////////////
import java.awt.*;
import java.util.Vector;
class GridBagForm
{
////////////////////////////////////////////////////////////////////////////////
// Class constants and variables
public static final short FORM_LABEL = 1;
public static final short FORM_TEXTFIELD= 2;
public static final short FORM_TEXTAREA = 3;
public static final short FORM_LIST = 4;
public static final short FORM_BUTTON = 5;
public static final short FORM_SCROLLBAR= 6;
public static final short FORM_CHOICE = 7;
private static boolean inited = false;
private static Container container = null;
private static GridBagLayout gridbag = null;
private static GridBagConstraints constraints= null;
private static Vector itemList = null;
private static int TabCurrent = -1;
private static int itemCount = 0;
private Component component;
////////////////////////////////////////////////////////////////////////////////
// Instance variables
private int id;
private short type;
private String name;
private short size;
private Color bgColour;
private Color fgColour;
private String statusText;
////////////////////////////////////////////////////////////////////////////////
private GridBagForm( int _id, short _type, String _name, short _size, Color _bgColour, Color _fgColour, String _statusText)
{
component = null;
id = _id;
type = _type;
name = _name;
size = _size;
bgColour = _bgColour;
fgColour = _fgColour;
statusText = _statusText;
}
////////////////////////////////////////////////////////////////////////////////
public static void init( Container _container, Font font, int anchor, double weightx, double weighty)
{
container = _container;
itemList = new Vector();
gridbag = new GridBagLayout();
constraints = new GridBagConstraints();
constraints.anchor = anchor;
constraints.weightx = weightx;
constraints.weighty = weighty;
if( font!=null)
container.setFont(font);
container.setLayout(gridbag);
TabCurrent = -1;
itemCount = 0;
inited = true;
}
////////////////////////////////////////////////////////////////////////////////
// to do: add other form components
public static Component addComponent( int id, short type, String name, int size, Color bgColour, Color fgColour, Font font, String statusText, int gridwidth, int fill)
{
if( !inited) return null;
GridBagForm newItem = new GridBagForm( id, type, name, (short)size, bgColour, fgColour, statusText);
if( newItem==null) return null;
switch( type)
{
case FORM_LABEL:
newItem.component = new Label( name);
break;
case FORM_TEXTFIELD:
newItem.component = new TextField(size);
break;
case FORM_LIST:
newItem.component = new List(Math.abs(size),(size<0));
break;
case FORM_BUTTON:
newItem.component = new Button(name);
break;
}
if( newItem.component==null) return null;
newItem.component.setBackground( bgColour);
newItem.component.setForeground( fgColour);
if( font!=null)
newItem.component.setFont(font);
constraints.gridwidth = gridwidth;
constraints.fill = fill;
gridbag.setConstraints( newItem.component, constraints);
container.add( newItem.component);
itemList.addElement( newItem);
itemCount++;
return newItem.component;
}
////////////////////////////////////////////////////////////////////////////////
public static int getIdFromComponent( Object component)
{
for( int i=0; i<itemCount; i++)
{
GridBagForm thisItem = (GridBagForm)itemList.elementAt(i);
if( component==thisItem.component)
return thisItem.id;
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////
public static Component getComponentFromId( int id)
{
for( int i=0; i<itemCount; i++)
{
GridBagForm thisItem = (GridBagForm)itemList.elementAt(i);
if( id==thisItem.id)
return thisItem.component;
}
return null;
}
////////////////////////////////////////////////////////////////////////////////
public static void start()
{
// browsers complain that neither TabCurrent nor itemCount can be accessed
// TabCurrent = itemCount-1;
Tab( true);
}
////////////////////////////////////////////////////////////////////////////////
public static void Tab( boolean onwards)
{
if( !inited || itemCount==0 ) return;
// look for next item for focus
for( int i=0; i<itemCount; i++)
{
if( onwards)
{
if( ++TabCurrent >= itemCount)
TabCurrent = 0;
}
else
{
if( --TabCurrent < 0)
TabCurrent = itemCount-1;
}
GridBagForm thisItem = (GridBagForm)itemList.elementAt(TabCurrent);
if( thisItem.type != FORM_LABEL)
{
thisItem.component.requestFocus();
break;
}
}
}
////////////////////////////////////////////////////////////////////////////////
public static String GotFocus( Object component)
{
if( !inited) return null;
// serach for the new focus
for( int i=0; i<itemCount; i++)
{
GridBagForm thisItem = (GridBagForm)itemList.elementAt(i);
if( component==thisItem.component)
{
TabCurrent = i;
return thisItem.statusText;
}
}
return null;
}
////////////////////////////////////////////////////////////////////////////////
public static String statusText()
{
GridBagForm thisItem = (GridBagForm)itemList.elementAt(TabCurrent);
return thisItem.statusText;
}
////////////////////////////////////////////////////////////////////////////////
// GridBagForm class end curly bracket
}
////////////////////////////////////////////////////////////////////////////////