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

📄 chatinterface.java

📁 聊天系统聊天系统聊天系统聊天系统聊天系统聊天系统聊天系统
💻 JAVA
字号:
package jclass;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.Socket;

import javax.swing.JButton;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ChatInterface extends JFrame {
	private JTextArea sent;
	private JTextArea recieved;
	private JScrollPane scrollRecieved;
	private JLabel label;
	private JButton sendMsg;
	private JButton cancelSendMsg;
	private JScrollPane scrollSent;
	private Socket socket;
	private String username;
	
	/**
	 * Create the frame
	 */
	public ChatInterface(String username,Socket socket) {
		super();
		this.username=username;
		this.socket=socket;
		//告知服务器用户登陆
		sendMessages(username);
		
		init();
		addListeners();

		new Thread(new RecieveMessage()).start();
	}
	
	//初始化成员变量和设置窗体属性
	private void init()
	{
		
		//设置窗体属性
		getContentPane().setLayout(null);
		setBounds(100, 100, 417, 640);
		//获取屏幕大小,并设置窗体在屏幕中央显示
		Dimension screen=
			Toolkit.getDefaultToolkit().getScreenSize();
		setLocation((screen.width-getWidth())/2,(screen.height-getHeight())/2);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置点击窗体关闭按钮时的默认操作为关闭

		
		//设置显示收到信息的滚动条
		scrollRecieved = new JScrollPane();
		scrollRecieved.setBounds(0, 0, 409, 435);
		getContentPane().add(scrollRecieved);//添加到窗体上

		//设置收到信息时显示的文本域
		recieved = new JTextArea();
		recieved.setLineWrap(true); //设置分行显示
		recieved.setEditable(false); //禁止编辑
		recieved.setBackground(Color.WHITE); //设背景颜色为白色
		scrollRecieved.setViewportView(recieved);//添加到滚动条上

		//设置提示发送信息标签
		label = new JLabel();
		label.setText(" 输入要发送的内容:");
		label.setBounds(0, 441, 127, 100);
		getContentPane().add(label);
		
		//设置发送信息文本域所使用的滚动条
		scrollSent = new JScrollPane();
		scrollSent.setBounds(133, 441, 276, 100);
		getContentPane().add(scrollSent);

		//设置接收用户输入信息的文本域
		sent = new JTextArea();
		scrollSent.setViewportView(sent);

		//添加发送按钮
		sendMsg = new JButton();

		sendMsg.setText("发送");
		sendMsg.setBounds(133, 559, 106, 28);
		getContentPane().add(sendMsg);

		//添加取消按钮
		cancelSendMsg = new JButton();

		cancelSendMsg.setText("取消");
		cancelSendMsg.setBounds(293, 559, 106, 28);
		getContentPane().add(cancelSendMsg);	
	}
	
	//为成员添加事件监听器
	private void addListeners()
	{
		//添加事件监听器到取消按钮
		cancelSendMsg.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
			sent.setText("");
		}
		});
		
		//添加事件监听器到发送按钮
		sendMsg.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				//如果发送信息框非空,发送信息到服务器
				if(!sent.getText().equals(""))
					sendMessages(username+"说:"+sent.getText());
			}
		});		
		
	}
	
	
	//把用户的信息发到服务器上
	private void sendMessages(String msg)
	{
		
		//尝试从socket中取得输出流,并且把信息写到这个流
		try {
			OutputStream os = socket.getOutputStream();
			PrintWriter pw=new PrintWriter(os);
			pw.println(msg);
			pw.flush();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	
	//用于接收服务器发来信息的线程
	private class RecieveMessage implements Runnable
	{
		public void run()
		{
			InputStream is=null;
			BufferedReader br=null; 
			String messageRecieved="";
			
			//尝试从socket里取得输入流
			try {
				is=socket.getInputStream();
				br=new BufferedReader(
						new InputStreamReader(is));
			} catch (Exception e) {
				// TODO: handle exception
				e.printStackTrace();
			}
			
			//一直在等待接收信息,当收到服务器信息时,写的
			//接收信息文本框
			while(true)
			{
				try {
					messageRecieved=br.readLine();
					recieved.append("\n"+messageRecieved);
				} catch (Exception e) {
					// TODO: handle exception
					e.printStackTrace();
					break;
				}
			}
		}
	}

}

⌨️ 快捷键说明

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