import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;

/** DemoBorderLayout - program to demonstrate the
* <code>BorderLayout</code> class.<p>
*
* Usage:<p>
*
* <pre>
*     java DemoBorderLayout arg1
*
*     where 'arg1' = strut size in pixels
* </pre>
*
* Invocations:<p>
*
* <pre>
*     java DemoBorderLayout 0
* </pre>
*
* <center><img src="DemoBorderLayout-1.gif"></center><p>
*
* <pre>
*     java DemoBorderLayout 10
* </pre>
*
* <center><img src="DemoBorderLayout-2.gif"></center><p>
*
* @see <a href="DemoBorderLayout.java">source code</a>
* @author Scott MacKenzie, 2002
*/
public class DemoBorderLayout
{
   public static void main(String[] args)
   {
      if (args.length == 0)
      {
         usage();
         return;
      }

      int strutSize = Integer.parseInt(args[0]);

      // use look and feel for my system (Win32)
      try {
         UIManager.setLookAndFeel(
            UIManager.getSystemLookAndFeelClassName());
      } catch (Exception e) {}

      DemoBorderLayoutFrame frame = new DemoBorderLayoutFrame(strutSize);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setTitle("DemoBorderLayout");
      frame.pack();
      frame.show();

   }

   private static void usage()
   {
      System.out.println(
         "usage: java DemoBorderLayout arg1\n\n" +
         "where 'arg1' = strut size in pixels"
      );
   }
}

class DemoBorderLayoutFrame extends JFrame
{
   private JButton b1;
   private JButton b2;
   private JButton b3;
   private JButton b4;
   private JButton b5;

   public DemoBorderLayoutFrame(int strutArg)
   {
      // ----------------------------------
      // construct and configure components
      // ----------------------------------

      b1 = new JButton("Carrot");
      b2 = new JButton("Yam");
      b3 = new JButton("Broccoli");
      b4 = new JButton("Brussel Sprouts");
      b5 = new JButton("Zucchini");

      // -----------------
      // layout components
      // -----------------

      JPanel panel = new JPanel();

      // use a BorderLayout with 'hgap' and 'vgap' as per command line

      panel.setLayout(new BorderLayout(strutArg, strutArg));  // 'struts'
      panel.add(b1, "North");
      panel.add(b2, "Center");
      panel.add(b3, "West");
      panel.add(b4, "South");
      panel.add(b5, "East");

      // for in-class demo...
      //panel.setBorder(BorderFactory.createEmptyBorder(25, 25, 25, 25));

      // for in-class demo...
      //panel.setPreferredSize(new Dimension(300, 200));

      // for in-class demo...
      //System.out.println("panel : " + panel.getPreferredSize());

      // for in-class demo...
      //System.out.println("b1 : " + b1.getPreferredSize());
      //System.out.println("b2 : " + b2.getPreferredSize());
      //System.out.println("b3 : " + b3.getPreferredSize());
      //System.out.println("b4 : " + b4.getPreferredSize());
      //System.out.println("b5 : " + b5.getPreferredSize());

      // make panel this JFrame's content pane

      this.setContentPane(panel);
   }
}

