package javacodebook.gui.internalframe;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

/**
 * @author Benjamin Rusch
 *
 * Innerhalb dieser JFrame sind zwei InternalFrames eingebettet
 */

public class InternalJFrame  extends JFrame {

	/**
	 * Im Konstruktor von JIntenalFrame wird, neben dem Titel an erster 
	 * Stelle, angegeben, dass es resizable, closeable, maximizable, 
	 * iconifiable ist. Default mäßig sind diese Einstellungen nicht gesetzt.
	 */
 	private JInternalFrame innerframe1 = new JInternalFrame("Internal Frame A",
 			true,true,true,true);
 			
 	private JInternalFrame innerframe2 = new JInternalFrame("Internal Frame B",
 			true,true,true,true);
	
	/**
	 * Die JDesktopPane ist eine Unterklasse von JLayeredPane, sie kann 
	 * InternalFrames aufnehmen.
	 */
 	private JDesktopPane desktopPane = new JDesktopPane();   	
    private Container content = null;

    /**
     *	Konstruktor von InternalJFrame.
     */
    public InternalJFrame(String title) {

		super(title);
		content = this.getContentPane();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// Die Größe von einem InternalFrame muss gesetzt werden, sonst
		// ist es nicht sichtbar!
	 	innerframe1.setSize(220,150);
	 	innerframe2.setSize(220,150);
	 	
 		// Es ist ratsam auch die Position der InternalFrame zu setzen, 
 		// defaultmäßig liegen diese auf Position (0,0), oben links in 
 		// der Ecke
	 	innerframe1.setLocation(10,10);
	 	innerframe2.setLocation(30,30);
	 	
	    // Wie ein ToplevelContainer, muss auch das InternalFrame sichtbar 
	    // gemacht werden
	    innerframe1.setVisible(true);
	    innerframe2.setVisible(true);
	    
	     // Wie beim JFrame können nicht direkt auf dem Container Komponenten
	     // gelegt werden, es muss also auch hier die ContentPane bestückt 
	     // werden.
	    innerframe1.getContentPane().add(new JTextArea());
	    innerframe2.getContentPane().add(new JTextArea());
	    
	    // Das InternalFrame wird dem DesktopPane zugewiesen, hierbei kann 
	    // auch die Position des InternalFrame angegeben werden. 
	    desktopPane.add(innerframe1,1);
	 	desktopPane.add(innerframe2,2);
	 	
	 	content.add(desktopPane);  
    }
}