public class BorderLayoutExample extends LayoutContainer { public BorderLayoutExample() { setLayout(new BorderLayout()); ContentPanel west = new ContentPanel(); ContentPanel center = new ContentPanel(); BorderLayoutData westData = new BorderLayoutData(LayoutRegion.WEST, 200); westData.setSplit(true); westData.setCollapsible(true); westData.setMargins(new Margins(5)); BorderLayoutData centerData = new BorderLayoutData(LayoutRegion.CENTER); centerData.setMargins(new Margins(5, 0, 5, 0)); add(west, westData); add(center, centerData); } }
In addition, BorderLayout
supports the relative positioning constants, PAGE_START
, PAGE_END
, LINE_START
, and LINE_END
. In a container whose ComponentOrientation
is set to ComponentOrientation.LEFT_TO_RIGHT
, these constants map to NORTH
, SOUTH
, WEST
, and EAST
, respectively.
For compatibility with previous releases, BorderLayout
also includes the relative positioning constants BEFORE_FIRST_LINE
, AFTER_LAST_LINE
, BEFORE_LINE_BEGINS
and AFTER_LINE_ENDS
. These are equivalent to PAGE_START
, PAGE_END
, LINE_START
and LINE_END
respectively. For consistency with the relative positioning constants used by other components, the latter constants are preferred.
Mixing both absolute and relative positioning constants can lead to unpredicable results. If you use both types, the relative constants will take precedence. For example, if you add components using both the NORTH
and PAGE_START
constants in a container whose orientation is LEFT_TO_RIGHT
, only the PAGE_START
will be layed out.
NOTE: Currently (in the Java 2 platform v1.2), BorderLayout
does not support vertical orientations. The isVertical
setting on the container's ComponentOrientation
is not respected.
The components are laid out according to their preferred sizes and the constraints of the container's size. The NORTH
and SOUTH
components may be stretched horizontally; the EAST
and WEST
components may be stretched vertically; the CENTER
component may stretch both horizontally and vertically to fill any space left over.
Here is an example of five buttons in an applet laid out using the BorderLayout
layout manager:
The code for this applet is as follows:
import java.awt.*; import java.applet.Applet; public class buttonDir extends Applet { public void init() { setLayout(new BorderLayout()); add(new Button("North"), BorderLayout.NORTH); add(new Button("South"), BorderLayout.SOUTH); add(new Button("East"), BorderLayout.EAST); add(new Button("West"), BorderLayout.WEST); add(new Button("Center"), BorderLayout.CENTER); } }
@version 1.60, 04/07/06 @author Arthur van Hoff @see java.awt.Container#add(String,Component) @see java.awt.ComponentOrientation @since JDK1.0
LayoutPanel panel = new LayoutPanel(new BorderLayout()); panel.add(new Button("Button 1"), new BorderLayoutData(BorderLayoutRegion.SOUTH));
As a convenience, {@code BorderLayout} interprets the absence of a{@link Region} specification the same as the {@link Region#CENTER}:
LayoutPanel panel = new LayoutPanel(new BorderLayout()); panel.add(new Button("Button 1"), new BorderLayoutData(true));or
LayoutPanel panel = new LayoutPanel(new BorderLayout()); panel.add(new Button("Button 1"));
The components are laid out according to their preferred sizes or the width and height specified by a {@link BorderLayoutData} object. The{@link Region#NORTH} and {@link Region#SOUTH} child widgets are stretchedhorizontally; the {@link Region#EAST} and {@link Region#WEST} child widgetsare stretched vertically; the {@link Region#CENTER} child widget will bestretched both horizontally and vertically to fill any space left over.
Here is an example of five buttons laid out using the {@code BorderLayout}layout manager. The {@link LayoutPanel} is added decorated to a{@link Viewport} so that it fills all browser's content area:
public void onModuleLoad() { Viewport viewport = new Viewport(); LayoutPanel panel = new LayoutPanel(new BorderLayout()); panel.setPadding(10); panel.setWidgetSpacing(5); panel.add(new Button("Button 1"), new BorderLayoutData(Region.NORTH)); panel.add(new Button("Button 2"), new BorderLayoutData(Region.SOUTH)); panel.add(new Button("Button 3"), new BorderLayoutData(Region.WEST)); panel.add(new Button("Button 4"), new BorderLayoutData(Region.EAST)); panel.add(new Button("Button 5")); viewport.add(panel, true); RootPanel.get().add(viewport); } |
In the next example the height of Button 1 is set to 50 pixels, the height of Button 2 is a ratio (30% of the height of {@link LayoutPanel LayoutPanel's} client area except paddings), the width ofButton 3 is set to 200 pixels but may be changed by the user, by dragging a split bar, to a value in the range [10, 300], and the width of Button 4 is set to -1 which means the calculated preferred width for that child. Button 5 is placed in a {@code com.google.gwt.user.client.ui.DecoratorPanel}.
public void onModuleLoad() { Viewport viewport = new Viewport(); LayoutPanel panel = new LayoutPanel(new BorderLayout()); panel.setPadding(10); panel.setWidgetSpacing(5); panel.add(new Button("Button 1"), new BorderLayoutData(Region.NORTH, 50)); panel.add(new Button("Button 2"), new BorderLayoutData(Region.SOUTH, 0.3)); panel.add(new Button("Button 3"), new BorderLayoutData(Region.WEST, 200, 10, 300)); panel.add(new Button("Button 4"), new BorderLayoutData(Region.EAST, -1)); panel.add(new Button("Button 5"), new BorderLayoutData(true)); viewport.add(panel, true); RootPanel.get().add(viewport); } |
In the next example the regions {@link Region#NORTH}, {@link Region#SOUTH}, {@link Region#EAST} and {@link Region#WEST} are set to a collapsed state:
public void onModuleLoad() { Viewport viewport = new Viewport(); final LayoutPanel panel = new LayoutPanel(new BorderLayout()); panel.setPadding(10); panel.setWidgetSpacing(5); ClickListener clickListener = new ClickListener() { public void onClick(Widget sender) { panel.setCollapsed(sender, !panel.isCollapsed(sender)); panel.layout(); } }; Button button1 = new Button("Button 1", clickListener); Button button2 = new Button("Button 2", clickListener); Button button3 = new Button("Button 3", clickListener); Button button4 = new Button("Button 4", clickListener); panel.add(button1, new BorderLayoutData(Region.NORTH)); panel.add(button2, new BorderLayoutData(Region.SOUTH)); panel.add(button3, new BorderLayoutData(Region.WEST)); panel.add(button4, new BorderLayoutData(Region.EAST)); panel.add(new Button("Button 5"), new BorderLayoutData(true)); panel.setCollapsed(button1, true); panel.setCollapsed(button2, true); panel.setCollapsed(button3, true); panel.setCollapsed(button4, true); viewport.add(panel, true); RootPanel.get().add(viewport); } |
NORTH
, SOUTH
, EAST
, WEST
, and CENTER
. When adding a component to a container with a border layout, use one of these five constants, for example: <borderlayout> <north margins="1,5,1,1" size="20%" splittable="true" collapsible="true" minsize="100" maxsize="400"> <div> North </div> </north> <west size="25%" splittable="true" autoscroll="true"> <div> West </div> </west> <center flex="true"> <div> Center </div> </center> <east size="25%" collapsible="true" onOpen='alert(self.id + " is open :" +event.open)'> <div> East </div> </east> <south size="50%" splittable="true"> <div> south </div> </south> </borderlayout>
Default {@link #getZclass}: z-borderlayout. (since 3.5.0) @author jumperchen @since 5.0.0
This is how the layout looks. Note north/south and east/west behavior is not quite symmetric because east and west fit between the bottom of the north and top of the south:
|-----------------------------| | north | |-----------------------------| | | | | | | | | | | | | | west | center | east | | | | | | | | | |-----------------------------| | south | |-----------------------------|When an element is not stretched, it obeys the {@link tripleplay.ui.Style.HAlign} and {@link tripleplay.ui.Style.VAlign} bindings.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|