package chat;import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;public class FriendList extends JFrame implements MouseListener ,MouseMotionListener{
private JFrame frame;
private DefaultMutableTreeNode root, myfriends, myclassmates,red, green, blue,mm,netfriend,stranger;
private JScrollPane jsList; 
private TreePath movePath,tp;   // tp定义要被拖动的TreePath 来获取某个节点 
private JTree tree;
public FriendList(){
super("我的聊天室");
JLabel title = new JLabel("我的在线好友");
JPanel pFriend=new JPanel();

root = new DefaultMutableTreeNode("好友目录");
DefaultTreeModel treeModel = new DefaultTreeModel(root);
JTree rootTree=new JTree(root);
rootTree.setShowsRootHandles(true);

myfriends = new DefaultMutableTreeNode("我的好友");
red = new DefaultMutableTreeNode("red");
blue = new DefaultMutableTreeNode("green");
green = new DefaultMutableTreeNode("green");
myfriends.add(red);
myfriends.add(blue);
myfriends.add(green);

myclassmates= new DefaultMutableTreeNode("我的同学");
mm = new DefaultMutableTreeNode("无");
myclassmates.add(mm);
netfriend=new DefaultMutableTreeNode("网友");
stranger=new DefaultMutableTreeNode("陌生人");

root.add(myfriends);
root.add(myclassmates);
root.add(netfriend);
root.add(stranger);
final JTree tree=new JTree(root); 

tree.setRootVisible(false) ;
jsList=new JScrollPane(tree);        //添加滚动条
pFriend.setLayout(new BorderLayout());
pFriend.add(title,BorderLayout.NORTH);
pFriend.add(jsList,BorderLayout.CENTER);

this.add(pFriend);
this.setSize(200, 600);
this.setLocation(300,300);
this.setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
tree.addMouseListener(this);
//tree.setEditable(true); 
/*MouseListener ml = new MouseAdapter() {  // 添加鼠标事件 
public void mousePressed(MouseEvent e) {  // 鼠标按下的时候 
tp = tree.getPathForLocation(e.getX(), e.getY()); // 获取某个节点 并 //返回指定位置的节点 
if (tp != null) { 
movePath = tp; // 指定要拖动的节点 



public void mouseReleased(MouseEvent e) {    // 当鼠标松开的时候 
tp = tree.getPathForLocation(e.getX(), e.getY());  // 鼠标松开的时候获取指定位置的节点 
if (tp != null && movePath != null) {  // 阻止向子节点拖动 并且 拖动到的不是本身 
if (movePath.isDescendant(tp) && movePath != tp) { 
System.out.println("非法操作"); 
return; 
} else if (movePath != tp) {  // 不是向子节点拖动,也不是拖动到同一个节点 
System.out.println(tp.getLastPathComponent()); // 打印被拖动到的最后节点 
// add方法可以先将原节点从原父节点删除,再添加到新父节点中去      得到最后一个节点 
DefaultMutableTreeNode LastPath = (DefaultMutableTreeNode) tp .getLastPathComponent(); // 得到鼠标点击时的节点 
DefaultMutableTreeNode FirstPath = (DefaultMutableTreeNode) movePath .getLastPathComponent(); // 加节点 
LastPath.add(FirstPath); // 更新 
tree.updateUI(); 



}; 

tree.addMouseListener(ml); */
}


public void mousePressed(MouseEvent e) {  // 鼠标按下的时候 
tp = tree.getPathForLocation(e.getX(), e.getY()); // 获取某个节点 并 //返回指定位置的节点 
if (tp != null) { 
movePath = tp; // 指定要拖动的节点 



public void mouseReleased(MouseEvent e) {    // 当鼠标松开的时候 
tp = tree.getPathForLocation(e.getX(), e.getY());  // 鼠标松开的时候获取指定位置的节点 
if (tp != null && movePath != null) {  // 阻止向子节点拖动 并且 拖动到的不是本身 
if (movePath.isDescendant(tp) && movePath != tp) { 
System.out.println("非法操作"); 
return; 
} else if (movePath != tp) {  // 不是向子节点拖动,也不是拖动到同一个节点 
System.out.println(tp.getLastPathComponent()); // 打印被拖动到的最后节点 
// add方法可以先将原节点从原父节点删除,再添加到新父节点中去      得到最后一个节点 
DefaultMutableTreeNode LastPath = (DefaultMutableTreeNode) tp .getLastPathComponent(); // 得到鼠标点击时的节点 
DefaultMutableTreeNode FirstPath = (DefaultMutableTreeNode) movePath .getLastPathComponent(); // 加节点 
LastPath.add(FirstPath); // 更新 
tree.updateUI(); 




public static void main(String[] args){
  FriendList flist  =   new FriendList ();
 flist.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
public void mouseClicked(MouseEvent e) {
System.out.println("a");
}
public void mouseEntered(MouseEvent e) { System.out.println("mouseEntered"); }  public void mouseExited(MouseEvent e) { System.out.println("mouseExited"); }
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub

}
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub

}}