package javacodebook.gui.tree;

import javax.swing.*;
import javax.swing.tree.*;
import java.awt.event.*;
import java.awt.*;

/**
 * @author Benjamin Rusch
 *
 * Die TreeJFrame besteht aus zwei Bereichen, im Linken befinden sich ein 
 * Baum, im Rechten nur ein leeres Panel.
 */

public class TreeJFrame  extends JFrame {

	private JPanel left = new JPanel();
	private JPanel right = new JPanel();
	
	// Knoten für den Baum werden erstellt
	private DefaultMutableTreeNode names = new DefaultMutableTreeNode("Namen");
	private DefaultMutableTreeNode m = new DefaultMutableTreeNode("Namen mit M");
	private DefaultMutableTreeNode mark = new DefaultMutableTreeNode("Mark");
	private DefaultMutableTreeNode marco = new DefaultMutableTreeNode("Marco");
	private DefaultMutableTreeNode markus = new DefaultMutableTreeNode("Markus");
	private DefaultMutableTreeNode oM = new DefaultMutableTreeNode("Namen ohne M");
	private DefaultMutableTreeNode dirk= new DefaultMutableTreeNode("Dirk");
	private DefaultMutableTreeNode ben = new DefaultMutableTreeNode("Ben");
	
	// Der Baum mit dem Wurzel-Knoten wird gebaut
	private JTree tree = new JTree(names);
   	
   	private JSplitPane horizontal = null;
   	
    private Container content = null;

    /**
     *	Konstruktor von TreeJFrame.
     */
    public TreeJFrame(String title) {

		super(title);
		content = this.getContentPane();	
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	
		left.setLayout(new FlowLayout());
		
		// Tree wird zusammengebaut	
		this.addNodes();	
		
		// Bei der Instanziierug der SplitPane wird die Ausrichtung übergeben
		horizontal = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);	
		
		// tree wird in den linken Bereich der Splitpane gelegt 
		horizontal.setLeftComponent(tree);
		// leeres Panel wird in den rechten Bereich gelegt		
		horizontal.setRightComponent(right);
		content.add(horizontal);
    }
    
    /**
     * Setzt die existierenden Konten zu einem Baum zusammen.
     * Besitzt ein Knoten keine Kinder mehr, wird default mäßig ein 
     * anderes Icon gewählt.
	 */
    private void addNodes() {
    
    	// Den Knoten können über eine einfache add-Methode Ihre Child-Knoten 
    	// hinzugefügt werden:
	    names.add(m);
	    names.add(oM);
	    
	    m.add(mark);
	    m.add(marco);
	    m.add(markus);
		
		oM.add(dirk);
	    oM.add(ben);
    }
	    
}