XMPP通讯开发-仿QQ显示好友列表和用户组

在 XMPP通讯开发-服务器好友获取以及监听状态变化   中我们获取服务器上的用户好友信息,然后结合XMPP通讯开发-好友获取界面设计    我们将两个合并起来,首先获取用户组,然后把用户组用List存储起来用作对比好友的用户组,根据用户组的个数然后创建相应的DefaultMutableTreeNode节点用于添加好友,获取好友列表,根据用户组把当前用户添加的所属的用户组,这里要注意的是一个好友可以存在不同的用户组里面,所以获取的好友所在的组也是一个集合,最后在添加一个根的DefaultMutableTreeNode把之前用户组都添加到根组里面,最后把根组添加到JTree里面最后再把JTree添加到jTabbedPane里面.主要代码如下:

  /**
     * 获取用户好友
     */
    public void getRoster() {
        if (conn != null) {
            roster = conn.getRoster();
            getRosterPresenceChange();
            Collection<RosterGroup> groups = roster.getGroups();
            int size = groups.size();
            treeNode = new DefaultMutableTreeNode[size];
            int i = 0;
            for (RosterGroup group : groups) {
                groupsList.add(group.getName());
                treeNode[i] = new DefaultMutableTreeNode(group.getName());
                i++;
            }
            Collection<RosterEntry> entries = roster.getEntries();
            for (RosterEntry entry : entries) {
                Collection<RosterGroup> group = entry.getGroups();
                for (RosterGroup g : group) {
                    if (groupsList != null) {
                        int size_1 = groupsList.size();
                        for (i = 0; i < size_1; i++) {
                            if (g.getName().equals(groupsList.get(i))) {
                                treeNode[i].add(new DefaultMutableTreeNode(entry.getName()));
                            }
                        }
                    }
                }
            }
            for (i = 0; i < size; i++) {
                top.add(treeNode[i]);
            }
            JTree tree = new JTree(top);
            JScrollPane scrollPane = new JScrollPane();
            scrollPane.setViewportView(tree);
           jTabbedPane.addTab("好 友", scrollPane);
        }
    }

效果图如下:



源码项目:https://github.com/jwzhangjie/IChat_PC.git




获取好友列表和加入好友都是 XMPP 协议中常见的操作,可以使用 XMPP 客户端库来实现。 获取好友列表: 获取好友列表需要先建立与服务器的连接,然后向服务器发送获取好友列表的请求,服务器会返回当前用户的好友列表。 在使用 XMPP 客户端库时,可以通过调用 `getRoster()` 方法来获取好友列表: ```java Roster roster = connection.getRoster(); Collection<RosterEntry> entries = roster.getEntries(); for (RosterEntry entry : entries) { System.out.println(entry.getName() + " (" + entry.getUser() + ")"); } ``` 这段代码会输出当前用户的好友列表,每个好友的名称和 JID。 加入好友: 加入好友需要知道好友的 JID,然后向服务器发送加入好友的请求,服务器会向好友发送一个订阅请求,好友同意后就成为了当前用户的好友。 在使用 XMPP 客户端库时,可以通过调用 `sendPacket()` 方法来发送加入好友的请求: ```java Presence subscribe = new Presence(Presence.Type.subscribe); subscribe.setTo(buddyJID); connection.sendPacket(subscribe); ``` 这段代码会向好友发送一个订阅请求,其中 `buddyJID` 是好友的 JID。 好友同意后,当前用户会收到一个订阅通知,可以通过监听 `RosterListener` 的 `entriesAdded()` 方法来处理: ```java roster.addRosterListener(new RosterListener() { public void entriesAdded(Collection<String> addresses) { for (String address : addresses) { System.out.println("New buddy added: " + address); } } // ... }); ``` 这段代码会在当前用户的好友列表中添加新的好友,并输出好友的 JID。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值