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

📄 chatclient.java

📁 一个简单的聊天室程序
💻 JAVA
字号:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;

public class ChatClient extends Thread implements ActionListener,ListSelectionListener
{
		private JFrame FClient;
		private JPanel PClient;
		private JPanel PUser;
		private JPanel PChat;
		private JPanel PWin;
		private JPanel PChat1;
		private JPanel PChat2;
		private JTextArea TPub_win,TMy_win;
		private JScrollPane sp1,sp2,sp3;
		private JList LUser;
		private JTextField T1,T2,TChater;
		private JLabel L1,L2,L3,LChater;
		private JButton B1,B2;
		private JComboBox CUser,CFace;
					 //String chatname;
					 //ChatMessage msg=new ChatMessage();
					String messageType=new String();
					String ChatName=new String();
					String ToChatName=new String();
					String ChatMsg=new String();
					String ChatFace=new String();
					ObjectOutputStream ToServer;
					ObjectInputStream FromServer;
		static Vector vector=new Vector(1,1);
					Socket toServer;
					String server="127.0.0.1";
		public ChatClient()
		{
			try
			{
				
				toServer=new Socket(server,1001);
				ToServer=new ObjectOutputStream(toServer.getOutputStream());
				FromServer=new ObjectInputStream(toServer.getInputStream());
			}
			catch(Exception e)
			{
				JOptionPane.showMessageDialog(FClient," 服务器没有打开 ","服务器连接错误",JOptionPane.ERROR_MESSAGE);
				System.exit(0);
				System.out.println("Error: "+e);
			}
			
						
			//******************************
			//界面开始
			//******************************
			FClient=new JFrame();
			PClient=new JPanel();
			PUser=new JPanel();
			PChat=new JPanel();
			PWin=new JPanel();
			PChat1=new JPanel();
			PChat2=new JPanel();
			TPub_win=new JTextArea();
			TPub_win.setEditable(false);
			TMy_win=new JTextArea();
			TMy_win.setEditable(false);
			sp1=new JScrollPane();
			sp2=new JScrollPane(TPub_win);
			sp3=new JScrollPane(TMy_win);
			LUser=new JList();
			LUser.setFixedCellWidth(150);
			//T1=new JTextField("a");
			T2=new JTextField(30);
			L1=new JLabel("我对");
			L2=new JLabel("说:");
			L3=new JLabel();
			B1=new JButton("发送");
			B2=new JButton("退出");
			String Expression[]={" ","微笑着","友好的","愤怒的","无奈的","傻笑着","悲伤的","高兴的","不耐烦的","兴高彩烈的","神秘兮兮的","伤心欲绝的","破口大骂的","得意洋洋的"};
			//String Expression1[]={"abc"};
			TChater=new JTextField("所有人");
			TChater.setEditable(false);
			LChater=new JLabel();
			CUser=new JComboBox();
			CFace=new JComboBox(Expression);						
			FClient.getContentPane().add(PClient);		
			PUser.setLayout(new BorderLayout());
			sp1=new JScrollPane(LUser);		
			PUser.add("Center",sp1);		
			PWin.setLayout(new BorderLayout());
			JSplitPane jsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,sp2,sp3);
			jsp.setDividerLocation(450);
			//jsp.setOneTouchExpandable(true);
			//PChat2.setLayout(new BorderLayout());
			//PChat2.add(LChater);
			//PChat2.add(L3);
			//PChat2.add(B2);
			//PWin.add("North",PChat2);
			PWin.add(jsp);
			
			PChat.setLayout(new BorderLayout());
			PChat1.add(LChater);PChat1.add(L3);PChat1.add(L1);PChat1.add(TChater);PChat1.add(CFace);PChat1.add(L2);PChat1.add(T2);PChat1.add(B1);PChat1.add(B2);
			B1.addActionListener(this);
			B2.addActionListener(this);
			T2.addKeyListener(new VKENTER());
			LUser.addListSelectionListener(this);
			PChat.add(PChat1);
			
