Swing Event Java Tutorial

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;
public class MainClass extends JFrame {
  private JTree tree1;
  private JLabel showName = new JLabel();
  public static void main(String[] args) {
    new MainClass();
  }
  public MainClass() {
    this.setSize(225, 325);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel1 = new JPanel();
    DefaultMutableTreeNode root, a, b, c, d, e;
    root = new DefaultMutableTreeNode("A");
    a = makeShow("B", root);
    makeShow("C", a);
    makeShow("D", a);
    b = makeShow("E", root);
    d = makeShow("F", b);
    makeShow("G", d);
    e = makeShow("H", b);
    makeShow("I", e);
    makeShow("J", b);
    makeShow("K", b);
    c = makeShow("L", root);
    makeShow("M", c);
    makeShow("N", c);
    makeShow("O", c);
    tree1 = new JTree(root);
    tree1.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    tree1.setVisibleRowCount(12);
    tree1.addTreeSelectionListener(new TreeListener());
    JScrollPane scroll = new JScrollPane(tree1);
    panel1.add(scroll);
    panel1.add(showName);
    this.add(panel1);
    this.setVisible(true);
  }
  private DefaultMutableTreeNode makeShow(String title, DefaultMutableTreeNode parent) {
    DefaultMutableTreeNode show;
    show = new DefaultMutableTreeNode(title);
    parent.add(show);
    return show;
  }
  private class TreeListener implements TreeSelectionListener {
    public void valueChanged(TreeSelectionEvent e) {
      Object o = tree1.getLastSelectedPathComponent();
      DefaultMutableTreeNode show = (DefaultMutableTreeNode) o;
      String title = (String) show.getUserObject();
      showName.setText(title);
    }
  }
}