import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
class relaTree extends JFrame implements TreeSelectionListener
{
  Container con;
  JTree tree=null;
  DefaultMutableTreeNode root,all,family,friend;
  JSplitPane split;
  JScrollPane scroll;
  JPanel panel;
  relaTree()
  {
    con=getContentPane();
    root=new DefaultMutableTreeNode("亲情树------个人关系树形图");
    all=new DefaultMutableTreeNode("所有");
    family=new DefaultMutableTreeNode("家人");
    friend=new DefaultMutableTreeNode("朋友");
    root.add(all);
    root.add(family);
   root.add(friend);
    tree=new JTree(root);
    tree.setEditable(true);
    panel=new JPanel();
    scroll=new JScrollPane(panel);
    split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,tree,scroll);
    con.add(split,BorderLayout.CENTER);
    validate();
    setVisible(true);
    tree.addTreeSelectionListener(this);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
  public void valueChanged(TreeSelectionListener e)
  {
    if(e.getSource()==tree)
    {
      DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
      if(node.isLeaf())
        {
          String s=node.toString();
          if (s.equals("所有"))
          {
          }
          else if (s.equals("家人"))
          {          }
          else if (s.equals("朋友"))
          {
          }
        }
      
    }
  }
}
public class treewin
{
  public static void main(String args[])
  {
    relaTree rt=new relaTree();
    rt.pack();
  }
}会有如下异常:treewin.java:7: relaTree is not abstract and does not override abstract method valueChanged(javax.swing.event.TreeSelectionEvent) in javax.swing.event.TreeSelectionListener
class relaTree extends JFrame implements TreeSelectionListener
treewin.java:38: cannot resolve symbol
symbol : method getSource ()
location: interface javax.swing.event.TreeSelectionListener
    if(e.getSource()==tree)