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

📄 mainfrm.java

📁 网络聊天程序
💻 JAVA
字号:
package Java.ICQ;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.Vector;
import java.net.*;
import java.io.*;

public class MainFrm extends JFrame   implements Runnable
{
	////以下是程序界面的变量
    JPanel contentPane;
   // JLabel labelFriend;
    JList listFriend;
    DefaultListModel listModel;
    JPopupMenu findmenu;
    JMenuItem look,send;
    JButton buttonFind,buttonUpdate,buttonAdd,buttonStranger,buttonUpper,buttonLeave,buttonFriend;
    ImageIcon icon;
    JScrollPane scrollpane1;
    int username;
    String serverAddress;
    int serport; 
    ListFriend list;
    Socket socket;
	BufferedReader in;
	PrintWriter out;
	static Vector vectorList;
	DatagramSocket mail_data;
	 SendMessage dialogmessage;
	  Thread thread;
	 //***************
	public MainFrm(int username,String serverAddress,int  serport)
	{
		this.username=username;
		this.serverAddress=serverAddress;
		this.serport=serport;
  	    initFrame();
        initUI();
        addFrame();
        addListener();
        list= new ListFriend(this);
        System.out.println(vectorList.size());
        try
        {
        		mail_data=new DatagramSocket(8888);
        }
        catch(Exception e)
        {
        	System.out.println("连接失败");
        }
       thread = new Thread(this);
		thread.start();
	}
	//设置窗体信息
	public void initFrame()
	{
		 contentPane = (JPanel) this.getContentPane();
         contentPane.setLayout(null);

         this.getContentPane().setBackground(new Color(132, 158, 203));
         this.setResizable(false);
        // this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         this.setSize(new Dimension(195, 470));
         this.setTitle("海夸Java聊天程序");
    }
    //初始化UI界面
	public void initUI()
	{
		icon = new ImageIcon("1-1.GIF");
		buttonFriend = new JButton("我的好友",icon);
		buttonFriend.setBounds(new Rectangle(20,15,140,22));
		
		scrollpane1=new JScrollPane();
		vectorList = new Vector();
		
		look = new JMenuItem("查看资料");
		send = new JMenuItem("发送消息");
		findmenu = new JPopupMenu(); 
		
		listModel=new DefaultListModel();
		listFriend = new JList(listModel);
		listFriend.setSelectionForeground(Color.GRAY);
		
		listFriend.setBorder(BorderFactory.createLineBorder(Color.black));
		listFriend.setCellRenderer(new BookCellRenderer());
		scrollpane1.setBounds(new Rectangle(20,40,140,300));
		
		buttonFind = new JButton("查找");
		buttonFind.setBounds(new Rectangle(10,350,80,22));
		
		buttonUpdate = new JButton("查看资料");
		buttonUpdate.setBounds(new Rectangle(100,350,80,22));
		
		buttonAdd = new JButton("添加好友");
		buttonAdd.setBounds(new Rectangle(10,380,80,22));
		
		buttonStranger = new JButton("删除好友");
		buttonStranger.setBounds(new Rectangle(100,380,80,22));
		
		buttonUpper = new JButton("上线");
		buttonUpper.setBounds(new Rectangle(10,410,80,22));
		
		buttonLeave = new JButton("离线");
		buttonLeave.setBounds(new Rectangle(100,410,80,22));
	}
	//添加组件到窗体上
	public void addFrame()
	{
		contentPane.add(buttonFriend);
		scrollpane1.getViewport().add(listFriend,null);
		contentPane.add(scrollpane1,null);
		
		contentPane.add(buttonFind);
		contentPane.add(buttonUpdate);
		contentPane.add(buttonAdd);
		contentPane.add(buttonStranger);
		contentPane.add(buttonUpper);
		contentPane.add(buttonLeave);
		
		findmenu.add(look);
		findmenu.add(send);
		
	}
	//为每个按钮添加事件监听
	public void addListener()
	{
		ButtonListener listener = new ButtonListener(this);
		buttonFind.addActionListener(listener);
		buttonUpdate.addActionListener(listener);
		buttonAdd.addActionListener(listener);
		buttonStranger.addActionListener(listener);
		buttonUpper.addActionListener(listener);
		buttonLeave.addActionListener(listener);
		
		look.addActionListener(listener);
		send.addActionListener(listener);

		listFriend.addMouseListener(new MouseAdapter()
         {
         	public void mouseClicked(MouseEvent e)
        	{	
   	        	listFriend_mouseClicked(e);
   	        }
            public void mouseReleased(MouseEvent e) 
            {
               listFriend_mousePressed(e);
            }
  	
         });
         
         
    }
    protected void processWindowEvent(WindowEvent e) 
    {
      super.processWindowEvent(e);
      if (e.getID() == WindowEvent.WINDOW_CLOSING) 
      {

          try
          {
          	connectServer();           
            out.println("logout");
            out.println(username);
            
          	System.out.println(12);
          	String rsupdate = in.readLine();
          	System.out.println(rsupdate);
          	if(rsupdate.equals("updatesucceed"))
          	{
          		System.out.println("下线成功");
          	     dialogmessage.buffer = ("offline"+String.valueOf(username)).getBytes();
                dialogmessage.falg = false;
                for( int i=0;i<vectorList.size();i++)
                { 
          	       Friend friend= (Friend)vectorList.elementAt(i);
          	       System.out.println(friend.friendIp);
          	       if(friend.friendIp.trim().length()>0)
          	       {
          	         	dialogmessage.address = InetAddress.getByName(friend.friendIp);
          	         	dialogmessage.send();
          	        }
                }
          	}
          	else 
          	{
          		System.out.println("下线失败");
          	}
          	
          }
          catch(IOException ie)
          {
          	System.out.println("读取错误");
          }
          catch(Exception ee)
          {
          	System.out.println("发送失败");
          }
          
      }
     } 
    public void listFriend_mouseClicked(MouseEvent e)
    {
    	//Object obj = e.getSource();
     	if (e.getClickCount() == 2)
  	    { 
  	      sendDialog();
  	    }
    } 
    public void listFriend_mousePressed(MouseEvent e)
    {
    	if(e.isPopupTrigger())
    	{
          //Rectangle rt = listFriend.getCellBounds(listFriend.getSelectedIndex()-1,listFriend.getSelectedIndex()+1);
         // System.out.println(rt);
          System.out.println(e.getX());
          System.out.println(e.getY());
    	  if(listFriend.getSelectedIndex()!=-1)
    	    findmenu.show(this,e.getX()+60,e.getY()+60);
    	}
 
    }
    public void sendDialog()
    {
    	  dialogmessage = new SendMessage(this,"发送消息",false,this);
  	      dialogmessage.setBounds(300,300,400,400);
  	      dialogmessage.setResizable(false);
  	      dialogmessage.setVisible(true);
    }
	public static void main(String args[])
	{
		try
   	    {
   	 	   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch(Exception e) 
        {
          e.printStackTrace();
        }
		//MainFrm frame = new MainFrm();
		MainFrm frame=new MainFrm(123,"127.0.0.1",1010);
		frame.setVisible(true);
	}
	public void connectServer() throws IOException
	{
		
	    System.out.println("连接服务器");
	    System.out.println(serverAddress);
	    System.out.println(serport);
		socket=new Socket(InetAddress.getByName(serverAddress),serport);

        in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
        out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
	}
	public void closeSocket()
	{
		try
		{
		 	out.close();
	      	in.close();
	     	socket.close();
		}
		catch(IOException e)
		{
			System.out.println("关闭失败");
		}

	}
	public void run()
	{
		DatagramPacket pack=null;
		byte data[]=new byte[8192];
		try
		{
	     	pack=new DatagramPacket(data,data.length);
	    }
		catch(Exception e){}
		while(true)
		{
		 try
		 {
		 	if(mail_data==null) break;
		 	
			mail_data.receive(pack);
			int length=pack.getLength();
			InetAddress address1=pack.getAddress();
		    String	message=new String(pack.getData(),0,length);
			System.out.println(message);
			if(message.indexOf("offline")!=-1)
			{
				String firendname = message.substring(7);
				for(int i=0;i<vectorList.size();i++)
				{
					Friend friend1=(Friend)vectorList.elementAt(i);
					System.out.println(friend1.friendIcqno);
					
				    //listModel.removeElement();
				}
			}
			
            String name = message.substring(message.indexOf("/oicq")+5);
            if(dialogmessage == null)
            {
                 sendDialog();
            }
			dialogmessage.jTextArea1.append(name+"说: \n");
			dialogmessage.jTextArea1.append(message.substring(0,message.indexOf("/oicq"))+"\n\n");
			System.out.println("接爱来自消息");
		  }
		  catch(Exception e)
		  {
		  	System.out.println("接受消息失败");
		  }	
		}
	}

}

⌨️ 快捷键说明

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