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

📄 chatframe.java

📁 模仿腾讯QQ的
💻 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 + -