JTree

GUIにおいて、ツリー状で表示し、選択する場合に使うクラスがJTreeです。
クラス継承構造は次のようになっています。
java.lang.Object
 └java.awt.Container
   └javax.swing.JComponent
     └javax.swing.JTree
詳細は次のリンクで調べましょう。

基本的な使い勝手

以下でデフォルトコンストラクタのJTreeを配置した実行とコード例を示します。
(デフォルトコンストラクタの場合は、始めからサンプル的なノードは構築されています。)
クリックでノードを展開してみましょう、展開の仕方によって、部分的なノードが隠れて しまうことが確認できるでしょう。 これより、スクロール機能のJScrollPaneクラスオブジェクトに入れて使うタイプの部品と分ります。

JFameのコード 、JScrollPane使用

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

public class TestJTree extends JFrame 
{
	Container container;// ここに配置する時の入れ物取得	
	
	JTree jTree = new JTree();
	JScrollPane jscrollPan = new JScrollPane(this.jTree);//jTreeを入れたスクロールペイン生成	
	public TestJTree(){//コンストラクタ
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.container = getContentPane();// 入れ物取得
		this.container.add(jTree, BorderLayout.CENTER); //ツリーを追加
	}
	public static void main(String[] args){
		TestJTree frame = new TestJTree();
		frame.jTree.setPreferredSize(new Dimension(200,150));
		frame.pack();
		frame.setVisible(true);
	}
}

指定の構造をプログラムで 作成その1

ツリーの各ノードは、 TreeNodeインタフェースの継承クラスでなければなりません。
その継承クラスとして汎用的なノードに使うDefaultMutableTreeNodeが 用意されているので、一般的には、これを利用します。
これで指定したノードで、その子にノードを追加したり、削除ができます。

そのためには、対象となるJTreeオブジェクトから希望のノードを取得する必要がありますが、 JTreeクラスにはその機能がなく、 それはTreeModelインターフェイス継承クラスに任されています。
そしてこのインターフェイスを実装したクラスとしてDefaultTreeModelクラスが 用意されています。

そして、JTreeオブジェクトからTreeModelインターフェイス実装オブジェクトを 取得し、それで希望のTreeNodeインタフェース実装オブジェクトを基準にして、 子となるTreeNodeインタフェース実装オブジェクトを操作する形態になります。
つまり、JTreeオブジェクトからDefaultTreeModelオブジェクトを取得し、
それから希望のDefaultMutableTreeNodeオブジェクトを基準にして、
子となるDefaultMutableTreeNodeオブジェクトを追加したり 削除が可能となります。以下で確認ください。

JFameのコード 、

package test;
import java.awt.*;
import java.awt.event.*;//ActionListenerやActionEvent用
import javax.swing.*;
import javax.swing.tree.DefaultTreeModel;//TreeModelインターフェイス実装クラス
import javax.swing.tree.DefaultMutableTreeNode;//TreeNodeインターフェイス実装クラス
public class TestJTree extends JFrame implements ActionListener
{
	Container container;// ここに配置する時の入れ物取得	
	JTree jTree = new JTree();
	JScrollPane jscrollPan = new JScrollPane(this.jTree);//jTreeを入れたスクロールペイン生成	
	JButton btn = new JButton("確認ボタン");
	
	public TestJTree(){//コンストラクタ
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.container = getContentPane();// 入れ物取得
		this.container.add(jTree, BorderLayout.CENTER); //ツリーを追加

		this.container.add(btn, BorderLayout.NORTH); //操作用ボタン追加
		btn.addActionListener(this);
	}
	public void actionPerformed(ActionEvent e){
		DefaultTreeModel treeModel = (DefaultTreeModel)jTree.getModel();
		DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode)treeModel.getRoot();
		rootNode.removeAllChildren();
		DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("ABCD");
		rootNode.add(node1);//追加
		DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("opqrstu");
		rootNode.add(node2);
		DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("XYZ");
		rootNode.add(node3);

		DefaultMutableTreeNode node11 = new DefaultMutableTreeNode("AB");
		node1.add(node11);//node1の末尾に追加
		DefaultMutableTreeNode node12 = new DefaultMutableTreeNode("CD");
		node1.add(node12);

		rootNode.remove(node2);//削除

		node2.setUserObject("OPQRS");//ノード変更
		rootNode.insert(node2, 1);//挿入

		treeModel.reload();//上記の構成で、Treeを更新させる。
	}
	public static void main(String[] args){
		TestJTree frame = new TestJTree();
		frame.jTree.setPreferredSize(new Dimension(200,150));
		frame.pack();
		frame.setVisible(true);
	}
}

ノードのダブルクリックを検出