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

📄 mainframe.java

📁 java chat 程序
💻 JAVA
字号:
package client.display;

import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import client.Client;

import common.UserInfo;
import common.message.ErrMessage;
import common.message.LogoutMessage;
import common.message.UsersMessage;
/**
 * 客户端显示的主要逻辑
 * 初始化时会显示所有在线人员
 * 当存在新登陆人员时,会自动更新
 * 当存在注销人员时,会自动删除
 * @author 彭文杰
 * 日期:Oct 21, 2006
 */
public class MainFrame extends JFrame {
	private static final long serialVersionUID = -188926171790477708L;
	//登陆的用户信息
	private UserInfo user;
	private Box baseBox;
	//客户端传输主要逻辑 负责与服务器端交互,消息的发送和接收
	private Client client;
	public MainFrame(UserInfo user){
		super(user.getUserId()+"已登陆");
		this.user=user;
		addWindowListener(
		           new WindowAdapter(){
		        	   //定义窗口关闭时,执行客户端注销方法
		               public void windowClosing(WindowEvent e){
		            	  MainFrame mf=(MainFrame)e.getSource();
		            	  Client client=mf.getClient();
		            	  client.logout(mf.getUser());
		            	  dispose();
		                  System.exit(0);	
		               }	
		           }	
		        );
		Container mainPanel=this.getContentPane();
		this.baseBox=Box.createVerticalBox();//先产生水平排列方式的Box组件,当作基底容器(BaseBox)
		mainPanel.add(this.baseBox);
		setSize(150,500);
		setVisible(true);
		setLocation(900,100);
	}
	/**
	 * 将接收到的用户组信息,添加到显示界面
	 * @author 彭文杰
	 * 日期:Oct 21, 2006
	 * @param um
	 */
	public void addPersonToPanel(UsersMessage um){
		ArrayList users=um.getUsers();
		for(int i=0;i<users.size();i++){
			addOnePerson((String)users.get(i));
		}
	}
	/**
	 * 根据接收到的用户注销信息,删除显示界面上的对应人员
	 * @author 彭文杰
	 * 日期:Oct 21, 2006
	 * @param um
	 */
	public void delPersonFromPanel(LogoutMessage um){
		delOnePerson(um.getFromUser());
	}
	/**
	 * 将一个人员作为按钮 
	 * 增加到显示界面
	 * @author 彭文杰
	 * 日期:Oct 21, 2006
	 * @param userId
	 */
	public void addOnePerson(String userId){
		if(this.user.getUserId().equals(userId)){
			return;
		}
		JButton button=new JButton(userId);
		button.addActionListener(new ButtonListener(userId,this){
			public void actionPerformed(ActionEvent event) {
				//点击时
		     	MainFrame mf=this.getMf();
		     	Client client=mf.getClient();
		     	ChatWindow chw=client.getChatWindow(this.getUserid());
		     	//打开一个新的聊天窗口
		     	if(chw==null){
		     		chw=new ChatWindow(mf.user.getUserId(),this.getUserid(),mf.getClient());
		     	}
				//将这个窗口注册到client(客户端交互程序中)
				mf.getClient().registerChatWindow(chw);
			}
		});
		this.baseBox.add(button);
		this.validate();
	}
	/**
	 * 根据userid 将人员从显示界面上删除
	 * @author 彭文杰
	 * 日期:Oct 21, 2006
	 * @param userId
	 */
	public void delOnePerson(String userId){
		Component[] coms=this.baseBox.getComponents();
		for(int i=0;i<coms.length;i++){
			JButton jb=(JButton)coms[i];
			if(userId.equals(jb.getLabel())){
				this.baseBox.remove(jb);
			}
		}
		this.validate();
	}
	/**
	 * 显示错误信息
	 * @author 彭文杰
	 * 日期:Oct 21, 2006
	 * @param err
	 */
	public void showErrMessage(ErrMessage err){
		JOptionPane.showMessageDialog(null, err.getMessageBody());
	}
	public UserInfo getUser() {
		return user;
	}
	public void setUser(UserInfo user) {
		this.user = user;
	}
	public Client getClient() {
		return client;
	}
	public void setClient(Client client) {
		this.client = client;
	}
}

⌨️ 快捷键说明

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