首页>代码>Java基于swing的学院管理系统>/EndDom/src/cn/com/cssve/chat/Client.java
/*
 * Client.java
 *
 * Created on __DATE__, __TIME__
 */

package cn.com.cssve.chat;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.StringTokenizer;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import cn.com.zh.entity.User;
import cn.com.zh.ui.MainFrame;

public class Client extends javax.swing.JFrame {

	Socket socket;
	String clientName;

	private PrintWriter out;
    User u;
	public Client(Socket socket, String name,User u) {
		this.socket = socket;
		this.clientName = name;
		this.u=u;
		setTitle("欢迎【" + name + "】来到无聊【聊天室】");
		initComponents();
		new ChatThread(socket).start();
		
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				setVisible(false);
			}
		});
	}

	//会话层
	class ChatThread extends Thread {
		private Socket socket;

		public ChatThread(Socket socket) {
			this.socket = socket;
		}

		@Override
		public void run() {
			try {
				out = new PrintWriter(socket.getOutputStream(), true);
				BufferedReader br = new BufferedReader(new InputStreamReader(
						socket.getInputStream()));
				new GetThread(br).start();
				out.println(clientName);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	//获取信息
	class GetThread extends Thread {
		private BufferedReader br;

		public GetThread(BufferedReader br) {
			this.br = br;
		}

		@Override
		public void run() {
			try {
				while (true) {
					String msg = br.readLine();
					System.out.println(msg);
					//判断服务器是否已经关闭,或者被踢出来
					if (msg == null) {
						break;
					}
					if (msg.startsWith("list:")) {
						DefaultListModel dlm = new DefaultListModel();
						String list = msg.substring(5);
						StringTokenizer st = new StringTokenizer(list, "[,]");
						System.out.println(st);
						while (st.hasMoreTokens()) {
							dlm.addElement(st.nextToken());
						}
						jList1_user.setModel(dlm);
					} else {
						SimpleDateFormat sdf = new SimpleDateFormat(
								"yyyy年MM月dd日  HH:mm:ss");
						String getTime = sdf.format(new Date());
						jTextArea1.append(getTime+"\n"+msg + "\n");
					}
				}
			} catch (IOException e) {
			} finally {
				JOptionPane
						.showMessageDialog(
								null,
								"<html>与主机失去联系!发生错误的原因可能有:<br>①您的昵称已经存在,请更改<br>②服务器已经关闭,请等待服务器重新启动<br>③您被管理员踢出来了!请注意遵守聊天室规则</html>");
//				new ChatLoginInterface().setVisible(true);
				Client.this.dispose();
			}
			
		}
	}

	//GEN-BEGIN:initComponents
	// <editor-fold defaultstate="collapsed" desc="Generated Code">
	private void initComponents() {

jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jList1_user = new javax.swing.JList(new DefaultListModel<>());
jScrollPane2 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jTextField_import = new javax.swing.JTextField();
jButton_send = new javax.swing.JButton();
jComboBox1 = new javax.swing.JComboBox();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanel1.setBackground(new java.awt.Color(204, 255, 204));

jList1_user.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0), "\u7528\u6237\u5217\u8868", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("楷体", 1, 14)));
jList1_user.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jList1_user.setDebugGraphicsOptions(javax.swing.DebugGraphics.NONE_OPTION);
jScrollPane1.setViewportView(jList1_user);

jTextArea1.setColumns(20);
jTextArea1.setRows(5);
jScrollPane2.setViewportView(jTextArea1);

jButton_send.setText("\u53d1  \u9001");
jButton_send.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton_sendActionPerformed(evt);
}
});

jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "群      聊", "私      聊" }));

javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jTextField_import, javax.swing.GroupLayout.PREFERRED_SIZE, 357, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton_send)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(jScrollPane2)))
.addContainerGap(22, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(24, 24, 24)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 235, Short.MAX_VALUE)
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 235, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jTextField_import, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton_send)
.addComponent(jComboBox1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(31, Short.MAX_VALUE))
);

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);

pack();
}
	//点击发送按钮
	private void jButton_sendActionPerformed(java.awt.event.ActionEvent evt) {
		String text = jTextField_import.getText().trim();
		//在下一次输入的时候将输入框清空
		jTextField_import.setText("");
		if (text.equals("")) {
			JOptionPane.showMessageDialog(null, "发送的消息不能为空,请输入内容之后再发送!");
		}else{
			// 获得发送消息的类型
			int index=jComboBox1.getSelectedIndex();
			if (index==0) {//群聊
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
				String getTime = sdf.format(new Date());
				out.println(clientName + ":all:" + text);
//				jTextArea1.append(getTime+"\n"+clientName+"对所有人说:"+text+"\n");
			}else{//私聊
				int item = jList1_user.getSelectedIndex();
				if (item==-1) {
				   JOptionPane.showMessageDialog(null, "私聊必须选择一个用户");
				}else{
					String name = jList1_user.getSelectedValue().toString();
					if (name.equals(clientName)) {
						 JOptionPane.showMessageDialog(null, "您不能和自己私聊");
						 jTextField_import.setText("");
					}else{
						SimpleDateFormat sdf = new SimpleDateFormat(
								"yyyy年MM月dd日  HH:mm:ss");
						String getTime = sdf.format(new Date());
					jTextArea1.append(getTime+"\n"+clientName + "对" + name + "说:"+text);
					out.println(clientName + ":" + item + ":" + text);
					}
				}
			}
		}
	}

	//	public static void main(String args[]) {
	//		java.awt.EventQueue.invokeLater(new Runnable() {
	//			public void run() {
	////				new Client().setVisible(true);
	//			}
	//		});
	//	}

	//GEN-BEGIN:variables
	// Variables declaration - do not modify
	private javax.swing.JButton jButton_send;
	private javax.swing.JComboBox jComboBox1;
	private javax.swing.JList jList1_user;
	private javax.swing.JPanel jPanel1;
	private javax.swing.JScrollPane jScrollPane1;
	private javax.swing.JScrollPane jScrollPane2;
	private javax.swing.JTextArea jTextArea1;
	private javax.swing.JTextField jTextField_import;
	// End of variables declaration//GEN-END:variables

}
最近下载更多
DoustrongWU  LV5 2月21日
sunshine9920  LV12 2023年10月22日
rain112  LV31 2022年6月16日
testuser1234567  LV24 2022年5月31日
ming_123_9715  LV23 2022年5月3日
rodert  LV14 2022年4月29日
wangxin199804  LV9 2022年4月3日
wyx065747  LV67 2022年4月2日
978806986  LV16 2022年3月24日
543666826  LV34 2022年3月12日
最近浏览更多
pxqtsht  LV16 2月21日
DoustrongWU  LV5 2月17日
zrq1025  LV11 2024年11月25日
krispeng  LV14 2024年9月17日
ZALZXB20030525 2024年7月1日
暂无贡献等级
heshao  LV2 2024年6月4日
hfffff  LV1 2024年6月3日
MrDuan  LV2 2024年5月15日
akittyboy  LV9 2024年3月22日
jiayongchao258  LV9 2023年12月28日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友