📄 friendtree.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 + -