A border layout lays out a {@link LayoutPanel}, arranging and resizing its widgets to fit in five regions: {@link Region#NORTH}, {@link Region#SOUTH}, {@link Region#EAST}, {@link Region#WEST}, and {@link Region#CENTER}. Each region will render the first visible widget added to that region. The region of the widget added to a {@link LayoutPanel} with a {@code BorderLayout} canbe specified by setting a {@link BorderLayoutData} object into the widgetusing {@link LayoutPanel#add(Widget,LayoutData)}, for example:
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); } |
@author georgopoulos.georgios(at)gmail.com
@see BorderLayoutData