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

📄 myclient.java

📁 JAVA聊天室 本聊天室可以实现公聊和私聊
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.Vector;
import java.util.Date;

class UserData implements Serializable
{
	String id;
	String pwd;
	String name;
	String sex;
	String age;
	String phone;
	String mail;
	
	public UserData(String id,String pwd,String name,String sex,String age,String phone,String mail)
	{
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.phone = phone;
		this.mail = mail;
	}
} 

public class MyClient implements ActionListener,Runnable
{
	Socket socket;
 	ObjectOutputStream oos;
 	ObjectInputStream ois;
 	Font ft = new Font("宋体",0,15);
 	Color red = Color.red;
 	EnrolFrm ef; 
 	SettingFrm sf; 
 		
	//*******************************************************************登陆窗口
	JFrame frm;
	JPanel pLogin;
	GridLayout gdl;	
	JButton btnLogin,btnEnrol;	
	JLabel lblId,lblPWD,lblNetAddress,lblNetPort;
	JTextField txtId;
	JPasswordField txtPWD;
	JComboBox cmbNetAddress,cmbNetPort;
		
  	public MyClient() 
  	{
  		frm = new JFrame("登陆聊天室");	
		pLogin = new JPanel();
		gdl = new GridLayout(5,2,2,2);	
		pLogin.setLayout(gdl);							
		btnLogin = new JButton("登录");	
		btnLogin.setFont(ft);
		btnEnrol = new JButton("注册");	
		btnEnrol.setFont(ft);			
		lblId = new JLabel("登录帐号");
		lblId.setFont(ft);
		lblPWD = new JLabel("密码");
		lblPWD.setFont(ft);
		lblNetAddress = new JLabel("服务器地址");
		lblNetAddress.setFont(ft);
		lblNetPort = new JLabel("端口");
		lblNetPort.setFont(ft);		
		txtId = new JTextField(10);
		txtId.setFont(ft);
		txtId.setText("mark");
		txtPWD = new JPasswordField(10);
		txtPWD.setFont(ft);
		txtPWD.setText("123");
		cmbNetAddress = new JComboBox();
		cmbNetAddress.addItem(new String("192.168.1.100"));
		cmbNetAddress.setFont(ft);
		cmbNetAddress.setEditable(true);
		cmbNetPort = new JComboBox();
		cmbNetPort.setFont(ft);
		cmbNetPort.addItem(new String("1986"));
		cmbNetPort.setEditable(true);	
		
		pLogin.add(lblNetAddress);		pLogin.add(cmbNetAddress);
		pLogin.add(lblNetPort);			pLogin.add(cmbNetPort);
		pLogin.add(lblId);				pLogin.add(txtId);
		pLogin.add(lblPWD);				pLogin.add(txtPWD);
		pLogin.add(btnLogin);			pLogin.add(btnEnrol);
		
		btnLogin.addActionListener(this);
		btnEnrol.addActionListener(this);	
		frm.getContentPane().add(pLogin);		
    	frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
   		frm.setSize(300,200);
   		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension frameSize = frm.getSize();
		frm.setLocation((screenSize.width - frameSize.width)/2,(screenSize.height - frameSize.height)/2);
   		frm.setResizable(false);
    	frm.setVisible(true); 		
  	}
  	
