📄 chatframe.java
字号:
package com.softfz.jn0708.chat;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.border.Border;
import com.softfz.jn0708.chat.chatcontent.ChatContent;
//import com.softfz.jn0708.chat.notepanel.AnnouncementPanel;
import com.softfz.jn0708.chat.sendpanel.SendPanel;
import com.softfz.jn0708.chat.toppanel.TopPanel;
import com.softfz.jn0708.chat.userlistpanel.UserListPanel;
import com.softfz.jn0708.srcpackage.*;
import com.softfz.jn0708.thread.ClientReceiveThread;
import com.softfz.jn0708.util.Tools;
/**
* 客户端主窗体类
* @author admin
*
*/
public class ChatFrame extends JFrame {
private String ToUser;
private String ToUno;
private String ToType = null;
private TUser user = new TUser();
private JPanel Top = new JPanel();
private JPanel Buttom = new JPanel();
private JPanel Left = new JPanel();
private JPanel Right = new JPanel();
private JPanel Anno = new JPanel();
private JPanel UserList = new JPanel();
private TopPanel toppanel = null;
private ChatContent chatcontent = null;
private SendPanel sendpanel = null;
private UserListPanel userlistpanel = null;
private ClientReceiveThread receiveThread;
private ObjectInputStream ois;
private ObjectOutputStream oos;
private String port;
private JScrollPane jspScroll = null;
private JTextPane jtpNote = new JTextPane();
private Socket clientSocket;//客户socket
private TCompany company = null;
private long proLong =1;
/**
* 聊天主窗体 构造函数
* @param clientSocket 客户端 socket
* @param ois 输入流
* @param oos 输出流
* @param port 端口好
* @param user 用户类
* @param company 公司
*/
public ChatFrame(final Socket clientSocket,final ObjectInputStream ois ,final ObjectOutputStream oos ,String port,TUser user,TCompany company){
super("聊天窗体");
this.ois = ois;
this.oos = oos;
this.port = port;
this.user = user;
this.clientSocket = clientSocket;
this.company = company;
Tools.setFont(new Font("宋体",Font.PLAIN,12));
toppanel = new TopPanel(this);
chatcontent = new ChatContent(this);
userlistpanel= new UserListPanel(this,company);
this.ToUser = userlistpanel.getToUser();
this.getToppanel().getUserID().setText(user.getUTERM());
JTextPane jtpSend = chatcontent.getJtpchatcontent();
sendpanel = new SendPanel(chatcontent);
Container c = this.getContentPane();
c.setLayout(new BoxLayout(c,BoxLayout.Y_AXIS));
Top.setLayout(new BoxLayout(Top,BoxLayout.Y_AXIS));
Top.add(toppanel);
Top.setPreferredSize(new Dimension(495,30));
Top.setMaximumSize(new Dimension(1024,30));
Buttom.setLayout(new BoxLayout(Buttom,BoxLayout.X_AXIS));
Buttom.setPreferredSize(new Dimension(500,400));
Buttom.setMaximumSize(new Dimension(1024,685));
Right.setPreferredSize(new Dimension(154,400));
Right.setMaximumSize(new Dimension(154,685));
Buttom.add(Left);
Buttom.add(Right);
Left.setLayout(new BoxLayout(Left,BoxLayout.Y_AXIS));
Left.setPreferredSize(new Dimension(338,265));
Left.add(chatcontent);
Left.add(sendpanel);
Right.setLayout(new BoxLayout(Right,BoxLayout.Y_AXIS));
//边框
Border border = null ;
border = BorderFactory.createTitledBorder(border,"公告");
Anno.setPreferredSize(new Dimension(148,130));
Anno.setMaximumSize(new Dimension(154,134));
Anno.setBackground(new Color(253,253,253));
Anno.setBorder(border);
jtpNote.setPreferredSize(new Dimension(137,95));
jtpNote.setBackground(Color.WHITE);
// 滚动条
jspScroll = new JScrollPane(jtpNote,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
Anno.add(jspScroll);
// UserList.setPreferredSize(new Dimension(158,273));
// UserList.setMaximumSize(new Dimension(155,535));
// UserList.setBackground(new Color(233,241,249));
UserList.add(userlistpanel);
Right.add(Anno);
Right.add(UserList);
c.add(Top);
c.add(Buttom);
this.pack();
this.setSize(505,465);
this.setLocation(300,100);
this.setVisible(true);
//打开接收线程
receiveThread = new ClientReceiveThread(ois,oos,this);
receiveThread.start();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/**
* windows窗体监听
*/
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
//发下线包
SrcPackage downLinePackage=new SrcPackage();
downLinePackage.setData(null);
downLinePackage.setFrom(ChatFrame.this.user.getUNO());
downLinePackage.setTo(SrcPackage.SERVER_ID);
downLinePackage.setType(SrcPackage.DOWNLINE_TYPE);
downLinePackage.setTomeno(ChatFrame.this.user.getUTERM());
try {
oos.writeObject(downLinePackage);
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
try {
Thread.sleep(100);
} catch (InterruptedException e2) {
// TODO 自动生成 catch 块
e2.printStackTrace();
}
//关闭和服务器通讯的Socket
try {
ois.close();
oos.close();
clientSocket.close();
receiveThread.setTag(true);
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
}
});
}
/**
* 获取聊天窗体的顶部面板
* @return
*/
public TopPanel getToppanel() {
return toppanel;
}
/**
* 获取聊天内容面板
* @return
*/
public ChatContent getChatcontent() {
return chatcontent;
}
/**
* 获取按钮面板
*/
public JPanel getButtom() {
return Buttom;
}
/**
* 获取聊天窗体的左边面板
* @return
*/
public JPanel getLeft() {
return Left;
}
/**
* 获取聊天窗体的右边面板
* @return
*/
public JPanel getRight() {
return Right;
}
/**
* 获取聊天窗体的发送面板
* @return
*/
public SendPanel getSendpanel() {
return sendpanel;
}
/**
* 获取顶部面板
* @return
*/
public JPanel getTop() {
return Top;
}
/**
* 获取聊天窗体的用户列表面板
* @return
*/
public UserListPanel getUserlistpanel() {
return userlistpanel;
}
/**
* 获取聊天窗体的公告面板
* @return
*/
public JPanel getAnno() {
return Anno;
}
/**
* 获取聊天窗体的用户列表树
* @return
*/
public JPanel getUserList() {
return UserList;
}
/**
* 传进来的端口号
* @return
*/
public String getPort() {
return port;
}
/**
*
* @return
*/
public String getToUser() {
return ToUser;
}
/**
* 获取聊天窗体的滚动条
* @return
*/
public JScrollPane getJspScroll() {
return jspScroll;
}
/**
* 获取聊天窗体的公告显示框
* @return
*/
public JTextPane getJtpNote() {
return jtpNote;
}
/**
* 获取输入流
* @return
*/
public ObjectInputStream getOis() {
return ois;
}
/**
* 获取输出流
* @return
*/
public ObjectOutputStream getOos() {
return oos;
}
/**
* 保存设置聊天对象
* @param toUser 聊天对象的昵称
*/
public void setToUser(String toUser) {
ToUser = toUser;
}
/**
* 获取用户对象的实例
* @return
*/
public TUser getUser() {
return user;
}
/**
* 设置用户对象的实例
* @return
*/
public void setUser(TUser user) {
this.user = user;
}
/**
* 获取聊天对象的编号
* @return
*/
public String getToUno() {
return ToUno;
}
/**
* 保存设置聊天对象的编号
* @param toUno
*/
public void setToUno(String toUno) {
ToUno = toUno;
}
/**
* 获取聊天的类型
* @return
*/
public String getToType() {
return ToType;
}
/**
* 设置聊天的类型(公司,部门,个人)
* @param toType 类型
*/
public void setToType(String toType) {
ToType = toType;
}
/**
* 获取客户端socket
* @return
*/
public Socket getClientSocket() {
return clientSocket;
}
/**
* 获取客户端接收线程
* @return
*/
public ClientReceiveThread getReceiveThread() {
return receiveThread;
}
/**
* 获取公司
* @return
*/
public TCompany getCompany() {
return company;
}
public long getProLong() {
return proLong;
}
public void setProLong(long proLong) {
this.proLong = proLong;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -