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

📄 main.java

📁 聊天系统。1、聊天 2、传文件 3、多人聊天
💻 JAVA
字号:

package com.client;

import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.sql.* ;
import com.server.DataBase ;

/**
 * @author gt.Cloud
 * 
 * TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class Main extends JFrame implements ActionListener, Runnable {
	JTextField tt = new JTextField();

	JTextArea cc = new JTextArea();

	JComboBox c_user = new JComboBox();

	private Socket s;
	private String u ;

	public void setSocket(Socket s , String username) {
		this.s = s;
		this.u = username ;
	}

	Main(boolean b1 , boolean b2) {
		this.setTitle(u) ;
		//设置窗体属性
		this.setSize(400, 600);
		this.setResizable(false);

		int width = (int) Toolkit.getDefaultToolkit().getScreenSize()
				.getWidth();
		int height = (int) Toolkit.getDefaultToolkit().getScreenSize()
				.getHeight();
		this.setLocation((width - 400) / 2, (height - 600) / 2);

		//new一大堆组件
		JMenuBar menuBar = new JMenuBar() ;
		JMenu m_control = new JMenu("操作") ;
		JMenuItem mi_email = new JMenuItem("发送邮件") ;
		JMenuItem mi_note = new JMenuItem("发送通知") ;
		mi_note.setVisible(b1) ;
		JMenuItem mi_exit = new JMenuItem("退出") ;
		JMenu m_menage = new JMenu("信息") ;
		JMenuItem mi_personal = new JMenuItem("个人信息") ;
		JMenuItem mi_modifypass = new JMenuItem("修改密码") ;
		JMenuItem mi_modify = new JMenuItem("查找并修改") ;
		mi_modify.setVisible(b2) ;
		JMenu m_friend = new JMenu("好友") ;
		m_friend.setVisible(b2) ;
		JMenuItem mi_addf = new JMenuItem("添加用户") ;
		JMenuItem mi_movef = new JMenuItem("查找并删除") ;
		
		JButton b_send = new JButton("发送");
		JButton b_file = new JButton("文件传送");
		JScrollPane p_cc = new JScrollPane(cc); //设置滚动条

		c_user.addItem("All");
		
		//布置菜单
		m_control.add(mi_email) ;
		m_control.add(mi_note) ;
		m_control.add(mi_exit) ;
		m_menage.add(mi_personal) ;
		m_menage.add(mi_modifypass) ;
		m_menage.add(mi_modify) ;
		m_friend.add(mi_addf) ;
		m_friend.add(mi_movef) ;
		menuBar.add(m_control) ;
		menuBar.add(m_menage) ;
		menuBar.add(m_friend) ;
		this.setJMenuBar(menuBar) ;
		//注册事件监听
		mi_email.addActionListener(this) ;
		mi_note.addActionListener(this) ;
		mi_exit.addActionListener(this) ;
		mi_personal.addActionListener(this) ;
		mi_modifypass.addActionListener(this) ;
		mi_modify.addActionListener(this) ;
		mi_addf.addActionListener(this) ;
		mi_movef.addActionListener(this) ;
		b_send.addActionListener(this);
		b_file.addActionListener(this);
;
		
		//布置小面板
		JPanel p_xiao = new JPanel();
		p_xiao.setLayout(new GridLayout(1, 3));

		p_xiao.add(c_user);
		p_xiao.add(b_send);
		p_xiao.add(b_file);

		//布置大面板
		JPanel p_da = new JPanel();
		p_da.setLayout(new GridLayout(2, 1));

		p_da.add(tt);
		p_da.add(p_xiao);

		//布置窗体
		this.setLayout(new BorderLayout());
		
		this.add(p_da, BorderLayout.NORTH);
		this.add(p_cc, BorderLayout.CENTER);

		//读聊天记录
		try {
			File f = new File("d:/聊天记录.wy");

			FileReader fr = new FileReader(f);
			BufferedReader br = new BufferedReader(fr);

			while (br.ready()) {
				cc.append(br.readLine() + "\n");
			}
		} catch (Exception ee) {
		}

		//启动线程
		Thread t = new Thread(this);
		t.start();

	}

	/*
	 * (非 Javadoc)
	 * 
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	public void actionPerformed(ActionEvent arg0) {
		if (arg0.getActionCommand().equals("发送")) {
			//tt------------------------->cc
			cc.append("对"+c_user.getSelectedItem()+"说:"+tt.getText() + "\n");

			//tt------------------------->file 聊天记录
			try {
				File f = new File("d:/聊天记录.wy");

				FileWriter fw = new FileWriter(f, true);
				PrintWriter pw = new PrintWriter(fw);

				pw.println(tt.getText());

				pw.close();
			} catch (Exception e) {
			}
			//(12)
			//tt------------------------->server
			try {
				OutputStreamWriter osw = new OutputStreamWriter(s
						.getOutputStream());
				PrintWriter pw = new PrintWriter(osw, true);

				pw.println("xiaoxi%"+u+"%"+c_user.getSelectedItem() + "%" + tt.getText());
			} catch (Exception e) {
			}

			tt.setText("");
		}
		if (arg0.getActionCommand().equals("文件传送")) {
			try {
				JFileChooser fc = new JFileChooser();
				fc.showOpenDialog(this);
				File filename = fc.getSelectedFile();

				OutputStream os = s.getOutputStream();
				OutputStreamWriter osw = new OutputStreamWriter(os);
				PrintWriter pw = new PrintWriter(osw, true);

				pw.println("file%" + c_user.getSelectedItem() + "%"
						+ filename.getName() );

				byte tmp[] = new byte[4096];

				FileInputStream fis = new FileInputStream(filename);

				int ll = 0;
				while (ll != -1) {
					ll = fis.read(tmp);
					os.write(tmp, 0, ll);
				}

			} catch (Exception ee) {
			}
		}
		if(arg0.getActionCommand().equals("发送邮件")){
			
		}
		if(arg0.getActionCommand().equals("发送通知")){
			NoteFrame nf = new NoteFrame() ;
			nf.setSocket(s , u ) ;
		}
		if(arg0.getActionCommand().equals("退出")){
			System.exit(0) ;
		}
		if(arg0.getActionCommand().equals("个人信息")){
			getInfo() ;
		}
		if(arg0.getActionCommand().equals("修改密码")){
			ModifyPass mp = new ModifyPass() ;
			mp.setSocket(s , u) ;
		}
		if(arg0.getActionCommand().equals("查找并修改")){
			SearchFrame sf = new SearchFrame() ;
			sf.setSocket(s , u) ;
		}
		if(arg0.getActionCommand().equals("添加用户")){
			System.out.println ("aaaa") ;
			AddFrame af = new AddFrame() ;
			af.setSocket(s , u) ;
		}
		if(arg0.getActionCommand().equals("查找并删除")){
			SearchFrame sf = new SearchFrame() ;
			sf.setSocket(s , u) ;
		}
		
	}
	
	public void getInfo(){
		try {
			Connection cn = DataBase.getConnection() ;
			Statement st = cn.createStatement() ;
			ResultSet rs = st.executeQuery("select username,email,author from info where username='"+u+"'") ;
			if(rs.next()){
				JFrame baseInfo = new JFrame("个人信息") ;
				baseInfo.setSize(250 , 200) ;
				JPanel p_info = new JPanel() ;
				JLabel username = new JLabel("用户名:"+rs.getString(1)) ;
				JLabel email = new JLabel("邮箱:"+rs.getString(2)) ;
				JLabel author = new JLabel("身份:"+rs.getString(3)) ;
				p_info.setLayout(new GridLayout(3 , 1)) ;
				p_info.add(username) ;
				p_info.add(email) ;
				p_info.add(author) ;
				baseInfo.setLayout(new BorderLayout()) ;
				baseInfo.add(p_info , BorderLayout.CENTER) ;
				baseInfo.setResizable(false) ;
				baseInfo.setVisible(true) ;				
			}				
	    }
	    catch (Exception ex) {
	    }		
	}

	//(16)
	//接收线程
	public void run() {
		try {
			InputStream is = s.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);

			while (true) {
				String message = br.readLine();
				if(message.split("%")[0].equals("find")){
					ModifyFrame mf = new ModifyFrame() ;
					mf.setSocket(s , u ) ;
					mf.setInfo(message.split("%")[1].split("#")[0] ,message.split("%")[1].split("#")[1],message.split("%")[1].split("#")[2]) ;
					mf.init() ;
				}
				if(message.split("%")[0].equals("find_err")){
					javax.swing.JOptionPane op = new JOptionPane() ;
					op.showMessageDialog(this ,"无此人!") ;
				}
				if(message.split("%")[0].equals("note")){
					javax.swing.JOptionPane op = new JOptionPane() ;
					op.showMessageDialog(this ,message.split("%")[1]) ;
				}
				if(message.split("%")[0].equals("modify_ok")||message.split("%")[0].equals("modifypass_ok")){
					javax.swing.JOptionPane op = new JOptionPane() ;
					op.showMessageDialog(this ,"修改成功!") ;
				}
				if(message.split("%")[0].equals("modify_err")||message.split("%")[0].equals("modifypass_err")){
					javax.swing.JOptionPane op = new JOptionPane() ;
					op.showMessageDialog(this ,"修改失败!") ;
				}
				
				if(message.split("%")[0].equals("add_ok")){
					javax.swing.JOptionPane op = new JOptionPane() ;
					op.showMessageDialog(this ,"添加成功!") ;
				}
				if(message.split("%")[0].equals("add_err")){
					javax.swing.JOptionPane op = new JOptionPane() ;
					op.showMessageDialog(this ,"添加失败!") ;
				}
				
				if(message.split("%")[0].equals("remove")){
					c_user.removeItem(message.split("%")[1]) ;
				}
				if(message.split("%")[0].equals("remove_ok")){
					javax.swing.JOptionPane op = new JOptionPane() ;
					op.showMessageDialog(this ," 删除成功!") ;
				}
				if(message.split("%")[0].equals("remove_err")){
					javax.swing.JOptionPane op = new JOptionPane() ;
					op.showMessageDialog(this ,"已删除此人或无此人!") ;
				}
				if (message.split("%")[0].equals("file")) {
					FileDialog fd = new FileDialog(this, "选择文件存放位置",
							FileDialog.SAVE);
					fd.setFile(message.split("%")[1]);
					fd.setVisible(true);

					String directory = fd.getDirectory();
					String filename = fd.getFile();
					File f = new File(directory + filename);
					FileOutputStream fos = new FileOutputStream(f);
					byte tmp[] = new byte[4096];
					int ll = 0;
					while (ll < 4096) {
						ll = is.read(tmp);
						fos.write(tmp, 0, ll);
						System.out.println(ll) ;
					}

					
					JOptionPane.showMessageDialog(this , "文件接收成功") ;

					fos.close();
					f = null ;
					tmp = null ;
					
					System.gc() ;
				}
				if (message.split("%")[0].equals("user")) {
					c_user.addItem(message.split("%")[1]);
				}
				if (message.split("%")[0].equals("mess")) {
					cc.append(message.split("%")[1] + "\n");
				}
			}
		} catch (Exception e) {
			e.printStackTrace() ;
		}
	}
}

⌨️ 快捷键说明

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