//Titel:        JTree
//Version:       1.0
//Copyright:     Copyright (c) 2003, 06
//Autor:         Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm
//Organisation:  HS Harz
//Beschreibung:  Einführung in JTree


// Einfaches Beispiel mit DefaultMutableTreeNode
// MvcTreeNodeRec liefert Zusatzinformationen
// mit toString-Methode


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

import java.awt.event.*;

import javax.swing.tree.DefaultMutableTreeNode;

import java.io.*;

public class Tree06 extends JFrame {

  JTree jTree1;


  public Tree06() {
    setGUI();
  }

  private void setGUI() {
    DefaultMutableTreeNode root;

    setSize(400, 300);
    setTitle("JTree 5. Beispiel");
    this.getContentPane().setLayout(  new BorderLayout()  );

    root = BuildTree();
    jTree1 = new javax.swing.JTree(root);


    this.getContentPane().add(jTree1, BorderLayout.CENTER);

    // Neue Version
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  } // setGUI


  // ----------------------------------------
  // BuildTree
  // ----------------------------------------
  DefaultMutableTreeNode BuildTree() {
    DefaultMutableTreeNode root;
    DefaultMutableTreeNode[]  Knoten = new DefaultMutableTreeNode[3];

    for (int i=0; i<3; i++) {
      Knoten[i] = new DefaultMutableTreeNode();
    }

    root = new DefaultMutableTreeNode("root");

      // liefert einen DefaultMutableTreeNode
    Knoten[0] = createMyNode(  1,  "1. Stufe");   // Daten und Bezeichnung
    root.add( Knoten[0] );

    Knoten[1] = createMyNode(  2, "AAA");
    Knoten[0].add( Knoten[1] );
    Knoten[1] = createMyNode(  3,  "BBB");
    Knoten[0].add( Knoten[1] );


    // ---------

    Knoten[0] = new DefaultMutableTreeNode("1. Stufe");
    root.add( Knoten[0] );

    Knoten[1] = new DefaultMutableTreeNode("CCC");
    Knoten[0].add( Knoten[1] );

    Knoten[1] = new DefaultMutableTreeNode("DDD");
    Knoten[0].add( Knoten[1] );

    return root;
  }  // BuildTree




  // erzeugt einen Knoten
  // MvcTreeNodeRec liefert Zusatzinformationen
 DefaultMutableTreeNode createMyNode(int myData,  String nodeString) {
    MyTreeNodeRec myNode;
    DefaultMutableTreeNode Node;

    myNode = new  MyTreeNodeRec(myData, nodeString);
    Node = new DefaultMutableTreeNode(myNode);
    //Node.setUserObject(myNode);
    return Node;
 }


 
  //Überschreiben, damit das Programm bei Herunterfahren des Systems beendet werden kann
  /*
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if(e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }
  */

  
  public static void main(String[] args) {
    Tree06 frame = new Tree06();
    frame.setVisible(true);
 }


}



// Einfache Klasse für jeden Knoten
class MyTreeNodeRec  {
  public static long nr=0;

    private long _id = 0; // Id des Knotens  z.B. als ID

    private int _myData;

    public String _nodeString;


   public MyTreeNodeRec(int myData,  String nodeString) {
      _myData = myData;
      _nodeString = nodeString;  // für JTree;
      nr++;
      _id = nr;  // setzt eindeutige Nummer
   }


   public long getID() {
     return _id;
   }

   public int getData() {
     return _myData;
   }

   public void setData(int myData) {
     _myData = myData;
   }

   // sehr wichtig
   public String toString() {
     return _nodeString;
   }
   

}  // MyTreeNodeRec


