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

📄 myactionlisenter.java

📁 模仿腾讯QQ的
💻 JAVA
字号:
package com.softfz.jn0708.chat.sendpanel;

import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Element;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import com.softfz.jn0708.chat.chatcontent.ChatContent;
import com.softfz.jn0708.srcpackage.SrcPackage;

/**
 * 聊天窗体的操作监听
 */
public class MyActionLisenter implements ActionListener {
	
	private SendPanel sendpanel = null;
	private ChatContent chatcontent = null;	
	private SrcPackage chatPackage = null;
	private ObjectOutputStream oos;
	
	/**
	 * 构造函数
	 */

	public MyActionLisenter(ChatContent chatcontent,SendPanel sendpanel){
	
		this.sendpanel = sendpanel;
		this.chatcontent = chatcontent;
	}

	/**
	 * 按钮监听事件处理
	 */	
	public void actionPerformed(ActionEvent e) {
		
		if (e.getActionCommand()=="RECORD"){
			
			//聊天记录			
			
		}else if (e.getActionCommand()=="SEND"){		

			// 获得一个 sendText(JTextPane) 的 StyledDocument
			DefaultStyledDocument dsd = (DefaultStyledDocument) sendpanel.getJtpininfo().getStyledDocument();
			// 获得输入框的长度
			int len = dsd.getLength();
			if (len < 1)
				return;
			List tmpList = new ArrayList();
			for (int i = 0; i < len; i++) {
				Element element = dsd.getCharacterElement(i);
				// 若当前元素是图标,则通过StyleConstants.getIcon方法从元素的属性中取出图标并存入List内。
				if (element.getName().equals("icon")) {
					Icon icon = StyleConstants.getIcon(element.getAttributes());
					tmpList.add(icon);

				} else if (element.getName().equals("content")) {
					// 若是内容,则直接获取内容
					try {
						tmpList.add(sendpanel.getJtpininfo().getText(i, 1));
					} catch (BadLocationException e1) {
						// TODO 自动生成 catch 块
						e1.printStackTrace();
					}

				}
			}			
			if (!sendpanel.getJtpininfo().getText().equals("")){		

				
				try{
					if (!chatcontent.getChatframe().getToType().trim().equals("")){
						
						if(chatcontent.getChatframe().getToType().equals("COMPANY")){	
		
							// 发对某部门的聊天包	
							sendpanel.getJtpininfo().setText("");			
							oos = chatcontent.getChatframe().getOos();		
				
							HashMap data = new HashMap();
							data.put("CHATCONTENT", tmpList);
							SrcPackage chatPackage = new SrcPackage();
							chatPackage.setData(data);
							chatPackage.setFrom(chatcontent.getChatframe().getUser().getUTERM());
							chatPackage.setTo(chatcontent.getChatframe().getToUser());
							chatPackage.setTomeno("company");
							chatPackage.setType(SrcPackage.CHAT_TYPE);	
							
							StyledDocument sdChatContent= chatcontent.getChatframe().getChatcontent().getJtpchatcontent().getStyledDocument();
							SimpleAttributeSet style = new SimpleAttributeSet(); // 样式
							SimpleDateFormat tiem = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
							String date = tiem.format(new Date());
							
							chatcontent.getJtpchatcontent().setEditable(true);								
							sdChatContent.insertString(sdChatContent.getLength(),  "【"+date+"】"+" 你 对 "+chatPackage.getTo()+" 的所有人说:" + "\n", style);
							for (int i = 0; i < tmpList.size(); i++) {
									// 设置文本插入符的位置
								chatcontent.getChatframe().getChatcontent().getJtpchatcontent().setCaretPosition(sdChatContent.getLength());
								Object o = tmpList.get(i);
			
								if (o instanceof Icon) {
									chatcontent.getChatframe().getChatcontent().getJtpchatcontent().insertIcon((ImageIcon)o);
								} else if (o instanceof String) {										
										
									sdChatContent.insertString(sdChatContent.getLength(), (String) o,style);

								}
							}								
							sdChatContent.insertString(sdChatContent.getLength(), "\n\n", style);
							int pos = chatcontent.getJtpchatcontent().getDocument().getLength();
							chatcontent.getJtpchatcontent().scrollRectToVisible(new Rectangle(pos,pos));								
							chatcontent.getJtpchatcontent().setEditable(false);							
							
							
							
							oos.writeObject(chatPackage);							
							
						}else if(chatcontent.getChatframe().getToType().equals("DEPARTMENT")){				
						
							
							// 发对某部门的聊天包	
							sendpanel.getJtpininfo().setText("");			
							oos = chatcontent.getChatframe().getOos();		
				
							HashMap data = new HashMap();
							data.put("CHATCONTENT", tmpList);
							SrcPackage chatPackage = new SrcPackage();
							chatPackage.setData(data);
							chatPackage.setFrom(chatcontent.getChatframe().getUser().getUTERM().trim());
							chatPackage.setTo(chatcontent.getChatframe().getToUser());
							chatPackage.setTomeno(chatcontent.getChatframe().getToUno());
							chatPackage.setType(SrcPackage.CHAT_TYPE);		
							
							StyledDocument sdChatContent= chatcontent.getChatframe().getChatcontent().getJtpchatcontent().getStyledDocument();
							SimpleAttributeSet style = new SimpleAttributeSet(); // 样式
							SimpleDateFormat tiem = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
							String date = tiem.format(new Date());
							
							chatcontent.getJtpchatcontent().setEditable(true);								
							sdChatContent.insertString(sdChatContent.getLength(),  "【"+date+"】"+" 你 对 "+chatPackage.getTo()+" 的所有人说:" + "\n", style);
							for (int i = 0; i < tmpList.size(); i++) {
									// 设置文本插入符的位置
								chatcontent.getChatframe().getChatcontent().getJtpchatcontent().setCaretPosition(sdChatContent.getLength());
								Object o = tmpList.get(i);
			
								if (o instanceof Icon) {
									chatcontent.getChatframe().getChatcontent().getJtpchatcontent().insertIcon((ImageIcon)o);
								} else if (o instanceof String) {										
										
									sdChatContent.insertString(sdChatContent.getLength(), (String) o,style);

								}
							}								
							sdChatContent.insertString(sdChatContent.getLength(), "\n\n", style);
							int pos = chatcontent.getJtpchatcontent().getDocument().getLength();
							chatcontent.getJtpchatcontent().scrollRectToVisible(new Rectangle(pos,pos));								
							chatcontent.getJtpchatcontent().setEditable(false);
							
							//发送
							oos.writeObject(chatPackage);
								
						}else if(chatcontent.getChatframe().getToType().equals("USER")){					
											
							// 发对某用户的聊天包	
							sendpanel.getJtpininfo().setText("");			
							oos = chatcontent.getChatframe().getOos();		
				
							HashMap data = new HashMap();
							data.put("CHATCONTENT", tmpList);
							SrcPackage chatPackage = new SrcPackage();
							chatPackage.setData(data);
							chatPackage.setFrom(chatcontent.getChatframe().getUser().getUTERM());
							chatPackage.setTo(chatcontent.getChatframe().getToUser());
							chatPackage.setTomeno(chatcontent.getChatframe().getToUno());
							chatPackage.setType(SrcPackage.CHAT_TYPE);		
							
							
							StyledDocument sdChatContent= chatcontent.getChatframe().getChatcontent().getJtpchatcontent().getStyledDocument();
							SimpleAttributeSet style = new SimpleAttributeSet(); // 样式
							SimpleDateFormat tiem = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
							String date = tiem.format(new Date());
							
							chatcontent.getJtpchatcontent().setEditable(true);								
							sdChatContent.insertString(sdChatContent.getLength(),  "【"+date+"】"+" 你 对 "+chatcontent.getChatframe().getToUser()+" 说:" + "\n", style);
							for (int i = 0; i < tmpList.size(); i++) {
									// 设置文本插入符的位置
								chatcontent.getChatframe().getChatcontent().getJtpchatcontent().setCaretPosition(sdChatContent.getLength());
								Object o = tmpList.get(i);
			
								if (o instanceof Icon) {
									chatcontent.getChatframe().getChatcontent().getJtpchatcontent().insertIcon((ImageIcon)o);
								} else if (o instanceof String) {
																	
										
									sdChatContent.insertString(sdChatContent.getLength(), (String) o,style);

								}
							}								
							sdChatContent.insertString(sdChatContent.getLength(), "\n\n", style);
							int pos = chatcontent.getJtpchatcontent().getDocument().getLength();
							chatcontent.getJtpchatcontent().scrollRectToVisible(new Rectangle(pos,pos));							
							chatcontent.getJtpchatcontent().setEditable(false);
							
							
							//发送
							oos.writeObject(chatPackage);

						}
						else{
							JOptionPane.showMessageDialog(null, "请选择聊天对象...", "提示",JOptionPane.INFORMATION_MESSAGE);
						}
					}
				
				}catch(Exception e1){
					
					
//					JOptionPane.showMessageDialog(null, "请选择聊天对象...", "提示",JOptionPane.INFORMATION_MESSAGE);
				}
				
			}else{
				JOptionPane.showMessageDialog(null, "聊天内容不能为空,请输入...!", "提示",JOptionPane.INFORMATION_MESSAGE);
			}
			
		}else if (e.getActionCommand()=="CLOSE"){			

			//发下线包
			oos = chatcontent.getChatframe().getOos();
			SrcPackage downLinePackage=new SrcPackage();
			downLinePackage.setData(null);
			downLinePackage.setFrom(chatcontent.getChatframe().getUser().getUNO());
			downLinePackage.setTo(SrcPackage.SERVER_ID);
			downLinePackage.setType(SrcPackage.DOWNLINE_TYPE);
			downLinePackage.setTomeno(chatcontent.getChatframe().getUser().getUTERM());
//			chatcontent.getChatframe().dispose();			
			try {
				oos.writeObject(downLinePackage);
				Thread.sleep(100);
				
			} catch (IOException e1) {
				// TODO 自动生成 catch 块
				e1.printStackTrace();
			} catch (InterruptedException e1) {
				// TODO 自动生成 catch 块
				e1.printStackTrace();
			}		
			System.exit(0);
//			//关闭和服务器通讯的Socket
//			try {
//				chatcontent.getChatframe().getOis().close();
//				chatcontent.getChatframe().getOos().close();
//				chatcontent.getChatframe().getClientSocket().close();
//				chatcontent.getChatframe().getReceiveThread().setTag(true);
//						
//			} catch (IOException e1) {
//				// TODO 自动生成 catch 块
//				e1.printStackTrace();
//				
//			}
		}		
		
	}	

}

⌨️ 快捷键说明

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