# Java: Summary - GUI Layouts 2 - BoxLayout, CardLayout, GridbagLayout

Layout, layo, becomes that layout manager for container p (a JPanel or Container) with the following.

       p.setLayout(layo);

### Layouts (BoxLayout, CardLayout, GridbagLayout)
BoxLayout, Box - Lays out components in single row or col. Add "glue" and rigid areas to control spacing.
boxl = | new BoxLayout(p, dir); | Creates layout for container p. dir is `BoxLayout.X_AXIS` `BoxLayout.Y_AXIS`. Note: must have already created p.
box = | new Box(dir); | Creates a Container with vertical or horizontal layout.
| p.add(widget); | Adds widget to the next position.
| These static Box methods create useful spacing components, which can be used in other layouts.
| Box.createVerticalStrut(n) | Creates a vertical spacer n pixels high.
| Box.createHorizontalStrut(n) | Creates a horizontal spacer n pixels wide.
| Box.createRigidArea(dim) | Spacer with width and height. dim is Dimension object, eg, `new Dimension(10, 0)`.
| Box.createHorizontalGlue() | Creates expandable horizontal space.
| Box.createVerticalGlue() | Creates expandable vertical space.
| new Box.Filler(mn,prf,mx) | Creates a Box.Filler with min, preferred, and max sizes, each is Dimension object.
CardLayout - Panels are placed on top of each other like stack of cards -- only one visible at a time.
| Used to produce installer or wizard style interface as steps in process, or to select palette. Use JTabbedPanel if user should have control.
crdMgr = | new CardLayout(); | Sets layout to CardLayout.
crdMgr = | new CardLayout(h, v)); | Also can specify horizontal and vertical padding.
| p.add(cardPanel); | Adds next card to panel.
| p.add(cardPanel, name); | Adds next card to panel. Use String name to select it later.
| crdMgr.first(p); | Panel p displays the first card in the layout of p.
| crdMgr.next(p); | Panel p displays the next card in the layout of p.
| crdMgr.previous(p); | Panel p displays the previous card in the layout of p.
| crdMgr.last(p); | Panel p displays the last card in the layout of p.
| crdMgr.show(p, name); | Panel p displays card with String name name in panel p.
GridBagLayout - Panel divided into rows&cols of possibly unequal size. Overall best, but difficult.
`gbag =` | new GridBagLayout(); | Creates GridBagLayout.
| Must add with GridBagConstraints object (gbc below). Can (carefully) reuse same gbc object.
gbc = | new GridBagConstraints(); | Creates a new GridBagConsraints object.
| gbc.gridx = i; | Column, counting from 0. Always start at 0. Don't use default (RELATIVE).
| gbc.gridy = i; | Column, counting from 0. Always start at 0. Don't use default (RELATIVE)..
| gbc.gridwidth = i; | Number of columns wide (default 1).
| gbc.gridheight = i; | Number of rows high (default 1).
| gbc.weightx = d; | Relative horizontal space to allocate if container expands. Default 0.0.
| gbc.weighty = d; | Relative vertical space to allocate if container expands. Default 0.0.
| gbc.fill = fill; | How to expand comp if space larger than preferred size. fill can be `GridBagConstraints.NONE, GridBagConstraints.VERTICAL, GridBagConstraints.HORIZONTAL, GridBagConstraints.BOTH`.
| gbc.anchor = anch; | If component doesn't fill the space, tells how it should be aligned. anch can be one of these `GridBagConstraints` constants: `CENTER (default), NORTH, SOUTH, NORTHEAST, SOUTHWEST, EAST, WEST, SOUTHEAST, NORTHWEST`
| gbc.insets = ins; | Space around component. Eg, `gbc.insets = new Insets(10,5,5,10);`
| gbc.ipadx = i; | Horizontal padding internal to component. Can be negative!
| gbc.ipady = i; | Vertical padding internal to component. Can be negative!

Copyleft 2005 Fred Swartz