/**
  * Called whenever the value of the selection changes.
  *
  * @param e the event that characterizes the change.
  */
 public void valueChanged(TreeSelectionEvent e) {
   TreePath path = e.getPath();
   if (path != null) {
     DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
     if (node.isLeaf()) {
       if (getInformation(path) != null) {
         // When selecting an image information.
         XmlInformation info = getInformation(path);
         for (int i = 0; i < listener_list.size(); i++) {
           InformationTreeSelectionListener listener =
               (InformationTreeSelectionListener) listener_list.elementAt(i);
           listener.select(info);
         }
       } else {
         // When expanding a folder.
         expandNode(node);
       }
     }
   }
 }
  /**
   * Returns the image information of the specified path, if it represents an image information.
   * Otherwise returns null.
   *
   * @param path the tree path.
   * @return the image information.
   */
  protected XmlInformation getInformation(TreePath path) {
    String path_str = "";
    Object[] paths = path.getPath();
    for (int i = 1; i < paths.length; i++) {
      String name = (String) ((DefaultMutableTreeNode) paths[i]).getUserObject();
      path_str += "/" + name;
    }

    XmlInformation info = (XmlInformation) hash_info.get(path_str);
    return info;
  }