📄 mainframe.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 + -