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

📄 chatclient.java

📁 聊天室源代码,可以实现多用户同时聊天,欢迎其他同行斧正
💻 JAVA
字号:
package net;

import java.io.*;
import java.net.*;
import java.util.*;

import javax.swing.*;
import java.awt.event.*;

public class ChatClient {
	JFrame jf;
	JTextArea jta;
	JTextField jtf;
	JComboBox jcb;
	Socket s;
	BufferedReader in;
	PrintWriter out;
	List users;
	
	public ChatClient(String name){
		jf=new JFrame("QQ_"+name);
		jf.setSize(400,300);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		jta=new JTextArea();
		jta.setEditable(false);
		JScrollPane jsp=new JScrollPane(jta);
		jtf=new JTextField();
		
		jcb=new JComboBox();  //创建下拉列表
		jcb.addItem("all");   //加上all
		
		jf.getContentPane().add(jcb,"North");  //下拉列表放在上边
		jf.getContentPane().add(jsp);
		jf.getContentPane().add(jtf,"South");
		
		jf.setVisible(true);
		
		try {
			s=new Socket("localhost",9000);
			users=new LinkedList();
			in=new BufferedReader(new InputStreamReader(s.getInputStream()));
			out=new PrintWriter(s.getOutputStream());
			out.println(name);    //把用户姓名发给服务器
			out.flush();
		} catch (IOException e) {
		}
		
		class MyListener implements ActionListener{
			public void actionPerformed(ActionEvent e) {
				out.println(jcb.getSelectedItem());  //获得下列拉表中的值,并发送,也就是发给谁
				out.println(jtf.getText());			//发送textfield的内容
				jtf.setText("");
				out.flush();
			}			
		}
		
		ActionListener al=new MyListener();
		jtf.addActionListener(al);
		
		input();
	}
	
	public void input(){
		while(true){
			try {
				String str = in.readLine();  //读到的内容
				//若内容中含JComboBox,则说明要加入一个上线用户,在下拉列表中加入此用户姓名
				if(str.indexOf("JComboBox")==0){   
					String name=str.substring(9,str.length());
					if(!users.contains(name)){ //若此在线用户链表中不含此姓名,则
						jta.append(name+"正在聊天室\n");
						users.add(name);		//则在线用户链表中加入
						jcb.addItem(name);		//则下拉列表中加入
					}					
				}
				else if(str.indexOf("comIng")==0){   
					String name=str.substring(6,str.length());
					if(!users.contains(name)){ //若此在线用户链表中不含此姓名,则
						jta.append(name+"进入聊天室\n");
						users.add(name);		//则在线用户链表中加入
						jcb.addItem(name);		//则下拉列表中加入
					}					
				}
				//若内容中含removeItem,则说明要删除一个上线用户,在下拉列表中删除此用户姓名
				else if(str.indexOf("removeItem")==0){
					String name=str.substring(10,str.length());
					users.remove(name);			//则在线用户链表中删除
					jcb.removeItem(name);		//则下拉列表中删除
				}
				else jta.append(str+"\n");
			} catch (IOException e) {
				e.printStackTrace();
			}			
		}		
	}
	
	public static void main(String[] args) throws Exception{
		if(args.length<1){
			System.out.println("your account name is needed, the word of 'all' can't be used!");
			return;
		}
		if(args[0].equals("all")){
			System.out.println("the word of 'all' can't be used!");
			return;
		}
		new ChatClient(args[0]);
	}
}

⌨️ 快捷键说明

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