Subpages: 1. Layouts overview
2. Comparing common layout managers
3. Using GridBagLayout
4. Choosing the right layout
5. Custom layout manager: part I -Label/field pairs
6. Custom layout manager: part II - Common interfaces
7. Dynamic layout in a JavaBeans container
4.2 Comparing common layout managers
The following example demonstrates the most commonly used AWT and Swing layout managers. It shows a set of JInternalFrames containing identical sets of components, each using a different layout. The purpose of this example is to allow direct simultaneous layout manager comparisons using resizable containers.

Figure 4.3 Comparing common layouts
<<file figure4-3.gif>>
The Code: CommonLayouts.java
see \Chapter4\1
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
public class CommonLayouts extends JFrame
{
public CommonLayouts() {
super("Common Layout Managers");
setSize(500, 380);
JDesktopPane desktop = new JDesktopPane();
getContentPane().add(desktop);
JInternalFrame fr1 =
new JInternalFrame("FlowLayout", true, true);
fr1.setBounds(10, 10, 150, 150);
Container c = fr1.getContentPane();
c.setLayout(new FlowLayout());
c.add(new JButton("1"));
c.add(new JButton("2"));
c.add(new JButton("3"));
c.add(new JButton("4"));
desktop.add(fr1, 0);
JInternalFrame fr2 =
new JInternalFrame("GridLayout", true, true);
fr2.setBounds(170, 10, 150, 150);
c = fr2.getContentPane();
c.setLayout(new GridLayout(2, 2));
c.add(new JButton("1"));
c.add(new JButton("2"));
c.add(new JButton("3"));
c.add(new JButton("4"));
desktop.add(fr2, 0);
JInternalFrame fr3 =
new JInternalFrame("BorderLayout", true, true);
fr3.setBounds(330, 10, 150, 150);
c = fr3.getContentPane();
c.add(new JButton("1"), BorderLayout.NORTH);
c.add(new JButton("2"), BorderLayout.EAST);
c.add(new JButton("3"), BorderLayout.SOUTH);
c.add(new JButton("4"), BorderLayout.WEST);
desktop.add(fr3, 0);
JInternalFrame fr4 = new JInternalFrame("BoxLayout - X",
true, true);
fr4.setBounds(10, 170, 250, 120);
c = fr4.getContentPane();
c.setLayout(new BoxLayout(c, BoxLayout.X_AXIS));
c.add(new JButton("1"));
c.add(Box.createHorizontalStrut(12));
c.add(new JButton("2"));
c.add(Box.createGlue());
c.add(new JButton("3"));
c.add(Box.createHorizontalGlue());
c.add(new JButton("4"));
desktop.add(fr4, 0);
JInternalFrame fr5 = new JInternalFrame("BoxLayout - Y",
true, true);
fr5.setBounds(330, 170, 150, 180);
c = fr5.getContentPane();
c.setLayout(new BoxLayout(c, BoxLayout.Y_AXIS));
c.add(new JButton("1"));
c.add(Box.createVerticalStrut(10));
c.add(new JButton("2"));
c.add(Box.createGlue());
c.add(new JButton("3"));
c.add(Box.createVerticalGlue());
c.add(new JButton("4"));
desktop.add(fr5, 0);
try {
fr1.setSelected(true);
}
catch (java.beans.PropertyVetoException ex) {}
WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(wndCloser);
setVisible(true);
}
public static void main(String argv[]) {
new CommonLayouts();
}
}
Understanding the Code
Class CommonLayouts
The CommonLayouts constructor creates five JInternalFrames and places them in a JDesktopPane. Each of these frames contains four JButtons labeled "1," "2," "3" and "4." Each frame is assigned a unique layout manager: a FlowLayout, a 2x2 GridLayout, a BorderLayout, an x-oriented BoxLayout, and a y-oriented BoxLayout respectively. Note that the internal frames using BoxLayout also use strut and glue filler components to demonstrate their behavior.
Running the Code
Figure 4.3 shows CommonLayouts in action. Note the differences in each frame's content as it changes size:
FlowLayout places components in one or more rows depending on the width of the container.
GridLayout assigns an equal size to all components and fills all container space.
BorderLayout places components along the sides of the container.
x-oriented BoxLayout always places components in a row. The distance between the first and second components is 12 pixels (determined by the horizontal strut component). Distances between the second, third, and fourth components are equalized and take up all remaining width (determined by the two glue filler components).
y-oriented BoxLayout always places components in a column. The distance between the first and second components is 10 pixels (determined by the vertical strut component). Distances between the second, third, and fourth components are equalized and take up all available height (determined by the two glue filler components).



RSS feed Java FAQ News