package javacodebook.gui.layouts;

import javax.swing.*;
import java.awt.*;

/**
 * @author Benjamin Rusch
 * 
 * Durch die Verschachtelung mehrerer BoxLayouts kann mann sehr
 * komplexe Layouts gestalten. Ist das Konzept mit der Verschachtelung
 * einmal verstanden ist die Verwendung vom Boxlayout sehr einfach und 
 * die Möglichkeiten sind fast so groß wie beim GridBagLayout.
 * 
 * Zur Verdeulichung der Vielfältigkeit, wird in diesem Beispiel gezeigt, 
 * wie mit Hilfe von BoxLayout sehr einfach ein BorderLayout simuliert 
 * werden kann.
 */

public class MultipleBoxFrame  extends JFrame {
	
	// Komponenten des Frames
	private JLabel north = new JLabel("Norden");
	private JLabel south = new JLabel("Süden");
	private JLabel west = new JLabel("Westen");
	private JLabel east = new JLabel("Osten");	
	private JTextArea center = new JTextArea(5,20);
	private Container frameContent;
	private JPanel innerContent;
	
	/**
 	*	Konstruktor von MultipleBoxFrame.  
 	*/	
	public MultipleBoxFrame(String title) {
			
		super(title);
	 
 	    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	 	// Wie gehabt benötigen wir den Basis Container vom JFrame
		frameContent = this.getContentPane();
		
		// Ein zweiter Container wird benötigt, dieser wird später
		// in den anderen eingebetet 
		innerContent = new JPanel();
				
		// Jeweils eine BoxLayout-Instanz muss gebaut werden, für jeden
		// Container eine
		BoxLayout outer= 	new BoxLayout(frameContent, BoxLayout.X_AXIS);
		BoxLayout inner= 	new BoxLayout(innerContent, BoxLayout.Y_AXIS);

		frameContent.setLayout(outer);
		innerContent.setLayout(inner);

		// Der innere Panel wird bestückt		
		innerContent.add(north);
		innerContent.add(center);
		innerContent.add(south);
		
		// Der äußere (Content-) Panel wird bestückt
		frameContent.add(west);
		// Hier wird der innere in den äußeren gelegt.
		frameContent.add(innerContent);
		frameContent.add(east);				
	}
}