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

📄 serverframe.java

📁 实现多人即时聊天
💻 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 + -