JTree merupakan komponen dari Swing di Java. JTree digunakan untuk membuat struktur hirarki sebagaimana layaknya tree. Contohnya seperti pada tampilan struktur folder dan subfolder dan file yang ada di dalamnya (seperti gambar di bawah ini)

Screen Shot 2013-02-03 at 8.13.10 AM

Dalam JTree, item yang ada di dalamnya disebut sebagai Node. Setiap Node bisa memiliki Node-Node lagi di dalamnya (child node). Pada implementasi yang simpel, setiap Node akan berisi data String. Misalnya dibuat JTree untuk menampilkan data Mahasiswa dan Kelas. Ilustrasinya akan seperti ini:

Screen Shot 2013-02-03 at 8.19.24 AM

Dari ilustrasi di atas, terlihat bahwa data yang tersimpan dalam node adalah Nama Mahasiswa atau Nama Kelas saja. Padahal biasanya, diperlukan juga untuk menyimpan informasi lain selain Nama Mahasiswa atau Nama Kelas, seperti data Nim atau juga ID Kelas. Intinya pada setiap Node dimungkinkan untuk menyimpan Value atau Nilai selain Label atau String yang tampil di Node nya.

Berikut ini contoh untuk membuat Node pada JTree, dimana di dalam Node nya terdapat beberapa atribut data lain.

import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
/**
 *
 * @author user18
 */
public class MhsTree implements TreeSelectionListener{
 public JTree tree;
 public JLabel nim,nama;

 public MhsTree(){
   DefaultMutableTreeNode root = new DefaultMutableTreeNode("Mahasiswa");
   MhsNode node1 = new MhsNode("0210630064", "Imam F");
   MhsNode node2 = new MhsNode("0210630065", "Imam S");
   MhsNode node3 = new MhsNode("0210630066", "Indriati");
   root.add(node1);
   root.add(node2);
   root.add(node3);

   DefaultTreeModel model = new DefaultTreeModel(root);
   tree = new JTree(model);
   tree.addTreeSelectionListener(this);

   JPanel panel = new JPanel();
   nim = new JLabel("nim");
   nama = new JLabel("nama");
   panel.add(tree);
   panel.add(nim);
   panel.add(nama);

   JFrame frame = new JFrame();
   frame.getContentPane().add(panel);
   frame.setSize(400, 200);
   frame.setVisible(true);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }

 public static void main(String[] args){
    new MhsTree();
 }

@Override
 public void valueChanged(TreeSelectionEvent tse) {
    MhsNode node = (MhsNode) tree.getLastSelectedPathComponent();
    nim.setText(node.getNim());
    nama.setText(node.getNama());
 }
}

class MhsNode extends DefaultMutableTreeNode {
  private String nim;
  private String nama;

  public MhsNode(String nim, String nama) {
     super(nama);
     this.nim = nim;
     this.nama = nama;
  }

  public String getNama() {
     return nama;
  }

  public void setNama(String nama) {
     this.nama = nama;
  }

  public String getNim() {
     return nim;
  }

  public void setNim(String nim) {
     this.nim = nim;
  }

}