⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 friendtree.java

📁 这个QQ通信系统项目是我之前发过类似的一个大的整合
💻 JAVA
字号:
package client;

import java.awt.Color;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Enumeration;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

public class FriendTree {
	/**
	 * 定义DefaultTreeModel
	 */
	private DefaultTreeModel treemode;

	/**
	 * 定义根节点"我的好友"
	 */
	private DefaultMutableTreeNode root = null;

	/**
	 * 以节点"我的好友"构造一棵树
	 */
	private JTree tree = null;

	/**
	 * 定义节点"在线的好友"
	 */
	private DefaultMutableTreeNode online;

	/**
	 * 定义节点"不在线的好友"
	 */
	private DefaultMutableTreeNode quitline;

	/**
	 * 添加"在线的好友"和"不在线的好友"节点
	 */
	private JMenuItem menuItem1;

	private JMenuItem menuItem2;

	private JMenuItem menuItem3;

	private JMenuItem menuItem4;

	private JMenuItem menuItem5;

	private JMenuItem menuItem6;

	private Controller controller = null;

	public FriendTree() {

	}

	public FriendTree(Controller controller) {
		root = new DefaultMutableTreeNode("我的好友");
		tree = new JTree(root);
		this.controller = controller;
	}

	/**
	 * 树初始化
	 */
	public JTree chushi()// 未加任何好友的情况
	{
		treemode = (DefaultTreeModel) tree.getModel();// 得到DefaultTreeModel
		tree.setBackground(SystemColor.inactiveCaptionText);
		online = new DefaultMutableTreeNode("在线好友");
		quitline = new DefaultMutableTreeNode("离线好友");
		treemode.insertNodeInto(online, root, 0);
		treemode.insertNodeInto(quitline, root, 1);
		tree.setRowHeight(20);
		tree.setBorder(new LineBorder(Color.BLUE));
		tree.scrollPathToVisible(new TreePath(quitline.getPath()));
		tree.addMouseListener(new MouseAdapter() {
			@SuppressWarnings("deprecation")
			public void mousePressed(MouseEvent e) {
				@SuppressWarnings("unused")
				int selRow = tree.getRowForLocation(e.getX(), e.getY());
				TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
				if (e.getClickCount() == 2) {
					JTree tree = (JTree) e.getSource();
					int rowLocation = tree
							.getRowForLocation(e.getX(), e.getY());
					TreePath treepath = tree.getPathForRow(rowLocation);
					if (treepath != null) {
						TreeNode treenode = (TreeNode) treepath
								.getLastPathComponent();

						try {
							int qq = Integer.parseInt(treenode.toString());
							controller.chat(qq);
						} catch (Exception e2) {
						}
					}
				}

				if (SwingUtilities.isRightMouseButton(e)) {
					JPopupMenu popupMenu1 = new JPopupMenu();
					ItemListenerimp Itemimp = new ItemListenerimp(e);
					menuItem1 = new JMenuItem();
					menuItem2 = new JMenuItem();
					menuItem3 = new JMenuItem();
					menuItem4 = new JMenuItem();
					menuItem5 = new JMenuItem();
					menuItem6 = new JMenuItem();
					menuItem1.addActionListener(Itemimp);
					menuItem2.addActionListener(Itemimp);
					menuItem3.addActionListener(Itemimp);
					menuItem4.addActionListener(Itemimp);
					menuItem5.addActionListener(Itemimp);
					menuItem6.addActionListener(Itemimp);
					menuItem1.setText("聊天");
					menuItem2.setText("删除好友");
					menuItem3.setText("聊天记录");
					menuItem4.setText("发送文件");
					menuItem5.setText("查看好友IP");
					menuItem6.setText("查看详细信息");

					popupMenu1.add(menuItem1);
					popupMenu1.add(menuItem2);
					popupMenu1.add(menuItem3);
					popupMenu1.add(menuItem4);
					popupMenu1.add(menuItem5);
					popupMenu1.add(menuItem6);
					if (selPath != null) {
						TreeNode treenode = (TreeNode) selPath
								.getLastPathComponent();
						try {
							Integer.parseInt(treenode.toString());
							popupMenu1.show(e.getComponent(), e.getX(), e
									.getY());
						} catch (Exception ecast) {
							return;
						}
					}

				}
			}
		});

		return tree;
	}

	/**
	 * 根据id在“在线的好友"的子节点中添加该以id为节点的子节点
	 */
	public void addonlinefriend(int id) {
		treemode = (DefaultTreeModel) tree.getModel();// 得到DefaultTreeModel
		DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(String
				.valueOf(id));
		treemode.insertNodeInto(newNode, online, online.getChildCount());
		tree.setRowHeight(20);
		tree.getSelectionModel().setSelectionMode(
				TreeSelectionModel.SINGLE_TREE_SELECTION);// 只能选取一个节点
		tree.setRowHeight(20);
		tree.scrollPathToVisible(new TreePath(newNode.getPath()));
	}

	/**
	 * 根据id在“不在线的好友"的子节点中添加该以id为节点的子节点
	 */
	public void addnotonlinefriend(int id) {
		treemode = (DefaultTreeModel) tree.getModel();// 得到DefaultTreeModel
		DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(String
				.valueOf(id));
		treemode.insertNodeInto(newNode, quitline, quitline.getChildCount());
		tree.setRowHeight(20);
		tree.scrollPathToVisible(new TreePath(newNode.getPath()));
	}

	/**
	 * 首先在在线的好友节点中 删除离线的那位好友 再在不在线的好友节点中 添加离线的那位好友
	 */
	public void liveLine(int id) {
		delNode(id);
		addNode(id);
		// tree.addMouseListener(new MouseListenerimp());
	}

	/**
	 * 首先在不在线的好友节点中 删除离线的那位好友 再在在线的好友节点中 添加离线的那位好友
	 */
	public void upLine(int id) {
		delNode2(id);
		addNode2(id);
		// tree.addMouseListener(new MouseListenerimp());
	}

	/**
	 * 根据id在“不在线的好友"的子节点将此id删除
	 */
	@SuppressWarnings("unchecked")
	public void delNode2(int id)// 删除节点
	{
		DefaultMutableTreeNode n = new DefaultMutableTreeNode();
		if (quitline.getChildCount() > 0) {// 若在线好友大于零
			for (Enumeration e = quitline.children(); e.hasMoreElements();) {
				n = (DefaultMutableTreeNode) e.nextElement();
				if (n.toString().equals(String.valueOf(id))) {
					quitline.remove(n);// 查找在线的列表中有没有此ID有则删除
					treemode.reload();
					tree.scrollPathToVisible(new TreePath(n.getPath()));
				}
			}
		}
	}

	/**
	 * 根据id在“在线的好友"的子节点将此id删除
	 */
	@SuppressWarnings("unchecked")
	public void delNode(int id)// 删除节点
	{
		DefaultMutableTreeNode n = new DefaultMutableTreeNode();
		if (online.getChildCount() > 0) {// 若在线好友大于零
			for (Enumeration e = online.children(); e.hasMoreElements();) {
				n = (DefaultMutableTreeNode) e.nextElement();
				if (n.toString().equals(String.valueOf(id))) {
					online.remove(n);// 查找在线的列表中有没有此ID有则删除
					treemode.reload();
					tree.scrollPathToVisible(new TreePath(n.getPath()));
				}
			}
		}
	}

	/**
	 * 根据id在“不在线的好友"节点添加该以id为节点的子节点
	 */
	public void addNode(int id) {
		treemode = (DefaultTreeModel) tree.getModel();// 得到DefaultTreeModel
		DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(String
				.valueOf(id));
		treemode.insertNodeInto(newNode, quitline, quitline.getChildCount());
		tree.scrollPathToVisible(new TreePath(newNode.getPath()));
	}

	/**
	 * 根据id在“在线的好友"节点添加该以id为节点的子节点
	 */
	public void addNode2(int id) {
		treemode = (DefaultTreeModel) tree.getModel();// 得到DefaultTreeModel
		DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(String
				.valueOf(id));
		treemode.insertNodeInto(newNode, online, online.getChildCount());
		tree.scrollPathToVisible(new TreePath(newNode.getPath()));
	}

	/**
	 * 根据id在“在线的好友"节点或"不在线的好友"节点中 删除该以id为节点的子节点
	 */
	@SuppressWarnings( { "unchecked", "unchecked" })
	public void delfriend(int id) {
		DefaultMutableTreeNode n = new DefaultMutableTreeNode();
		for (Enumeration e = online.children(); e.hasMoreElements();) {
			n = (DefaultMutableTreeNode) e.nextElement();

			if (n.toString().equals(String.valueOf(id))) {
				online.remove(n);// 查找在线的列表中有没有此ID有则删除
				treemode.reload();
				tree.scrollPathToVisible(new TreePath(n.getPath()));
			}
		}
		for (Enumeration e = quitline.children(); e.hasMoreElements();) {
			n = (DefaultMutableTreeNode) e.nextElement();
			if (n.toString().equals(String.valueOf(id))) {
				quitline.remove(n);// 查找在线的列表中有没有此ID有则删除
				treemode.reload();
				tree.scrollPathToVisible(new TreePath(n.getPath()));
			}
		}
	}

	class ItemListenerimp implements ActionListener {

		MouseEvent me;

		int qq = 0;

		ItemListenerimp(MouseEvent e) {
			me = e;
			JTree tree = (JTree) me.getSource();
			int rowLocation = tree.getRowForLocation(me.getX(), me.getY());
			TreePath treepath = tree.getPathForRow(rowLocation);
			if (treepath != null) {
				TreeNode treenode = (TreeNode) treepath.getLastPathComponent();
				try {
					qq = Integer.parseInt(treenode.toString());
				} catch (Exception e2) {

				}
			}
		}

		public void actionPerformed(ActionEvent e) {
			/**
			 * 开启聊天窗口
			 */
			if (e.getSource() == menuItem1) {
				controller.chat(qq);
			}

			/**
			 * 删除好友
			 */
			if (e.getSource() == menuItem2) {
				controller.delfriend(qq);
			}

			/**
			 * 查看聊天记录
			 */
			if (e.getSource() == menuItem3) {
				if (ChatLog.chatLog != null) {
					ChatLog.chatLog.setVisible(true);
				}
			}

			/**
			 * 发送文件
			 */
			if (e.getSource() == menuItem4) {
				controller.sendFile(qq);
			}

			/**
			 * 查看好友IP
			 */
			if (e.getSource() == menuItem5) {
				controller.checkFriendIP(qq);
			}

			/**
			 * 查看好友详细信息
			 */
			if (e.getSource() == menuItem6) {
				controller.checkFriendInfo(qq);
			}
		}

	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -