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

📄 chatclinet.java

📁 基于C/S的JAVA语言开发的聊天程序
💻 JAVA
字号:
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.*;

//客户端类
public class ChatClinet extends JFrame implements Runnable
{
	Border border1;
	Border border2;
	Border border3;
	Border border4;
	JPanel panel0 = new JPanel();
	JPanel panel1 = new JPanel();
	JPanel panel2 = new JPanel();
	JPanel panel3 = new JPanel();
	JPanel panel4 = new JPanel();
	JPanel panel5 = new JPanel();
	JLabel jLabel1 = new JLabel();
	JLabel labelStatus = new JLabel();
	JTextField jTextField1 = new JTextField();
	JTextArea TextArea1 = new JTextArea();
	JScrollPane jScrollPane1 = new JScrollPane();
	
	Socket socket;
	DataInputStream inData;
	DataOutputStream outData;
	String host;
	String username = "";

	public ChatClinet()
	{
      	super( "ChatClient" );
		//设置主机地址为127.0.0.1
		host = "127.0.0.1";			
	}
	
	void login()
	{
		//新建一个LoginFrame的对象loginframe
		LoginFrame loginframe = new LoginFrame(this);
		loginframe.validate();
		
		//设置loginframe的初始位置
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		Dimension frameSize = loginframe.getSize();
		if (frameSize.height > screenSize.height )
		{
			frameSize.height = screenSize.height;
		}
		if (frameSize.width > screenSize.width )
		{
			frameSize.width = screenSize.width;
		}
		
		loginframe.setLocation(
			(screenSize.width - frameSize.width) / 2,
			(screenSize.height - frameSize.height) / 2);
		loginframe.setVisible(true);
		loginframe.setFocusable(true);
	}
	
	//初始化客户区窗口中的各组件
	private void jbInit() throws Exception 
	{
		TextArea1.setEditable(false);
		this.setSize(new Dimension(300,220));
		this.getContentPane().setLayout(new BorderLayout());
		border1 = BorderFactory.createEmptyBorder(2,4,4,4);
		border2 = BorderFactory.createEmptyBorder(4,5,2,0);
		border3 = BorderFactory.createEmptyBorder(5,0,2,4);
		border4 = BorderFactory.createCompoundBorder(new 
			EtchedBorder(EtchedBorder.RAISED,Color.white, new Color(142,142,142)),
			BorderFactory.createEmptyBorder(2,5,2,0));
		
		panel0.setMaximumSize(new Dimension(32767, 60));
		panel0.setMinimumSize(new Dimension(70, 60));
		panel0.setPreferredSize(new Dimension(70, 60));
		panel0.setLayout(new BorderLayout());
		
		panel1.setMaximumSize(new Dimension(32767, 35));
		panel1.setMinimumSize(new Dimension(10, 35));
		panel1.setPreferredSize(new Dimension(10, 35));
		panel1.setLayout(new BorderLayout());
		
		panel2.setLayout(new BorderLayout());
		panel2.setBorder(border1);
		
		panel3.setBorder(border2);
		panel3.setMaximumSize(new Dimension( 70, 32767));
		panel3.setMinimumSize(new Dimension(70, 10));
		panel3.setPreferredSize(new Dimension(70, 10));
		panel3.setLayout(new GridLayout());
		
		panel4.setLayout(new GridLayout());
		panel4.setBorder(border3);
		panel5.setBorder(border4);
		
		panel5.setMaximumSize(new Dimension(32767, 25));
		panel5.setMinimumSize(new Dimension(10, 25));
		panel5.setPreferredSize(new Dimension(10, 25));
		panel5.setLayout(new BorderLayout());
		
		jLabel1.setText("Message: ");
		labelStatus.setText("Current User: ");
		jTextField1.addActionListener(new
			java.awt.event.ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					jTextField1_actionPerformed(e);
				}
			}
		);
		
		panel3.add(jLabel1, null);
		panel1.add(panel3, BorderLayout.WEST);
		panel4.add(jTextField1, null);
		panel1.add(panel4, BorderLayout.CENTER);
		panel2.add(jScrollPane1, BorderLayout.CENTER);
		panel5.add(labelStatus, BorderLayout.CENTER);
		jScrollPane1.getViewport().add(TextArea1, null);
		
		panel0.add(panel1, BorderLayout.CENTER);
		panel0.add(panel5, BorderLayout.SOUTH);			
		this.getContentPane().add(panel0, BorderLayout.SOUTH);			
		this.getContentPane().add(panel2, BorderLayout.CENTER);
		this.setSize(300,250);
		this.setVisible(true);
	}
	
	//实现run函数,读取用户输入的信息并显示在窗口的文本区中
	public void run()
	{		
		try
		{
			while(true)
			{
				TextArea1.append(inData.readUTF() + "\n");
				TextArea1.setCaretPosition(TextArea1.getText().length());
			}
		}
		catch(IOException ex)
		{
			TextArea1.append( "Error writing!\n" );
		}
	}
		
	//响应jTextField1的输入
	void jTextField1_actionPerformed(ActionEvent e)
	{
		Date today = new Date();
		
		try
		{
			//将用户名和用户发信息的时间显示到窗口的文本区中
			outData.writeUTF(username + "   " 
				+ ((today.getHours()<10)?("0"+today.getHours()):today.getHours()) + ":" 
				+ ((today.getMinutes()<10)?("0"+today.getMinutes()):today.getMinutes()) + ":" 
				+ ((today.getSeconds()<10)?("0"+today.getSeconds()):today.getSeconds()) 
				+ "\n    " + e.getActionCommand());
			jTextField1.setText("");
			TextArea1.setCaretPosition(TextArea1.getText().length());			
		}
		catch(IOException ex)
		{
			TextArea1.append( "Error writing!\n" );
		}
	}

	//运行客户端
	public void runClient() 
	{
		try
		{
			jbInit();
			login();
			connectToServer();
			startThread();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

	//连接服务器
	public void connectToServer() throws Exception
	{
		try
		{
			socket = new Socket(InetAddress.getByName(host),5555);
			inData = new DataInputStream(socket.getInputStream());
			outData = new DataOutputStream(socket.getOutputStream());
		}
		catch(IOException ex)
		{
			ex.printStackTrace();
		}
	}

	//启动线程
	public void startThread() throws Exception
	{
		Thread thread = new Thread(this);
		thread.start();
	}
	
	public static void main(String[] args)
	{
		ChatClinet clinet = new ChatClinet();
		clinet.setDefaultCloseOperation(
			JFrame.EXIT_ON_CLOSE );
		clinet.runClient();
	}
}

⌨️ 快捷键说明

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