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

📄 chatclient.java

📁 此源码是个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 sp2,sp3;
		private JList LUser;
		private JTextField T2,TChater;
		private JLabel L1,L2,L3,LChater;
		private JButton B1,B2;
		//private JComboBox 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[]={" ","微笑着","友好的","愤怒的","无奈的","傻笑着","悲伤的","高兴的","不耐烦的","兴高彩烈的","神秘兮兮的","伤心欲绝的","破口大骂的","得意洋洋的"};
			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(300);
			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(600,500);
			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());
//		}	
    public static void main(String[]arg)
    {
    	new ChatClient();
    }		
}

⌨️ 快捷键说明

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