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

📄 newchatclient.java

📁 自己写的聊天室
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
import javax.swing.event.ListSelectionEvent;
public class NewChatClient implements Runnable
{
	Socket m_socket=null;
	PrintWriter out=null;
	BufferedReader in=null;
	String qname=null;
	String qpsw=null;
	Vector m_items=new Vector();
	
	static MainClient mc=null;
	static ChatRoom cr=null;
	static Register rs=null;
	
	NewChatClient()
	{}
	
	boolean connect(String sIP)
	{
		
		if(sIP.equals("")) sIP="localhost";
		boolean bool=false;
		try
		{
			
			m_socket=new Socket(sIP,9000);
			out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(m_socket.getOutputStream())),true);
			in=new BufferedReader(new InputStreamReader(m_socket.getInputStream()));
			//message="连接成功";
			bool=true;
			new Thread(this).start();
		}
		catch(Exception e)
		{
			//message="连接失败";
			bool=false;
		}
		
		return bool;
		
	}
	
	public void run()
	{
		String s=null;
		try
		{
			while(true)
			{
				s=in.readLine();
				//System.out.println("s client="+s);
				if(s.equals(""))continue;
				int i=0;
				while(i<s.length()&&s.charAt(i)!='$')i++;
				String stemp=s.substring(0,i);
				if(stemp.equals("@loginsuccess"))
				{
					
					int j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					qname=s.substring(j,i);
					j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					qpsw=s.substring(j,i);
					//System.out.println("loginsuccess"+name+psw);
					
					
					
					mc.dispose();
					cr=new ChatRoom();
					
				}
				else if(stemp.equals("@registersuccess"))
				{
					int j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					String sname=s.substring(j,i);
					j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					String spsw=s.substring(j,i);
					mc.jTextField1.setText(sname);  //...
					mc.jPasswordField.setText(spsw);
					mc.jPasswordField.requestFocus();
					mc.setVisible(true);
					rs.dispose();
					
					
				}
				else if(stemp.equals("@say"))
				{
					int j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					String scontent=s.substring(j,i);
					//System.out.print("say="+scontent);
					cr.jTextArea.append("\n"+scontent);
					//cr.jTextArea.setSelectionStart(cr.jTextArea.getText().length());
					//cr.movewheel(scontent);
					continue;
				}
				else if(stemp.equals("@saytext"))
				{
					int j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					String scontent=s.substring(j,i);
					//System.out.print("say="+scontent.replace('#','\n'));
					cr.jTextArea.append("\n"+scontent.replace((char)257,'\n'));
				}

				else if(stemp.equals("@addjlist"))
				{
					int j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					String jlist=s.substring(j,i);
					m_items.addElement(jlist);
					cr.jList.updateUI();
				}
				else if(stemp.equals("@alterjlist"))
				{
					int j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					String oldjlist=s.substring(j,i);
					j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					String newjlist=s.substring(j,i);
					int index=m_items.indexOf(oldjlist);
					m_items.setElementAt(newjlist,index);
					cr.jList.updateUI();
				}
				else if(stemp.equals("@removejlist"))
				{
					int j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					String jlist=s.substring(j,i);
					m_items.removeElement(jlist);
					//System.out.println(jlist);
					cr.jList.updateUI();
				}
				else if(stemp.equals("@updatajlist"))
				{
					cr.jList.updateUI();
				}
				else if(stemp.equals("@公告"))
				{
					int j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					String text=s.substring(j,i);
					cr.jTextArea2.setText(text.replace((char)257,'\n'));
				}
				else if(stemp.equals("@seteditable"))
				{
					cr.jTextArea2.setEditable(true);
					cr.addkeylistener();
				}
				
				else if(stemp.equals("@errors"))
				{
					int j=++i;
					while(i<s.length()&&s.charAt(i)!='$')i++;
					String serror=s.substring(j,i);
					JOptionPane.showMessageDialog(null,serror);
					//System.out.println(serror);
				}
				/*if(cr!=null)
				{
					cr.jList.updateUI();  //bug?
				}*/
				
				
			}
			
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally   
		{
			try
			{
				in.close();
				out.close();
				m_socket.close();
				
			}
			catch(Exception ee)
			{
				ee.printStackTrace();
			}
			
			
		}
	}

	
	public static void main(String[] args) 
	{
		NewChatClient ncc=new NewChatClient();
		mc=ncc.new MainClient();
		mc.setVisible(true);
		
		// TODO 自动生成方法存根

	}

	class MainClient extends JFrame {

		private JPanel jContentPane = null;
		private JLabel jLabel = null;
		private JLabel jLabel1 = null;
		private JLabel jLabel4 = null;
		private JLabel jLabel5 = null;
		private JTextField jTextField = null;
		private JTextField jTextField1 = null;
		private JPasswordField jPasswordField = null;
		private JButton jButton = null;
		private JButton jButton1 = null;
		private JButton jButton2 = null;
		public MainClient() {
			super();
			initialize();
		}

		private void initialize() {
			this.setSize(400, 300);
			this.setResizable(false);
			this.setTitle("login");
			this.setContentPane(getJContentPane());
			this.setVisible(true);
			this.setEditable(false);
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //..
		}
		
		private JPanel getJContentPane() {
			if (jContentPane == null) {
				jLabel5 = new JLabel();
				jLabel5.setBounds(new Rectangle(9,140,56,25));
				jLabel5.setText("用户密码:");
				jLabel4 = new JLabel();
				jLabel4.setBounds(new Rectangle(9,98,59,25));
				jLabel4.setText("用户帐号:");
				jLabel1 = new JLabel();
				jLabel1.setBounds(new Rectangle(7,38,63,25));
				jLabel1.setText("服务器IP:");
				jLabel = new JLabel();
				jLabel.setBounds(new Rectangle(120,3,234,25));
				jLabel.setText(" ");
				jContentPane = new JPanel();
				jContentPane.setLayout(null);
				jContentPane.add(jLabel, null);
				jContentPane.add(jLabel1, null);
				jContentPane.add(jLabel4, null);
				jContentPane.add(jLabel5, null);
				jContentPane.add(getJTextField(), null);
				jContentPane.add(getJTextField1(), null);
				jContentPane.add(getJPasswordField(), null);
				jContentPane.add(getJButton(), null);
				jContentPane.add(getJButton1(), null);
				jContentPane.add(getJButton2(), null);
			}
			return jContentPane;
		}

		
		private JTextField getJTextField() {
			if (jTextField == null) {
				jTextField = new JTextField();
				jTextField.setBounds(new Rectangle(91,41,160,20));
			}
			return jTextField;
		}


		private JTextField getJTextField1() {
			if (jTextField1 == null) {
				jTextField1 = new JTextField();
				jTextField1.setBounds(new Rectangle(91,100,111,20));
			}
			return jTextField1;
		}

		private JPasswordField  getJPasswordField() {
			if (jPasswordField == null) {
				jPasswordField = new JPasswordField();
				jPasswordField.setBounds(new Rectangle(91,140,149,20));
			}
			return jPasswordField;
		}


		private JButton getJButton() {
			if (jButton == null) {
				jButton = new JButton();
				jButton.setBounds(new java.awt.Rectangle(53,197,80,25));
				jButton.setText("注册");
				jButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						 // TODO Auto-generated Event stub actionPerformed()
						jButtonactionPerformed(e);
					}
				});
			}
			return jButton;
		}

		private JButton getJButton1() {
			if (jButton1 == null) {
				jButton1 = new JButton();
				jButton1.setBounds(new java.awt.Rectangle(238,197,80,25));
				jButton1.setText("确定");
				jButton1.addActionListener(new java.awt.event.ActionListener() {
					public void actionPerformed(java.awt.event.ActionEvent e)  {
						 // TODO Auto-generated Event stub actionPerformed()
						try
						{
							jButton1actionPerformed(e);
						}
						catch(Exception ee)
						{
							
						}
						
					}
				});
			}
			return jButton1;
		}

		private JButton getJButton2() {
			if (jButton2 == null) {
				jButton2 = new JButton();
				jButton2.setBounds(new java.awt.Rectangle(294,39,80,22));
				jButton2.setText("连接");
				jButton2.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) 
					{
						jButton2actionPerformed(e);
					}
				});
			}
			return jButton2;
		}
		void setEditable(boolean flag)
		{
			jTextField1.setEditable(flag);
			jPasswordField.setEditable(flag);
			jButton.setEnabled(flag);
			jButton1.setEnabled(flag);
			jLabel4.setEnabled(flag);
			jLabel5.setEnabled(flag);
			jTextField.setEditable(!flag);
			jButton2.setEnabled(!flag);
		}
		void jButton2actionPerformed(ActionEvent e) //连接
		{
			//System.out.println("连接jButton2actionPerformed()");
			String s=jTextField.getText();
			if(connect(s))
			{
				jButton2.setText("连接ing");
				jLabel.setText("连接成功");
				if(jTextField.getText().equals("")) jTextField.setText("localhost");
				this.setEditable(true);
	
			}
			else
			{
				jLabel.setText("连接失败");
			}
		}
		
		void jButtonactionPerformed(ActionEvent e) //注册
		{
			//System.out.println("注册actionPerformed()");
			
			rs=new Register();
			rs.setVisible(true);
			this.setVisible(false);
			
			
		}
		void jButton1actionPerformed(ActionEvent e) throws Exception //确定
		{
			//System.out.println("确定actionPerformed()");
			String sname=jTextField1.getText();
			String spsw=String.valueOf(jPasswordField.getPassword());
			out.println("@login$"+sname+"$"+spsw+"$");
			//System.out.println("@login?$"+name+"$"+psw+"$");
		}

     }  
	

	class ChatRoom extends JFrame implements ActionListener,MouseListener,ListSelectionListener,KeyListener{

		private JPanel jContentPane = null;
		private JPanel jPanel = null;
		private JPanel jPanel1 = null;
		private JPanel jPanel2 = null;
		private JTextArea jTextArea = null;
		private JTextArea jTextArea1 = null;
		private JLabel jLabel = null;
		private JTextField jTextField = null;
		private JLabel jLabel1 = null;
		private JTextField jTextField1 = null;
		private JButton jButton = null;
		private JButton jButton1 = null;
		private JPanel jPanel3 = null;
		private JPanel jPanel4 = null;
		private JTextArea jTextArea2 = null;
		private JList jList = null;
		int oldkey=0;
		int newkey=0;
		javax.swing.Timer timer=new javax.swing.Timer(500,this);

		public ChatRoom() {
			
			super();
			initialize();
			timer.start();
		}


		private void initialize() {
			this.setSize(481,407);
			
			this.setContentPane(getJContentPane());
			this.setTitle("ChatRoom");
			this.setResizable(false);
			this.setVisible(true);
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //..
		}


		private JPanel getJContentPane() {
			if (jContentPane == null) {
				jContentPane = new JPanel();

⌨️ 快捷键说明

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