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