作者:alloyer | 来源:互联网 | 2023-08-27 03:02
在XMPP通讯开发-弹出好友通信对话框的逻辑设计中我们实现双击好友弹出聊天的对话框,那只是一个框架,而我们要真是的实现聊天需要重写JDialog里面的内容JPanel。这里我们可以根据好
在 XMPP通讯开发-弹出好友通信对话框的逻辑设计 中我们实现双击好友弹出聊天的对话框,那只是一个框架,而我们要真是的实现聊天需要重写JDialog里面的内容JPanel。这里我们可以根据好友聊天需要的基本的功能,我们需要使用的是ChatManager这个聊天管理器,然后与指定用户建立Chat session,之后就可以发送和接收消息了。这部分我们可以看官方的文档smack_3_3_0\documentation\messaging.html里面Messaging using Chats,根据官网给出的例子,我们可以知道需要好友的XMPP的地址,还有就是connection,所以我们在构造JPanel的时候,需要传递这两个参数。我们看一下代码:
public void setChatPanel(XMPPConnection conn, String frindsXmppAddress){
this.cOnn= conn;
this.frindsXmppAddress = frindsXmppAddress;
CreateChatM();
dateUtils = new DateUtils();
chatName.setText(frindsXmppAddress);
}
private void CreateChatM(){
if(conn != null){
chatManager = conn.getChatManager();
chat = chatManager.createChat(frindsXmppAddress,
new MessageListener(){
@Override
public void processMessage(Chat chat, Message msg) {
if(msg != null){
ChatMessage.append(dateUtils.getHM()+" "+frindsXmppAddress+": "+msg.getBody()+"\n");
}
}
});
}
}
双击部分代码如下:
ChatPanel chatPanel = new ChatPanel();
chatPanel.setChatPanel(conn, "123@zhangjie");
JDialog chatDialog = new JDialog();
chatDialog.setContentPane(chatPanel);
chatDialog.setSize(501, 512);
chatDialog.setVisible(true);
初始化ChatPanel后,然后设置那两个相关的参数,同时创建对话信息,然后启动JDialog显示界面,在下面的对话框中填写要发送的信息,点击发送,就会将填写的信息发送给123@zhagnjie上面,点击按钮功能如下:
private void SendChatBtnMouseClicked(java.awt.event.MouseEvent evt) {
String COntent= ChatContent.getText();
try {
chat.sendMessage(Content);
ChatMessage.append(dateUtils.getHM()+" 自己: "+Content+"\n");
ChatContent.setText("");
} catch (XMPPException ex) {
Logger.getLogger(ChatPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}
另一个客户端我是用的是Spark进行测试的,效果图如下:
两个可以正常的通信。
源码项目:https://github.com/jwzhangjie/IChat_PC.git