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

📄 clientchat.java

📁 java 聊天室源码
💻 JAVA
字号:
/**
 * 客户端程序代码
 * 2006-07-31
 */
package com.neworiental.mj.mingregister;

import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;


public class ClientChat implements Runnable{
	private static final boolean iFlag = true;
	private final JFrame clientFrame;
	//private final JTree clientTree;
	private final JLabel clientLabel;
	private JList clientList;
	private final JTextArea clientTextArea;
	private final JPanel clientPanel;
	private final JButton clientSend;
	private final JTextField clientField;
	private Socket s;
	private String userName;
	private ArrayList usersList ;
	private InputStream is;
	private OutputStream os;
	
	/**
	 * 构造函数:创建客户端窗体。
	 * @param clientFrame
	 */
	public ClientChat(String userName){
		//connect to Server
		this.userName = userName;
		usersList =  new ArrayList();
		try{
			s = new Socket("127.0.0.1",8888);

			is = s.getInputStream();
			//将username传给服务器
			os = s.getOutputStream() ;				
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
			PrintWriter pw = new PrintWriter(bw,true);	
			pw.println(userName);
		}catch(Exception e){
			e.printStackTrace() ;
		}
		//初始化聊天目录
		/*
		DefaultMutableTreeNode temp = new DefaultMutableTreeNode("temp");		
		DefaultMutableTreeNode cityFirst = new DefaultMutableTreeNode("北京");
		temp.add(cityFirst);
		DefaultMutableTreeNode citySecond = new DefaultMutableTreeNode("上海");
		temp.add(citySecond);		
		DefaultMutableTreeNode cityFirstRoom1 = new DefaultMutableTreeNode("ChatRoom1");		
		cityFirst.add(cityFirstRoom1);
		DefaultMutableTreeNode cityFirstRoom2 = new DefaultMutableTreeNode("ChatRoom2");		
		cityFirst.add(cityFirstRoom2);
		DefaultMutableTreeNode citySecondRoom1 = new DefaultMutableTreeNode("ChatRoom1");		
		citySecond.add(citySecondRoom1);
		DefaultMutableTreeNode citySecondRoom2 = new DefaultMutableTreeNode("ChatRoom2");		
		citySecond.add(citySecondRoom2);
		
		*/
		
		clientFrame = new JFrame("Welcome!");
		/**
		clientTree = new JTree(temp);
		clientTree.setRootVisible(false);
		*/
		
		clientList = new JList();
		clientTextArea = new JTextArea();
		clientPanel = new JPanel();
		//ImageIcon ii = new ImageIcon("hanabi.gif");
		clientLabel = new JLabel("欢迎光临!");
		
		clientField = new JTextField("send........");
		clientSend = new JButton("send");
		
		Thread tt = new Thread(this);
		tt.start() ;
		
	}
	
	/**
	 * 客户窗体初始化显示
	 *
	 */
	public void initComponent(){
		clientFrame.validate();
		
		//中间垂直分割条
		JSplitPane jspMiddle = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT  );
		jspMiddle.setOneTouchExpandable(true);
		
		
		//左边水平分割条
		JSplitPane jspLeft = new JSplitPane(JSplitPane.VERTICAL_SPLIT );
		jspLeft.setOneTouchExpandable(true);		
		jspMiddle.setLeftComponent(jspLeft);
		
		
		//jspLeft.setTopComponent( new JScrollPane(clientTree));
		jspLeft.setTopComponent( new JScrollPane(clientLabel));
		jspLeft.setBottomComponent( new JScrollPane(clientList));
		
		//右边水平分割条
		JSplitPane jspRight = new JSplitPane(JSplitPane.VERTICAL_SPLIT );
		jspRight.setOneTouchExpandable(true);
		jspMiddle.setRightComponent(jspRight);	
		
		jspRight.setTopComponent( new JScrollPane(clientTextArea));
		jspRight.setBottomComponent( new JScrollPane(clientPanel));
		
		//对右下边的面板进行设置
		clientPanel.setLayout(new GridLayout(2,2));
		clientPanel.add(clientField);
		clientPanel.add(clientSend);
		
		//对send按钮添加监听方式
		clientSend.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent e) {
								
				try{
						
				BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
				PrintWriter pw = new PrintWriter(bw,true);				
				pw.println(ClientChat.this.userName + "said: " + clientField.getText());
				
				}catch(Exception e1){
						e1.printStackTrace() ;
				}
			}
			
		});
		
	
		//将中间分割条面板作为窗体面板加入窗体中
		clientFrame.setContentPane(jspMiddle);
		clientFrame.pack();
		
		//设置窗体最大化
		clientFrame.setBounds((GraphicsEnvironment.getLocalGraphicsEnvironment()
				.getMaximumWindowBounds()));
		
		//设置各个分割条在窗体上的位置
		jspMiddle.setDividerLocation((int)(clientFrame.getSize().width *0.2));
		jspLeft.setDividerLocation((int)( clientFrame.getSize().height *0.4));
		jspRight.setDividerLocation( (int)(clientFrame.getSize().height * 0.7));
		
		
		
		clientFrame.setVisible( true);
		clientFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
	}
	
	/**
	 * 在客户端的左下端JList中显示当前聊天室在线的用户列表。
	 * @param args
	 */
	 
	public void run() {
		// TODO Auto-generated method stub
		String str1= new String("");
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			while((str1=br.readLine())!=null){
			   if(str1.indexOf("said:")<=0){
				  String[] temp = str1.split("@");
				  clientList.setListData(temp);
					SwingUtilities.invokeLater(new Runnable() {
						public void run() {
							clientList.repaint();
						}
					});
			   }else{
				   clientTextArea.setText (clientTextArea.getText()+"\n"+str1);
			   }
			}
		}catch(Exception e){
			e.printStackTrace() ;
		}			
	}	
}

⌨️ 快捷键说明

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