/* Listing3813.java */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;

public class Listing3813
extends JFrame
implements ActionListener
{
  protected DefaultMutableTreeNode root;
  protected DefaultTreeModel       treeModel;
  protected JTree                  tree;

  public Listing3813()
  {
    super("JTree 3");
    addWindowListener(new WindowClosingAdapter(true));
    //JTree erzeugen und Einfachselektion aktivieren
    root = new DefaultMutableTreeNode("Root");
    treeModel = new DefaultTreeModel(root);
    tree = new JTree(treeModel);
    TreeSelectionModel tsm = new DefaultTreeSelectionModel();
    tsm.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    tree.setSelectionModel(tsm);
    tree.setRootVisible(true);
    //JTree einfügen
    Container cp = getContentPane();
    cp.add(new JScrollPane(tree), BorderLayout.CENTER);
    //ButtonPanel
    JPanel panel = new JPanel(new FlowLayout());
    String[] buttons = new String[]{"AddChild", "Delete", "Change"};
    for (int i = 0; i < buttons.length; ++i) {
      JButton button = new JButton(buttons[i]);
      button.addActionListener(this);
      panel.add(button);
    }
    cp.add(panel, BorderLayout.SOUTH);
  }

  public void actionPerformed(ActionEvent event)
  {
    String cmd = event.getActionCommand();
    TreePath tp = tree.getLeadSelectionPath(); 
    if (tp != null) {
      DefaultMutableTreeNode node;
      node = (DefaultMutableTreeNode)tp.getLastPathComponent();
      if (cmd.equals("AddChild")) {
        DefaultMutableTreeNode child;
        child = new DefaultMutableTreeNode("child");
        treeModel.insertNodeInto(child, node, node.getChildCount()); 
        TreeNode[] path = treeModel.getPathToRoot(node);
        tree.expandPath(new TreePath(path));
      } else if (cmd.equals("Delete")) {
        if (node != root) {
          TreeNode parent = node.getParent();
          TreeNode[] path = treeModel.getPathToRoot(parent);
          treeModel.removeNodeFromParent(node); 
          tree.setSelectionPath(new TreePath(path));
        }
      } else if (cmd.equals("Change")) {
        String name = node.toString();
        node.setUserObject(name + "C");
        treeModel.nodeChanged(node); 
      }
    }
  }

  public static void main(String[] args)
  {
    try {
      String plaf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
      UIManager.setLookAndFeel(plaf);
      Listing3813 frame = new Listing3813();
      frame.setLocation(100, 100);
      frame.setSize(300, 300);
      frame.setVisible(true);
    } catch (Exception e) {
    }
  }
}