AbsoluteLayout
allows placing components in arbitrary
positions in the layout area. The positions are specified in the
addComponent()
method with horizontal and vertical
coordinates relative to an edge of the layout area. The positions can include
a third depth dimension, the z-index, which specifies
which components are displayed in front and which behind other components.
The positions are specified by a CSS absolute position string, using the
left
, right
, top
,
bottom
, and z-index
properties known
from CSS. In the following example, we have a 300 by 150 pixels large layout
and position a text field 50 pixels from both the left and the top edge:
// A 400x250 pixels size layout AbsoluteLayout layout = new AbsoluteLayout(); layout.setWidth("400px"); layout.setHeight("250px"); // A component with coordinates for its top-left corner TextField text = new TextField("Somewhere someplace"); layout.addComponent(text, "left: 50px; top: 50px;");
The left
and top
specify the distance
from the left and top edge, respectively. The right
and
bottom
specify the distances from the right and top edge.
// At the top-left corner Button button = new Button( "left: 0px; top: 0px;"); layout.addComponent(button, "left: 0px; top: 0px;"); // At the bottom-right corner Button buttCorner = new Button( "right: 0px; bottom: 0px;"); layout.addComponent(buttCorner, "right: 0px; bottom: 0px;"); // Relative to the bottom-right corner Button buttBrRelative = new Button( "right: 50px; bottom: 50px;"); layout.addComponent(buttBrRelative, "right: 50px; bottom: 50px;"); // On the bottom, relative to the left side Button buttBottom = new Button( "left: 50px; bottom: 0px;"); layout.addComponent(buttBottom, "left: 50px; bottom: 0px;"); // On the right side, up from the bottom Button buttRight = new Button( "right: 0px; bottom: 100px;"); layout.addComponent(buttRight, "right: 0px; bottom: 100px;");
The result of the above code examples is shown in Figure 6.15, “Components Positioned Relative to Various Edges”.
In the above examples, we had components of undefined size and specified the
positions of components by a single pair of coordinates. The other possibility
is to specify an area and let the component fill the area by specifying a
proportinal size for the component, such as
"100%
". Normally, you use
setSizeFull()
to take the entire area given by the
layout.
// Specify an area that a component should fill Panel panel = new Panel("A Panel filling an area"); panel.setSizeFull(); // Fill the entire given area layout.addComponent(panel, "left: 25px; right: 50px; "+ "top: 100px; bottom: 50px;");
The result is shown in Figure 6.16, “Component Filling an Area Specified by Coordinates”
You can also use proportional coordinates to specify the coordinates:
// A panel that takes 30% to 90% horizontally and // 20% to 80% vertically Panel panel = new Panel("A Panel"); panel.setSizeFull(); // Fill the specified area layout.addComponent(panel, "left: 30%; right: 10%;" + "top: 20%; bottom: 20%;");
The result is shown in Figure 6.17, “Specifying an Area by Proportional Coordinates”
Drag and drop is very useful for moving the components contained in an
AbsoluteLayout
. Check out the example in Section 12.12.6, “Dropping on a Component”.