import java.awt.*;

import javax.swing.*;
import javax.swing.border.Border;

/**
 * @author Remi Forax
 */
public class BigExample {
  
  private JPanel createMainPanel(Object[] list) {
    JPanel[] panels=new JPanel[]{
      createTextFieldPanel(),
      createTextAreaPanel(),
      createComboBoxPanel(list),
      createListPanel(list),
      createCheckBoxes(
        createTitledPanel("boutons à cocher"),list),
      createRadioButton(
        createTitledPanel("boutons radio"),list)
    };
    return createBoxPanel(panels);
  }
  
  private JPanel createBoxPanel(JPanel[] panels) {
    JPanel panel=new JPanel(null);
    panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
    for(int i=0;i<panels.length;i++)
      panel.add(panels[i]);
    
    return panel;
  }

  private JPanel createForm(String text,JComponent c) {
    JPanel panel=new JPanel(new GridBagLayout());
    GridBagConstraints constraints=new GridBagConstraints(); 
    constraints.weightx=1.0;
    panel.add(new JLabel(text),constraints);
    
    constraints.weightx=5.0;
    constraints.fill=GridBagConstraints.HORIZONTAL;
    constraints.gridwidth=GridBagConstraints.REMAINDER;
    panel.add(c,constraints);
    return panel;
  }

  public JPanel createTextFieldPanel() {
    JTextField textField=new JTextField();
    return createForm("TextField",textField);
  }
  
  public JPanel createTextAreaPanel() {
    JTextArea textArea=new JTextArea("sur plusieurs\nlignes\n");
    return createForm("TextArea",textArea);
  }
  
  public JPanel createComboBoxPanel(Object[] list) {
    JComboBox comboBox=new JComboBox(list);
    return createForm("ComboBox",comboBox);
  }
  
  public JPanel createListPanel(Object[] array) {
    JList list=new JList(array);
    list.setVisibleRowCount(4);
    JScrollPane scrollPane=new JScrollPane(list);
    return createForm("Liste",scrollPane);
  }

  private JPanel createTitledPanel(String title) {
    JPanel panel=new JPanel();
    Border border=BorderFactory.createTitledBorder(title);
    panel.setBorder(border);
    return panel;
  }
  
  private JPanel createCheckBoxes(JPanel panel,Object[] list) {
    for(int i=0;i<list.length;i++) {
      JCheckBox checkBox=new JCheckBox(list[i].toString());
      panel.add(checkBox);
    }
    return panel;
  }
  
  private JPanel createRadioButton(JPanel panel,Object[] list) {
    ButtonGroup group=new ButtonGroup();
    for(int i=0;i<list.length;i++) {
      JRadioButton radioButton=new JRadioButton(list[i].toString());
      panel.add(radioButton);
      group.add(radioButton);
    }
    return panel;
  }

  public static void main(String[] args) {
    
    JFrame frame=new JFrame("Gros exemple");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    BigExample example=new BigExample();
    JPanel panel=example.createMainPanel(
      new String[]{"SWT","Swing","IlogViews","AWT","Motif"}
    );
    frame.setContentPane(panel);
    
    frame.setSize(400,300);
    frame.show();
  }
}
