JTree クラス( DefaultTreeModel )

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

public class Test {
	public static void main (String[] args)
	{
		Win win = new Win("Test Window");
	}
}

/*******************/
/* クラスWinの定義 */
/*******************/
class Win extends JFrame implements ActionListener {

	DefaultTreeModel model;
	JTree tree;
	JButton add_b, del_b;

	/******************/
	/* コンストラクタ */
	/******************/
	Win (String name)
	{
					// Frameクラスのコンストラクタ(Windowのタイトルを引き渡す)
		super(name);
					// 木構造データの作成
		Font f = new Font("MS 明朝", Font.PLAIN, 20);

		DefaultMutableTreeNode root = new DefaultMutableTreeNode("生物");

			DefaultMutableTreeNode dobutu = new DefaultMutableTreeNode("動物");
			root.add(dobutu);

				DefaultMutableTreeNode inu = new DefaultMutableTreeNode("犬");
				dobutu.add(inu);
				DefaultMutableTreeNode neko = new DefaultMutableTreeNode("猫");
				dobutu.add(neko);

			DefaultMutableTreeNode shokubutu = new DefaultMutableTreeNode("植物");
			root.add(shokubutu);

				DefaultMutableTreeNode sakura = new DefaultMutableTreeNode("桜");
				shokubutu.add(sakura);
				DefaultMutableTreeNode ajisai = new DefaultMutableTreeNode("紫陽花");
				shokubutu.add(ajisai);
				DefaultMutableTreeNode asagao = new DefaultMutableTreeNode("朝顔");
				shokubutu.add(asagao);
					// 木構造を生成
		model = new DefaultTreeModel((TreeNode)root);
		tree = new JTree(model);
		tree.setFont(f);
		tree.setEditable(true);
		tree.putClientProperty("JTree.lineStyle", "Angled");   // ノード間を結ぶ
		getContentPane().add(new JScrollPane(tree), BorderLayout.CENTER);
					// パネルの追加
		JPanel pn = new JPanel();
		add_b = new JButton("追加");
		add_b.setFont(f);
		add_b.addActionListener(this);
		pn.add(add_b);
		del_b = new JButton("削除");
		del_b.setFont(f);
		del_b.addActionListener(this);
		pn.add(del_b);
		getContentPane().add(pn, BorderLayout.SOUTH);
					// Windowの大きさ
		setSize(200, 200);
					// ウィンドウを表示
		setVisible(true);
					// イベントアダプタ
		addWindowListener(new WinEnd());
	}

	/******************************/
	/* 上,左,下,右の余白の設定 */
	/******************************/
	public Insets getInsets()
	{
		return new Insets(35, 10, 10, 10);
	}

	/******************************/
	/* ボタンが押されたときの処理 */
	/******************************/
	public void actionPerformed(ActionEvent e)
	{
		DefaultMutableTreeNode sn = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();

		if (sn != null) {
					// 子供の追加
			if (e.getSource() == add_b) {
						// 追加
				DefaultMutableTreeNode nn = new DefaultMutableTreeNode("New");
				model.insertNodeInto(nn, sn, sn.getChildCount());
						// 表示
				TreeNode nodes[] = model.getPathToRoot(nn);
				TreePath path = new TreePath(nodes);
				tree.scrollPathToVisible(path);   // スクロールペインに含まれていないときは
                                                  //     tree.makeVisible(path);
                                                  // でよい
			}
					// ノードの削除
			else if (e.getSource() == del_b) {
				if (sn.getParent() != null)
					model.removeNodeFromParent(sn);
			}
		}
	}

	/************/
	/* 終了処理 */
	/************/
	class WinEnd extends WindowAdapter
	{
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
	}
}