	public void actionPerformed(ActionEvent ae) 
	{ 
		try
		{	
			JButton jb = (JButton)ae.getSource();
			if(jb.equals(btnLogin))
			{
				if(socket == null)
				{
					String netAdd = (String)cmbNetAddress.getSelectedItem();
					int port = Integer.parseInt((String)cmbNetPort.getSelectedItem());
					socket = new Socket(netAdd,port);
					oos = new ObjectOutputStream(socket.getOutputStream());
					ois = new ObjectInputStream(socket.getInputStream());
					
					Thread gm = new Thread(this);
					gm.start();
				}
				
				String id = txtId.getText();
				String pwd = new String(txtPWD.getPassword());
				
				while(true)
				{
					if(id.equals("")||pwd.equals(""))
					{
						JOptionPane.showMessageDialog(frm,"帐号或密码不能未空,请重新输入!");
						break;
					}
					else
					{
						oos.writeObject(new String("Login"));
						oos.writeObject(id);
						oos.writeObject(pwd);
						break;
					}
				}					
			}
			else if(jb.equals(btnEnrol))
			{
				if(socket == null)
				{
					String netAdd = (String)cmbNetAddress.getSelectedItem();
					int port = Integer.parseInt((String)cmbNetPort.getSelectedItem());
					socket = new Socket(netAdd,port);
					oos = new ObjectOutputStream(socket.getOutputStream());
					ois = new ObjectInputStream(socket.getInputStream());
					
					Thread gm = new Thread(this);
					gm.start();
				}
				
				ef = new EnrolFrm();			
			}
		}
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(frm,"服务器没有启动!");
			System.out.println(e.toString());
		}
	}
	//***********************************************************************End
	
	
	//*******************************************************************注册窗口	
	class EnrolFrm implements ActionListener
	{
		JFrame frmEnrol;
		JPanel pEnrol;
		GridLayout gdl;
		JButton btnOK,btnCancel;
		JLabel lblId,lblPWD,lblPWD2,lblName,lblSex,lblAge,lblPhone,lblMail;
		JTextField txtId,txtName,txtAge,txtPhone,txtMail;
		JPasswordField txtPWD,txtPWD2;			
		JComboBox cmbSex;
		
		public EnrolFrm()
		{
			frmEnrol = new JFrame("注册");
			pEnrol = new JPanel();
			gdl = new GridLayout(9,2,2,2);
			pEnrol.setLayout(gdl);
			btnOK = new JButton("提交");
			btnOK.setFont(ft);
			btnCancel = new JButton("取消");
			btnCancel.setFont(ft);			
			lblId = new JLabel("登录帐号");
			lblId.setFont(ft);
			lblId.setForeground(red);
			lblPWD = new JLabel("密码");
			lblPWD.setFont(ft);
			lblPWD.setForeground(red);
			lblPWD2 = new JLabel("确认密码");
			lblPWD2.setFont(ft);
			lblPWD2.setForeground(red);
			lblName = new JLabel("呢称");
			lblName.setFont(ft);
			lblName.setForeground(red);
			lblSex = new JLabel("性别");
			lblSex.setFont(ft);
			lblAge = new JLabel("年龄");
			lblAge.setFont(ft);
			lblPhone = new JLabel("电话号码");
			lblPhone.setFont(ft);
			lblMail = new JLabel("E-Mail");
			lblMail.setFont(ft);
			txtId = new JTextField(10);
			txtId.setFont(ft);
			txtPWD = new JPasswordField(10);
			txtPWD.setFont(ft);
			txtPWD2 = new JPasswordField(10);
			txtPWD2.setFont(ft);
			txtName = new JTextField(10);
			txtName.setFont(ft);
			String cc[] = {"--","男","女"};
			cmbSex = new JComboBox(cc);
			cmbSex.setFont(ft);
			txtAge = new JTextField(2);
			txtAge.setFont(ft);
			txtPhone = new JTextField(13);
			txtPhone.setFont(ft);
			txtMail = new JTextField(10);
			txtMail.setFont(ft);
			
			pEnrol.add(lblId);		pEnrol.add(txtId);
			pEnrol.add(lblPWD);		pEnrol.add(txtPWD);
			pEnrol.add(lblPWD2);	pEnrol.add(txtPWD2);
			pEnrol.add(lblName);	pEnrol.add(txtName);
			pEnrol.add(lblSex);		pEnrol.add(cmbSex);
			pEnrol.add(lblAge);		pEnrol.add(txtAge);
			pEnrol.add(lblPhone);	pEnrol.add(txtPhone);
			pEnrol.add(lblMail);	pEnrol.add(txtMail);
			pEnrol.add(btnOK);		pEnrol.add(btnCancel);
				
			btnOK.addActionListener(this);
			btnCancel.addActionListener(this);
			frmEnrol.getContentPane().add(pEnrol);
			frmEnrol.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
			frmEnrol.setSize(400,300);
			Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
			Dimension frameSize = frmEnrol.getSize();
			frmEnrol.setLocation((screenSize.width - frameSize.width)/2,(screenSize.height - frameSize.height)/2);
			frmEnrol.setResizable(false);
			frmEnrol.setVisible(true);
		}
		
		public void condition()
		{
			String id = txtId.getText();
			String pwd = new String(txtPWD.getPassword());
			String pwd2 = new String(txtPWD2.getPassword());
			String name = txtName.getText();
			String sex = (String)cmbSex.getSelectedItem();
			String age = txtAge.getText();
			String phone = txtPhone.getText();
			String mail = txtMail.getText();
			
			try
			{	
				while(true)
				{
					if(id.equals("")||pwd.equals("")||pwd2.equals("")||name.equals(""))
					{
						JOptionPane.showMessageDialog(frmEnrol,"带*的项不能为空!");
						break;
					}
					else if(id.length() > 10)
					{
						JOptionPane.showMessageDialog(frmEnrol,"帐号不能超过10个英文字母、数字或汉字!");
						break;
					}
					else if(pwd.length() > 10)
					{
						JOptionPane.showMessageDialog(frmEnrol,"密码不能超过10个字符!");
						break;
					}
					else if(name.length() > 10)
					{
						JOptionPane.showMessageDialog(frmEnrol,"呢称不能超过10个英文字母、数字或汉字!");
						break;
					}
					else if(pwd.equals(pwd2))
					{
						UserData user = new UserData(id,pwd,name,sex,age,phone,mail);
						oos.writeObject(new String("Enrol"));
						oos.writeObject(user);
						break;
					}
					else
					{
						JOptionPane.showMessageDialog(frmEnrol,"两次密码输入不相同,请重新输入!");
						txtPWD.setText("");
						txtPWD2.setText("");
						break;
					}
				}
			}
			catch(Exception e)
			{
				System.out.println(e.toString());
			}
		}
		
		public void actionPerformed(ActionEvent evt)
		{	
			try
			{	
				JButton bb = (JButton)evt.getSource();
				if(bb.equals(btnOK))
				{
					condition();	
				}
				else if(bb.equals(btnCancel))
				{
					frmEnrol.setVisible(false);
				}
			}	
			catch(Exception e)
			{
				System.out.println(e.toString());
			}
		}
	}
	//***********************************************************************End
	
			
	//*******************************************************************聊天窗口	
	class ChatFrm implements ActionListener,ItemListener,MouseListener
	{
		JFrame frmChat;
		JPanel panel,pp;
		JTabbedPane tp;
		JTextArea txtPubMsg,txtPraMsg,txtSend;	
		JButton btnSend,btnSetting;	
		JLabel lblFont,lblFontSize,lblFontStyle,lblFontColor,lblOnline,lblPub,lblPri;
		JComboBox cmbFont,cmbFontSize,cmbFontStyle,cmbFontColor;	
		JScrollPane spPubMsg,spPraMsg,spSend,spList;
		JList lUser,praLis;
		Border border = BorderFactory.createBevelBorder(BevelBorder.LOWERED);
		Border border2 = BorderFactory.createBevelBorder(BevelBorder.RAISED);
		UserData usr;
		String userName;
		Vector vUser,vUs;
		ImageIcon img;
		long clickTime = 0;
		
		public ChatFrm(UserData data)
		{		
			usr = data;	
			userName = usr.name;
			frmChat = new JFrame("欢迎" + userName + "加入聊天室!");
			
			img = new ImageIcon("photo.jpg");		
			panel = new JPanel()
			{   
			 	public void paintComponent(Graphics g)
	        	{   
	              	g.drawImage(img.getImage(),0,0,null);   
	              	super.paintComponent(g);  
	          	}   
			};
			panel.setOpaque(false);
			panel.setLayout(null);
				
			vUser = new Vector();
			vUs = new Vector();
			//vUs.addElement(userName);
			
			tp = new JTabbedPane(SwingConstants.TOP);
			tp.setFont(ft);
			tp.setBounds(20,20,500,300);
			panel.add(tp);
								
			txtPubMsg = new JTextArea(15,30);								//PubMsg
			txtPubMsg.setEditable(false);
			txtPubMsg.setFont(ft);
			txtPubMsg.setBackground(new Color(240,240,240));
			spPubMsg = new JScrollPane(txtPubMsg);					
			spPubMsg.setBorder(border);
			tp.addTab("公聊区",spPubMsg);
			lblPub = new JLabel("↙你正在公聊中");
			lblPub.setFont(new Font("宋体",1,18));
			lblPub.setBorder(border2);
			lblPub.setBounds(60,2,150,20);
			panel.add(lblPub);
			
			pp = new JPanel();											//PriMsg
			pp.setLayout(null);
			pp.setBorder(border);										
			txtPraMsg = new JTextArea(15,30);								
			txtPraMsg.setEditable(false);
			txtPraMsg.setFont(ft);
			spPraMsg = new JScrollPane(txtPraMsg);					
			spPraMsg.setBounds(105,0,390,270);
			pp.add(spPraMsg);			
			praLis = new JList();
			praLis.setFont(ft);
			JScrollPane sp = new JScrollPane(praLis);

⌨️ 快捷键说明

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