/*
Esempio che mostra vari tipi di layout.
Una finestra top-level (JFrame) con 5 etichette (JLabel) con 
bordi di colori diversi.
Secondo il tipo di layout manager specificato da command-line,
le 5 etichette vengono messe:
- in fila se FlowLayout
- a griglia 2x3 (con un posto libero) se GridLayout
- al centro e 4 punti cardinali se BorderLayout
*/

import java.awt.*;
import javax.swing.*;

public class ExJLayout extends JFrame
{
  static final String msg1 = "Bisogna specificare un layout.";
  static final String msg2 = "Layout possibili: Flow Grid Border";
  static final String msg3 = "Layout specificato non valido";

  public ExJLayout(String name, LayoutManager m)
  {
    JLabel labels[]; /* le 5 etichette */
    int i; /* contatore per cicli for */

    /* crea la finestra e le assegna layout manager */
    setTitle("Layout: " + name);
    getContentPane().setLayout(m);

    /* crea le 5 etichette */
    labels = new JLabel[5];    
    labels[0] = new JLabel("Zero");
    labels[1] = new JLabel("Uno");
    labels[2] = new JLabel("Due");
    labels[3] = new JLabel("Tre");
    labels[4] = new JLabel("Quattro");

    /* allinea la stringa al centro */
    for (i=0; i<5; i++)  
        labels[i].setHorizontalAlignment(SwingConstants.CENTER);

    /* colora lo sfondo di colori diversi */
    labels[0].setBorder(BorderFactory.createLineBorder(new Color(255,100,100), 3));
    labels[1].setBorder(BorderFactory.createLineBorder(new Color(210,210,20),3));
    labels[2].setBorder(BorderFactory.createLineBorder(new Color(250,50,255),3));
    labels[3].setBorder(BorderFactory.createLineBorder(new Color(120,230,200),3));
    labels[4].setBorder(BorderFactory.createLineBorder(new Color(10,180,255),3));

    /* aggiunge le 5 etichette dentro la finestra */
    if (m instanceof BorderLayout) /* Border necessita posizione */
    {
      getContentPane().add(labels[0],BorderLayout.CENTER);
      getContentPane().add(labels[1],BorderLayout.NORTH);
      getContentPane().add(labels[2],BorderLayout.SOUTH);
      getContentPane().add(labels[3],BorderLayout.EAST);
      getContentPane().add(labels[4],BorderLayout.WEST);
    }
    else /* Flow e Grid non necessitano posizione */
    {
      for (i=0; i<5; i++) getContentPane().add(labels[i]);
    }

    /* impacchetta e rende visibile la finestra */
    pack();
    setVisible(true);
  }

  public static void main(String args[]) 
  {
    ExJLayout prova;
    if (args.length != 1)
    {
      System.out.println(msg1);
      System.out.println(msg2);
    }
    else
      if (args[0].equals("Flow")) prova = new ExJLayout("Flow",new FlowLayout());
    else
      if (args[0].equals("Grid")) prova = new ExJLayout("Grid",new GridLayout(2,3));
    else
      if (args[0].equals("Border")) prova = new ExJLayout("Border",new BorderLayout());
    else
    {
      System.out.println(msg3);
      System.out.println(msg2);
    }
  }
}
