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


// Einfaches Beispiel mit DefaultMutableTreeNode
// CTreeNodeRec liefert Zusatzinformationen
// mit Methode toString

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

import java.awt.event.*;

import javax.swing.tree.DefaultMutableTreeNode;

import java.io.*;


// Treeselection
import javax.swing.tree.*;

public class Tree06 extends JFrame {

  JTree jTree1;


  public Tree06() {
    setSize(400, 300);
    setTitle("JTree 6. Beispiel");
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    setGUI();
  }

  private void setGUI() {
    DefaultMutableTreeNode root;

    this.getContentPane().setLayout(  new BorderLayout()  );

    root = BuildTree();
    jTree1 = new javax.swing.JTree(root);
    jTree1.setFont( new Font("Arial", Font.BOLD,22)  ); 

    this.getContentPane().add( new JScrollPane(jTree1), BorderLayout.CENTER);
    jTree1.getSelectionModel().setSelectionMode (TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
  } // setGUI


  // ----------------------------------------
  // BuildTree
  // ----------------------------------------
  DefaultMutableTreeNode BuildTree() {
    DefaultMutableTreeNode root;

    DefaultMutableTreeNode Kn0, Kn1, Kn2;

    root = new DefaultMutableTreeNode("root");

      // liefert einen DefaultMutableTreeNode
    Kn0 = createCNode(  1,  "1. Stufe");   // Daten und Bezeichnung
    root.add( Kn0 );

    Kn1 = createCNode(  2, "Eigener Knoten: AAA");
    Kn0.add( Kn1 );
    Kn1 = createCNode(  3,  "Eigener Knoten: BBB");
    Kn0.add( Kn1 );

    Kn1 = createCNode(  3,  "Eigener Knoten: BBB");
    Kn0.add( Kn1 );

    // ---------

    Kn0 = new DefaultMutableTreeNode("1. Stufe");
    root.add( Kn0 );

    Kn1 = new DefaultMutableTreeNode("CCC");
    Kn0.add( Kn1 );

    Kn1 = new DefaultMutableTreeNode("DDD");
    Kn0.add( Kn1 );

    return root;
  }  // BuildTree




  // erzeugt einen Knoten
  // CTreeNodeRec liefert Zusatzinformationen
  // erzeugt einen Knoten, verwendet eine zusaetzliche Klasse CTreeNodeRec
 DefaultMutableTreeNode createCNode(int CData,  String nodeString) {
    CTreeNode CNode;
    DefaultMutableTreeNode Node;

    CNode = new  CTreeNode(CData, nodeString);
    Node = new DefaultMutableTreeNode(CNode);
    //Node.setUserObject(CNode);  // Alternative Methode
    return Node;
 }


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


}




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

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

    private int _CData;  // Daten

    public String _nodeString;  // Anzeige des Knoten


   public CTreeNode(int CData,  String nodeString) {
      _CData = CData;
      _nodeString = nodeString;  // für JTree;
      nr++;
      _id = nr;  // setzt eindeutige Nummer
   }


   public long getID() {
     return _id;
   }

   public int getData() {
     return _CData;
   }

   public void setData(int CData) {
     _CData = CData;
   }

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

}  // CTreeNode


