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

📄 serverframe.java

📁 JAVA编写的聊天小程序!!程序默认需放到D:下
💻 JAVA
字号:
package group.server;

import java.awt.*;
import java.io.*;
import javax.swing.*;
import java.util.*;
import group.Customer;
import group.MesPanel;
import group.Message;

/**
 <code>ServerFrame</code>此类为服务器端主窗口类,主要负责界面元素的安排
 @author wls
*/
public class ServerFrame extends JFrame
{
	private MesPanel mesPane;						//用于显示消息的面板,MesPanel继承自JPanel
	private MesPanel frendPane;						//用于显示朋友列表的面板
	private PrintWriter mesOut;						//用于将聊天记录保存起来
	private String[] mesStr = new String[30];				//用于容纳消息的数组
	private ArrayList frendList = new ArrayList();			//用于容纳所有在线的好友的ArrayList
	private final int WIDTH = 700;					//定义窗口的宽度
	private final int HEIGHT = 488;					//定义窗口的高度

	/**
	 ServerFrame类的构造函数,用于安排界面和初始化一些属性
	*/
	public ServerFrame()
	{
		super("聊天室服务器");
		Toolkit kit = Toolkit.getDefaultToolkit();		//获取一个工具箱对象
		Dimension screenSize = kit.getScreenSize();		//获取屏幕分辩率

		setSize(WIDTH, HEIGHT);						//设置窗口大小
		setLocation(((screenSize.width - WIDTH) / 2),
			(screenSize.height - HEIGHT) / 2);			//设置窗口位置
		setResizable(false);						//把窗口设为不可改变大小,主要是为了界面

		mesPane = new MesPanel("消息列表", 21, 43);		//下面两行用于初始化两个面板对象
		frendPane = new MesPanel("在线好友",21, 14);
//		mesPane.setTitleFont(new Font("Serif", Font.BOLD, 14));

		Container contentPane = getContentPane();			//把所有面板添加到窗口中
		contentPane.add(mesPane, BorderLayout.CENTER);
		contentPane.add(frendPane, BorderLayout.EAST);

		try
		{
			mesOut = new PrintWriter(new FileWriter("聊天记录.txt", true));
		}catch(IOException IO_e)
		{
			updateMes("Server类创建聊天记录文件时出现IO错误");
			updateMes(IO_e.toString());
		}

		for(int i = 0; i < 30; i++)
		{
			mesStr[i] = "";
		}
	}

	/**
	 此方法将接收到的消息显示在消息面板里,并且将消息记录在文件中
	 @param mes 即将显示在消息面板上的消息字符串
	 @throws IOException 如果写文件出错方法将抛出IOException异常
	*/
	public synchronized void updateMes(String mes)
	{
		int i = 0;
		for( ; i < 29; i++)
		{
			mesStr[i] = mesStr[i + 1];
		}
		mesStr[i] = mes;
		mesPane.updateMes(mesStr);
		mesOut.println(mes);
	}

	/**
	 此方法将接收到的好友名字显示在"在线好友"列表里
	 @param frend 即将显示在列表中的好友名字
	*/
	public synchronized void updateFrend(String frend)
	{
		if(frend.endsWith("move"))
		{
			frend = frend.substring(0, frend.lastIndexOf("move"));
			frendList.remove(frend);
		}
		else
		{
			frendList.add(frend);
		}

		Object[] tmpObj = frendList.toArray();
		String[] tmp = new String[tmpObj.length];
		for(int i = 0; i < tmpObj.length; i++)
		{
			tmp[i] = (String)tmpObj[i];
		}
		frendPane.updateMes(tmp);
	}

	/**
	 此方法用于刷新聊天记录流的缓冲区
	*/
	public void IOFlush()
	{
		mesOut.flush();
	}
}

⌨️ 快捷键说明

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