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

📄 singleframe.java

📁 实现多人聊天以及私聊和传文件功能 类似于
💻 JAVA
字号:
package NewQQ;

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

class SingleFrame {
	String name;
	String me;
	JFrame jframe;
	TextArea jtextarea;
	JTextField jtextfield;
	JButton jbutton;
	JButton jbuttonrecv;
	JButton jbuttonrefuse;
	JPanel jpanel;
	ObjectOutputStream oos;
	HashMap user;
	String file;
	String savefile;
	JFileChooser chooser = new JFileChooser();
	public SingleFrame(String name,ObjectOutputStream oos,HashMap user,String me){
		this.name = name;
		this.oos = oos;
		this.user = user;
		this.me = me;
		}
	public void init(){
		jframe = new JFrame("与 "+name+" 聊天中");
		jframe.setSize(400,300);
		jpanel = new JPanel();
		jtextarea = new TextArea();
		jtextfield = new JTextField(10);
		jpanel.add(jtextfield);
		jtextarea.setEditable(false);
		jtextarea.setFocusable(false);
		jbutton = new JButton("传文件");
		jbuttonrecv = new JButton("接文件");
		jbuttonrefuse =  new JButton("取消接收");
		jbuttonrecv.setEnabled(false);
		jbuttonrefuse.setEnabled(false);
		jpanel.add(jbutton);
		jpanel.add(jbuttonrecv);
		jpanel.add(jbuttonrefuse);
		class BuLi implements ActionListener{
			public void actionPerformed(ActionEvent arg0){
				try {
					if(chooser.showOpenDialog(new JTextField())==JFileChooser.APPROVE_OPTION){
						file = chooser.getSelectedFile().getAbsolutePath();
						String filename = file;
						QQMessage sendself = new QQMessage();
						sendself.setType(12);
						sendself.setSender(me);
						sendself.setRecver(me);
						sendself.setFilename(file);
						oos.writeObject(sendself);
						oos.flush();
						jtextarea.append("即将发送文件:"+filename+"\n");
						jtextarea.append("等待对方接收或者关闭窗口取消"+"\n");
						StringTokenizer st = new StringTokenizer(filename,"/");
						while(st.hasMoreTokens()){filename = st.nextToken();}
						QQMessage filemsg = new QQMessage();
						filemsg.setType(5);
						filemsg.setSender(me);
						filemsg.setRecver(name);
						filemsg.setFilename(filename);
						oos.writeObject(filemsg);
						oos.flush();
					}
				} catch (Exception e) {}
			}
		}
		class QQButtonListener implements ActionListener{
			public void actionPerformed(ActionEvent arg0){
				try {
					JButton jb = (JButton)arg0.getSource();
					QQMessage filemessage = new QQMessage();
					filemessage.setSender(me);
					filemessage.setRecver(name);
					if(jb.getText().equals("接文件")){
						if(chooser.showSaveDialog(new JTextField())==JFileChooser.APPROVE_OPTION){
							savefile = chooser.getSelectedFile().getAbsolutePath();
							filemessage.setType(10);
						}
						else
							filemessage.setType(11);
					}
					else{
						filemessage.setType(11);
					}
					oos.writeObject(filemessage);
					oos.flush();
					QQMessage sendself = new QQMessage();
					sendself.setType(13);
					sendself.setSender(me);
					sendself.setRecver(me);
					sendself.setFilename(savefile);
					oos.writeObject(sendself);
					oos.flush();
					jbuttonrefuse.setEnabled(false);
					jbuttonrecv.setEnabled(false);
				} catch (IOException e) {}
			}
		}
		QQButtonListener bbl = new QQButtonListener();
		jbuttonrecv.addActionListener(bbl);
		jbuttonrefuse.addActionListener(bbl);
		jbutton.addActionListener(new BuLi());
		class MyAL implements ActionListener{
			public void actionPerformed(ActionEvent arg0) {
				try {
					String com = jtextfield.getText();
					jtextarea.append("我对");
					jtextarea.append(name);
					jtextarea.append("说:\n");
					jtextarea.append(com);
					jtextarea.append("\n\n");
					QQMessage mess = new QQMessage();
					mess.setType(4);
					mess.setSender(me);
					mess.setRecver(name);
					mess.setMessage(com);
					oos.writeObject(mess);
					oos.flush();
					jtextfield.setText("");
				} catch (IOException e) {}
			}
		}
		jtextfield.addActionListener(new MyAL());
		jframe.add(jpanel,BorderLayout.SOUTH);
		jframe.add(jtextarea);
		class TClientWindowListener extends WindowAdapter{
			public void windowClosing(WindowEvent e){
					user.remove(name);
					file = null;
			}
		}
		jframe.addWindowListener(new TClientWindowListener());
		jframe.setVisible(true);
	}
}

⌨️ 快捷键说明

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