			FClient.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e)
			{
				try
				{
					if(LChater.getText().length()!=0)
					{
						ChatMessage msg=new ChatMessage("LoginOut",LChater.getText(),null,null,null);
						SentToServer(msg);
						System.out.println("Close window");
						System.exit(0);
					}
				}
				catch(Exception ex)
				{
					System.out.println("Error: "+ex);
				}
			}
			});
			
			
			PClient.setLayout(new BorderLayout());
			PClient.add("West",PUser);
			PClient.add("Center",PWin);
			PClient.add("South",PChat);
			
			Toolkit tk=Toolkit.getDefaultToolkit();
			Dimension d=tk.getScreenSize();
			int screenwidth=d.width;
			int screenheight=d.height;
			FClient.setLocation(screenwidth/8,screenheight/8);
			
			FClient.setTitle("聊天室客户端");
			FClient.setSize(800,600);
			FClient.setVisible(true);
			FClient.setDefaultCloseOperation(3);
			//******************************
			//界面结束
			//******************************
			//vector.addElement("所有人");
			this.start();
		}

		public void actionPerformed(ActionEvent e)
		{
			Object source=e.getSource();		
			if(source==B1)//发送聊天信息
				{
					try
					{
						if(T2.getText().length()==0)
						{
							JOptionPane.showMessageDialog(FClient,"  不 能 发 空 消 息 !","内容为空",JOptionPane.NO_OPTION);
						}
						else
						{
							SentToServer(Msg());
						}
					}
					catch(Exception ex)
					{
						System.out.println("Error: "+ex);
					}
				}
			else if(source==B2)//退出聊天
			{
				try
				{
					ChatMessage msg=new ChatMessage("LoginOut",LChater.getText(),null,null,null);
					SentToServer(msg);
					System.exit(0);
				}
				catch(Exception ex)
				{
					System.out.println("Error: "+ex);
				}
			}
		}
		
		public void run()
		{
			try
			{
				while(true)
				{	
					ChatMessage msg=(ChatMessage)FromServer.readObject();//读取流中的内容
					System.out.println("messageType"+" "+msg.messageType);
					System.out.println("ChatName"+" "+msg.ChatName);
					System.out.println("ToChatName"+" "+msg.ToChatName);
					System.out.println("vector"+" "+msg.vector);
					System.out.println("-------------------------------------");
					if(msg.messageType.equals("Login"))
					{
						addLUser(msg);
					}
					else if(msg.messageType.equals("toall"))
					{
						if(msg.ToChatName.equals("所有人"))
						{
							TPub_win.append(msg.ChatMsg+"\n");
						}
						else
						{
							if(msg.ToChatName.equals(LChater.getText())||msg.ChatName.equals(LChater.getText()))
							{
								TMy_win.append(msg.ChatMsg+"\n");
							}	
						}			
					}
					else if(msg.messageType.equals("LoginOut"))
					{
						addLUser(msg);
						TPub_win.append(msg.ChatName+" 离开了聊天室"+"\n");
					}
					else if(msg.messageType.equals("Closed"))
					{
						TPub_win.append(" 服务器已经关闭 "+"\n");
						toServer.close();
					}
					/*
					else if(msg.messageType.equals("Error"))
					{
						if(!TChater.getText().equals(msg.ChatName))
						{
							JOptionPane.showMessageDialog(FClient," 用户名重复 ","关于",JOptionPane.INFORMATION_MESSAGE);
							System.exit(0);
						}
						
					}*/
				}
			}
			catch(Exception e)
			{}
		}
		class VKENTER extends KeyAdapter
		{
			public void keyPressed(KeyEvent e)
			{
				if(e.getKeyCode()==KeyEvent.VK_ENTER)
				{
					SentToServer(Msg());	
				}
			}
		}
		
//发送给服务器	
		public void SentToServer(ChatMessage cm)
		{
			try
			{
				ChatMessage toServer=cm;
				if(toServer.messageType.equals("Login"))
				{
					TPub_win.append("欢迎"+cm.ChatName+"进入聊天室"+"\n");
					ToServer.writeObject(toServer);
					LChater.setText(toServer.ChatName);
				}
				else if(toServer.messageType.equals("toall"))
				{
					if(toServer.ChatName.equals(toServer.ToChatName))
					{
						TMy_win.append("不能对自己私聊"+"\n");
					}
					else
					{
						ToServer.writeObject(toServer);
					}
				}
				
				else if(toServer.messageType.equals("LoginOut"))
				{
					
					ToServer.writeObject(toServer);
				}
				
			}
			catch(Exception e)
			{}
		}
//向列表添加用户,在状态栏显示在线人数	
		void addLUser(ChatMessage cm)
		{
			if(cm.messageType.equals("Login"))
			{
				vector=cm.vector;
				LUser.removeAll();
				LUser.setListData(vector);
				if(!LChater.getText().equals(cm.ChatName))
				{
					vector.addElement(cm.ChatName);
					LUser.removeAll();
					LUser.setListData(vector);
					int i=vector.size();
					TPub_win.append("欢迎"+cm.ChatName+"进入聊天室"+"\n");
					L3.setText("现在共有"+(i-1)+"人");
				}
				else
				{
					int i=vector.size();
					L3.setText("现在共有"+(i-1)+"人");
				}
			}
			else if(cm.messageType.equals("LoginOut"))
			{
//				vector=cm.vector;
				vector.remove(cm.ChatName);
				LUser.removeAll();
				LUser.setListData(vector);
				int i=vector.size();
				TPub_win.append("欢迎"+cm.ChatName+"进入聊天室"+"\n");
				L3.setText("现在共有"+(i-1)+"人");
			}
		}
		
//	获取页面的内容
	  public ChatMessage Msg()
		  {
			  
			  ChatName=LChater.getText();//说话人
			  ToChatName=TChater.getText();//和谁说
			  ChatFace=(String)CFace.getSelectedItem();
			  ChatMsg=ChatName+"对"+ToChatName+ChatFace+"说:"+T2.getText();//聊天内容
			  ChatMessage msg=new ChatMessage("toall",ChatName,ToChatName,ChatMsg,null);
			  T2.setText("");
			  return msg;
		  }
		  
	public void valueChanged(ListSelectionEvent evt)
		{
			TChater.setText((String)LUser.getSelectedValue());
		}	
}

⌨️ 快捷键说明

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