📄 serverframe.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.sql.Date;
import java.util.Iterator;
import java.util.Hashtable;
import java.util.HashSet;
import java.util.Vector;
class ServerFrame extends JFrame{
Server server;
/*****************************以下组件********************************/
Container contentPane; //顶层容器
JScrollPane PubMsgScroll; //显示待发送公告的滚动条
JTextArea PubMsgText; //显示待发送公告的文本框
JScrollPane SendedPubMsgScroll; //显示已发送公告的滚动条
JTextArea SendedPubMsgText; //显示已发送公告的文本框
JLabel OnlineState; //显示当前连接数
JLabel IP_Port; //显示服务器端地址信息
Vector OnlineUsers=new Vector();
Vector OfflineUsers=new Vector();
JScrollPane OnlineScroll; //显示在线用户的列表
JList OnlineList;
DefaultListModel JListOnlineModel;
JScrollPane OfflineScroll; //显示不在线用户的列表
JList OfflineList;
DefaultListModel JListOfflineModel;
JButton dispatchBtn; //发送按钮
/*****************************以上组件********************************/
public ServerFrame(Server server){
this();
this.server=server;
//显示服务器端的IP和端口port
IP_Port.setText(server.getIPAddr()+":"+Integer.toString(server.getServerPort()));
//这里有破坏界面与代码分开原则的嫌疑
}//public ServerFrame
public ServerFrame(){
super("Server of Communication");
//创建容器
contentPane=this.getContentPane();
contentPane.setLayout(new GridBagLayout());
PubMsgText=new JTextArea();
PubMsgText.setLineWrap(true);
PubMsgText.setBorder(BorderFactory.createTitledBorder("Public Message be to Users:"));
PubMsgScroll=new JScrollPane(PubMsgText);
//PubMsgScroll.setBorder(BorderFactory.createTitledBorder("Public Message be to Users:"));
SendedPubMsgText=new JTextArea();
SendedPubMsgText.setEditable(false);
SendedPubMsgText.setBorder(BorderFactory.createTitledBorder("Public Message has been send to Users:"));
SendedPubMsgScroll=new JScrollPane(SendedPubMsgText);
OnlineState= new JLabel("0 ");
OnlineState.setBorder(BorderFactory.createTitledBorder("Actived Connections:"));
//OnlineState.setIcon(new ImageIcon(".\\pics\\lzpaul12.jpg"));
OnlineState.setVerticalTextPosition(SwingConstants.BOTTOM);
IP_Port= new JLabel(); //"127.0.0.0:3000"
IP_Port.setBorder(BorderFactory.createTitledBorder("Cur IP+Port:"));
//IP_Port.setIcon(new ImageIcon(".\\pics\\lzpaul21.jpg"));
IP_Port.setVerticalTextPosition(SwingConstants.BOTTOM);
JListOnlineModel=new DefaultListModel();
OnlineList=new JList(JListOnlineModel);
OnlineList.setBorder(BorderFactory.createTitledBorder("Online Users:"));
//OnlineList.setCellRenderer(new OnlineIconCellRenderer());
OnlineScroll=new JScrollPane(OnlineList);
JListOfflineModel=new DefaultListModel();
OfflineList=new JList(JListOfflineModel);
OfflineList.setBorder(BorderFactory.createTitledBorder("Offline Users:"));
//OfflineList.setCellRenderer(new OfflineIconCellRenderer());
OfflineScroll=new JScrollPane(OfflineList);
OfflineList.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e){
int index;
UserInfo tempuser;
if(e.getClickCount()==2){
System.out.println("In OfflineList double click");
index=OfflineList.locationToIndex(e.getPoint());
System.out.println("doubclick on OfflineList:"+index);
if(-1==index) return;
tempuser=(UserInfo)OfflineUsers.get(index);
if(tempuser==null) return ;
System.out.println("In OfflineList double click delete user "+tempuser.getRegName());
if(JOptionPane.NO_OPTION ==JOptionPane.showConfirmDialog(ServerFrame.this,
"Do you want to del this user: "+tempuser.getUserName(),
"Waring!",
JOptionPane.YES_NO_OPTION,
JOptionPane.WARNING_MESSAGE)) return;
server.deleteUser(tempuser);
RfreshList();
}//if(e.getClickCount()==2)
}
});
dispatchBtn=new JButton("Dispatch");
dispatchBtn.setIcon(new ImageIcon(".\\pics\\lzpaul0.jpg"));
dispatchBtn.setVerticalTextPosition(SwingConstants.BOTTOM);
dispatchBtn.addActionListener(new ActionListener(){
PublicMessage tempPubMsg;
public void actionPerformed(ActionEvent e){
if(PubMsgText.getText().trim().equals("")){
JOptionPane.showMessageDialog(ServerFrame.this,
"公告不能为空!",
"Error",
JOptionPane.ERROR_MESSAGE);
return;
}//if(PubMsgText.getText().trim().equals(""))
tempPubMsg=new PublicMessage(PubMsgText.getText().trim(),
System.currentTimeMillis());
PubMsgText.setText("");
SendedPubMsgText.append(tempPubMsg.getstrLocaleDate()+":\n"+tempPubMsg.getPubMsg()+"已发布\n");
server.PubMsgdispatch(tempPubMsg);
}//public void actionPerformed(ActionEvent e)
});
LayoutUtil.add(contentPane,SendedPubMsgScroll,GridBagConstraints.BOTH,GridBagConstraints.CENTER,1,1,0,0,4,4);//5,4);
LayoutUtil.add(contentPane,PubMsgScroll,GridBagConstraints.BOTH,GridBagConstraints.CENTER,1,1,0,4,4,4);//5,4);
LayoutUtil.add(contentPane,OnlineScroll,GridBagConstraints.BOTH,GridBagConstraints.CENTER,1,1,4,0,3,3);
LayoutUtil.add(contentPane,OfflineScroll,GridBagConstraints.BOTH,GridBagConstraints.CENTER,1,1,4,4,3,3);
LayoutUtil.add(contentPane,OnlineState,GridBagConstraints.NONE,GridBagConstraints.CENTER,1,1,0,8,1,1);
LayoutUtil.add(contentPane,IP_Port,GridBagConstraints.NONE,GridBagConstraints.CENTER,1,1,2,8,1,1);
LayoutUtil.add(contentPane,dispatchBtn,GridBagConstraints.NONE,GridBagConstraints.CENTER,1,1,4,8,1,1);
//窗体居中设置
setSize(500,500);
setResizable(false);
//setVisible(true);
//CurConNum(0);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}//public void windowClosing(WindowEvent e)
});//addWindowListener(new WindowAdapter(){
}//public ServerFrame()
public void CurConNum(int num){
OnlineState.setText(String.valueOf(num)+" ");
RfreshList();
}//public void CurConNum(int num)//将连接数显示出来
public void RfreshList(){
Iterator tempForeachUser;
String temphashkey;
UserInfo tempUser;
Hashtable AllUsers=server.getAllUsers();
HashSet AllUserskeys=new HashSet(AllUsers.keySet());
tempForeachUser=AllUserskeys.iterator();
JListOnlineModel.removeAllElements();
JListOfflineModel.removeAllElements();
OnlineUsers.removeAllElements();
OfflineUsers.removeAllElements();
synchronized(AllUsers){
for(;tempForeachUser.hasNext();){
temphashkey=(String)tempForeachUser.next();
tempUser=(UserInfo)AllUsers.get(temphashkey);
if(tempUser.getOnlineState()){
OnlineUsers.add(tempUser);
JListOnlineModel.addElement(tempUser.getUserName());
}else{
OfflineUsers.add(tempUser);
JListOfflineModel.addElement(tempUser.getUserName());
}
}//for(;tempForeachUser.hasNext();)
}//synchronized(AllUsers)
}
public static void main(String args[]){
new ServerFrame().setVisible(true);
}//main()
}//class ServerFrame
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -