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

📄 chat_frame.java

📁 一个用Java编写的网络聊天软件包
💻 JAVA
字号:
package chatroom;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

import javax.swing.*;

import sun.audio.*;


public class Chat_Frame extends JFrame implements ActionListener {
  
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	Container con;
	
	JPanel panel1;
	JPanel panel2;
	JPanel panel3;
	JPanel panel4;
	
	JLabel label1;
	JLabel label2;
	JLabel label4;
	JLabel label5;
        JLabel label6;
        JLabel label7;
        JLabel label0;

	List lstMsg;
	
	
	JTextField field1;
	
	JTextArea area1;
	JTextArea area2;
	JTextArea area3;

	JButton butt1;
	JButton butt2;
	
	BorderLayout l1;

        String nickname = new String("11111111111");
        String st,p;
     
   
    
       public final static int PORT=1234; //为其他用户发送信息的端口
    
       DatagramSocket socket=null;
       InetAddress group;
       DatagramPacket packet;
    
       DatagramSocket s = null;
       MulticastSocket socketr;
    
       Socket Csocket,sk;

       CCListener cclisten;
   
	
        
	public Chat_Frame(){
		
		
		

         while(nickname.length()>9||nickname.length()==0){
        	 
        	nickname  = JOptionPane.showInputDialog(null,"请输入昵称","登陆",3); 
        	 
        	
			
			if(nickname.length()>9)
				JOptionPane.showMessageDialog(null,"昵称长度需要小于10","非法昵称",JOptionPane.ERROR_MESSAGE);
			if(nickname.length()==0)
				JOptionPane.showMessageDialog(null,"昵称长度需要等于0","非法昵称",JOptionPane.ERROR_MESSAGE);
			
		
     }
        
          
            
         if(nickname==null)
        	 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         JOptionPane.showMessageDialog(null,"欢迎"+nickname+"的到来!我们的宗旨是:说你想说的话,让别人也跟着说吧!");               
         Ring(1);
         join_to_group();
         room_init();
         cf_listener();
        
}
	 private void cf_listener() {
		// TODO Auto-generated method stub
		 try
			{

				socketr = new MulticastSocket(PORT);

				socketr.joinGroup(group);
				 
			}catch(IOException e)
			{
				e.printStackTrace();
			}
			 cclisten = new CCListener(socketr,this);
		 
		
	}
	
	
	public void room_init(){
		
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setBackground(Color.cyan);
		this.setSize(500,500);
		this.setResizable(false);
                this.setTitle("*聊吧*");
		this.setIconImage(getToolkit().getImage("image\\xin.gif"));
		
		con=this.getContentPane();
                 

      
		Icon bg2 = new ImageIcon("image\\new.gif");
     
        Icon bg4 = new ImageIcon("image\\7.gif");
        Icon bg5 = new ImageIcon("image\\8.gif");
        
		 lstMsg = new List();
		 
		 //lstFriend.addActionListener(this);
		
		panel1=new JPanel();
		panel2=new JPanel();
		panel3=new JPanel();
                
		panel4=new JPanel();
		
        Font ft=new Font("宋体",Font.PLAIN,18);
        
        label0=new JLabel();
        label0.setIcon(bg5);
		label1=new JLabel("欢迎来*聊吧*");
		label1.setForeground(Color.RED);
		
        label1.setFont(ft);
		label2=new JLabel();
        label5=new JLabel();
        label6=new JLabel();
        label2.setIcon(bg4);
                label5.setIcon(bg4);
                label6.setIcon(bg4);

                label7=new JLabel();
                label7.setIcon(bg2);
		
       
		label4=new JLabel();
              
        label4.setText(nickname+":");
        label4.setForeground(Color.RED);
		
		area1=new JTextArea();
		area2=new JTextArea();
		
		field1=new JTextField();
		field1.setText(nickname+"请输入你要发送的信息!!");
		field1.addKeyListener(new KeyAdapter (){//添加事件按键事件监听,当文本框中按下"回车"时则发送文本框消息
			public void keyPressed(KeyEvent ek){
				if(ek.getKeyChar() == '\n')
					try {
						send_information();
						Ring(3);
						
						}
						catch(Exception e1) 
						{
						System.out.println("Error: " + e1);                 
						}
            }

		});
              
		
		butt1=new JButton("--发送--");
		butt1.addActionListener(this);
		butt2=new JButton("--连接--");
		butt2.addActionListener(this);
		
		l1=new BorderLayout();
		
		panel1.add(label0);
		panel1.add(label1);
        panel1.add(label7);
		
		
		panel2.setLayout(new BorderLayout());
		panel2.add(lstMsg,"Center");
		
		panel4.setLayout(new BorderLayout());
        panel4.add(label4,"North");
		panel4.add(field1,"Center");
		panel3.add(label6);
        panel3.add(butt1);
        panel3.add(label2);
        panel3.add(label2);
		
		

		panel4.add(panel3,"South");
		
		
		
		con.setLayout(l1);
		con.add(panel1,"North");
		con.add(panel2,"Center");
               
		con.add(panel4,"South");
		
		
		this.setVisible(true);

	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
           new Chat_Frame();
	}
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object obj=e.getSource();
		
		if(obj==butt1){
			send_information();
			Ring(3);
		}
		
	}
    public void send_information(){
    	try {
			//发送一个数据包到组波组,数据包数据结构为:用户名+文本框中的内容
			byte[] dataS = (nickname+":"+field1.getText()).getBytes();
			packet = new DatagramPacket(dataS,dataS.length, group, PORT); 
			socket.send(packet);        
			field1.setText("");//重设文本框的内容为空,方便下一次输入
			}
			catch(Exception e1) 
			{
			System.out.println("Error: " + e1);                 
			}     
    }
    public void processMsg(String str)//该方法为将字符串str显示到对话列表框中
	{   
		lstMsg.add(str);
		this.lstMsg.select(lstMsg.getItemCount()-1);
	}
   
    
    public void join_to_group(){
    	
    	try {
			group=InetAddress.getByName("238.0.0.0");
			
	    	try {
				socket=new DatagramSocket();
			} catch (SocketException e1) {
				// TODO Auto-generated catch block
				System.out.println("1。组播地址有错!!");
			}
		} catch (UnknownHostException e2) {
			// TODO Auto-generated catch block
			System.out.println("2。组播地址有错!!!");
		}
    	
    	
    }
    
    public void Ring(int i)
	{
		FileInputStream file;
		try {
			switch(i)
			{
				case 1: 
					file=new FileInputStream("sound\\BELL.wav");
					break;
				case 2: 
					file=new FileInputStream("sound\\ahoh.wav");
					break;
				case 3:
					file=new FileInputStream("sound\\notify.wav");
					break;
					
				default:
					file=new FileInputStream("ahoh.wav");
						
			}
			  AudioStream as=new AudioStream(file);
			  AudioPlayer.player.start(as);
			 }
			 catch (Exception e) {}
	}
  
   
}

⌨️ 快捷键说明

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