?? 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 + -