Issue: Once the input fields are determined, they must be laid out on the screen (panel) in a way that makes sense to the user.  See my decision on the screen layout to see that I want the labels aligned right and the input component aligned left.

Discussion: How components are laid out on the screen is determined one basic way.  Your program must set the coordinates for each component on the panel, then set the panel size to accomodate all of your components.  Not only is this tedious and prone to error, but must account for the varying size of components based on factors such as Internationalization.  Thus is born the Layout Manager.   A Layout Manager uses information you provide, along with the components you provide, and lays them out according to your information.  It sounds simple, but it isn't.  Java has several "standard" layout managers of the LayoutManager and LayoutManager2 classes.

Discussion: I tried to accomplish the layout with the standard layout managers provided by Java, but couldn't find one that worked in all situations.  For example, if there is a sub-screen, like handicap, how do I get it to properly align with the other fields around it?  I even looked at other layouts found on the web.  No luck.  After a lot of work on this I came to the conclusion that I would position each component myself.  I had to account for the orientation (left to right, right to left, vertical or horizontal) of the user as well.  Once that was accomplished, I realized I was writing my own Layout Manager.

Discussion: In order to accomplish laying out my components, I needed to have a number of pieces of information:

Discussion: To get that information I had two choices.  One is to create an interface to that information, and create methods for each input field panel to provide it.  The other is to create an object which can provide this information and be included in the call to add() as provided in the LayoutManager2 class

Discussion:Thus in a left to right orientation, a sample edit field might look like:

              Birthdate    
Notice this has a help button, a label, an input component, and and alternate input component, which would be a button which when clicked (or touched) would bring up a calendar widget (dialog).  Note also, that the percent field in the list above has a trailing label.  This is not the only field with a trailing label.