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

📄 chatroom.java

📁 可以支持很多人在线聊天
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package talk3;

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



public class ChatRoom extends   JFrame  implements Runnable{
Vector friendnames=new Vector();
int friendnum;//friend number
private String [] picsonline=new String []{
"1.gif","3.gif","5.gif","7.gif"};
private String [] picsoffline=new String[]{
"2.gif","4.gif", "6.gif","8.gif"};
Vector friendjicq=new Vector();
Vector udpport=new Vector();
Vector friendips=new Vector();
Vector friendemail=new Vector();
Vector friendinfo=new Vector();
Vector picno=new Vector();
Vector status=new Vector();
right findf2=new right();

Vector tempname=new Vector();
Vector tempjicq=new Vector();
Vector tempip=new Vector();
Vector temppic=new Vector();
Vector tempstatus=new Vector();
Vector whoaddmesip=new Vector();//get whoaddme as friend
Vector tempemail=new Vector();
Vector tempinfo=new Vector();
int index;//get list index
int index3;//get firiend onlineinfo
int index4;//get message from info
boolean fromunknow=true;

FindFriend2 findf;
JDialog hello=new JDialog();
JDialog OneAddyou=new JDialog();
JDialog fenzutishi=new JDialog();
int tempgetjicq;

//以下是程序界面的变量
  JLabel jlabel10=new JLabel();
  JLabel jlabel11=new JLabel();
  JTextField mingcheng =new JTextField();
  JLabel oneaddme = new JLabel();
  JButton addit = new JButton("同意!");
  JButton iknow = new JButton("拒绝!");
  JButton addit2 = new JButton("同意!");
  JButton addit3 = new JButton("查看!");
  JButton iknow2 = new JButton("拒绝!");
  ImageIcon icon1=new ImageIcon("1.gif");
  ImageIcon icon6=new ImageIcon("2.gif");
  Socket socket;
  BufferedReader in;
  PrintWriter out;
  DatagramPacket sendPacket,receivePacket;
  DatagramSocket sendSocket,receiveSocket;

  String server;
  int serverport;
  byte array[]=new byte[512];
  Thread thread;
  long myjicq;
  String received;
  boolean xuanze=true;





JButton fasong = new JButton();
JButton fenzu = new JButton();
JButton tianjia = new JButton();
JRadioButton togroup = new JRadioButton();
JRadioButton flade = new JRadioButton();
JScrollPane jScrollPane1 = new JScrollPane();
JTextArea xianshi = new JTextArea();
JScrollPane jScrollPane2 = new JScrollPane();
JTextArea shuru = new JTextArea();
JButton chuanwenjian = new JButton();
Socket client = null;
BufferedReader input ;
String message=null;
String clientstring = null;
String severstring = null;
boolean done =false;
String theip;
JScrollPane jScrollPane3 = new JScrollPane();
JList list = new JList();
JButton see = new JButton();







/********************************************************************/
  public ChatRoom(long s,String sername,int serport)
  {
 enableEvents(AWTEvent.WINDOW_EVENT_MASK);
  try {
  myjicq=s;
  server=sername;
  serverport=serport;
  jbInit();
  ConnectServer(myjicq);
  CreatUDP();
  findf=new FindFriend2(myjicq,server,serverport);
  findf.setBounds(200,150,300,300);
  thread=new Thread(this);
  thread.start();
  }

  catch(Exception e) {
  e.printStackTrace();
  }
  }
/*******************************************************/


private void jbInit() throws Exception {
jScrollPane3.setBounds(new Rectangle(304, 13, 90, 334));
creatframe();
this.addWindowListener(new ChatRoom_this_windowAdapter(this));
see.setBackground(Color.white);
    see.setBounds(new Rectangle(150, 222, 44, 31));
    see.setText("see");
    see.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        see_mouseClicked(e);
      }
    });
    jScrollPane3.getViewport().add(list, null);
}



//***********************************************************
  public void  ConnectServer(long myid){
  try{
  socket=new Socket(InetAddress.getByName(server),serverport);
  in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
  out=new PrintWriter(new BufferedWriter(
  new OutputStreamWriter(socket.getOutputStream())),true);
  out.println("friend");
  out.println(myid);
  friendnum=Integer.parseInt(in.readLine());
  String friendname=" ";
  String friendjicqno,friendip,friendstatus,picinfo,email,infos;
  do{
  friendname=in.readLine();
  if(friendname.equals("over"))
  break;
  friendnames.add(friendname);
  friendjicqno=in.readLine();
  friendjicq.add(new Integer(friendjicqno));
  friendip=in.readLine();
  friendips.add(friendip);
  friendstatus=in.readLine();
  status.add(friendstatus);
  picinfo=in.readLine();
  picno.add(new Integer(picinfo));
  email=in.readLine();
  friendemail.add(email);
  infos=in.readLine();
  friendinfo.add(infos);
  }while(!friendname.equals("over"));
  }catch(IOException e1){System.out.println("false");}
//以下在列表中显示好友


  DefaultListModel mm=(DefaultListModel)list.getModel();

  int  picid;
  for(int p=0;p<friendnames.size();p++){
  picid=Integer.parseInt(picno.get(p).toString());
  if(status.get(p).equals("1")){
  mm.addElement(friendnames.get(p));}
  else {
  mm.addElement(new Object[]{friendnames.get(p),new ImageIcon(picsoffline[picid])});}
  }
   }
//**********************************************************
//以下函数无限监听好友的消息





public  void  run(){
while(true)
{
try{
for(int x=0;x<512;x++)
array[x]=' ';

receivePacket=new DatagramPacket(array,array.length);
receiveSocket.receive(receivePacket);
byte[] data=receivePacket.getData();
String infofromip=receivePacket.getAddress().getHostAddress().toString().trim();
index3=0;
received=new String(data,0,data.length);
received.trim();

  String tempstr;
  int tx;

if(received.substring(0,6).equals("online")){//如果有好友上线就变彩色
tempstr=received.substring(6).trim();
tempgetjicq=Integer.parseInt(tempstr);
do{
tx= Integer.parseInt(friendjicq.get(index3).toString());
if(tempgetjicq==tx)break;
index3++;
}while(index3<friendjicq.size());
friendips.setElementAt(infofromip,index3);
DefaultListModel mm3=(DefaultListModel)list.getModel();
int  picid=Integer.parseInt(picno.get(index3).toString());
mm3.setElementAt(new Object[]{friendnames.get(index3),new ImageIcon(picsonline[picid])},index3);
}
else  if(received.substring(0,7).equals("offline")){//如果有好友下线就变灰色
tempstr=received.substring(7).trim();
System.out.println("str"+tempstr);
tempgetjicq=Integer.parseInt(tempstr);
System.out.println("id"+tempgetjicq);
do{  tx= Integer.parseInt(friendjicq.get(index3).toString());
System.out.println("tx"+tx);
if(tempgetjicq==tx)break;
index3++;
}while(index3<friendjicq.size());
infofromip="null";
friendips.setElementAt(infofromip,index3);
System.out.println(index3);
DefaultListModel mm3=(DefaultListModel)list.getModel();
int  picid=Integer.parseInt(picno.get(index3).toString());
mm3.setElementAt(new Object[]{friendnames.get(index3),new ImageIcon(picsoffline[picid])},index3);
}





//<---
  else if(received.substring(0,9).equals("oneaddyou")){
  tempstr=received.substring(9).trim();
  tempgetjicq=Integer.parseInt(tempstr);
  OneAddyou.setBounds(400,300,250,200);
  OneAddyou.show();

  } //---->one add you .

else if(received.substring(0,7).equals("wenjian")){
    String s=received.substring(7,received.length() ).trim() ;

        try
          {

            Receive c = new Receive("211.87.234.144", 4070);
            c.show();
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");



          }
          catch(Exception e)
          {}

}







  else{//否则就显示收到消息
  index4=0;

  do{
  String friendip=friendips.get(index4).toString().trim();
  if (infofromip.equals(friendip)){
  String nameinfo=friendnames.get(index4).toString().trim();
  xianshi.append(nameinfo +" "+"对你说 : "+received+"\n") ;
  fromunknow=false;
  break;   }//if
  index4++;
  if(index4>=friendnames.size()){
  fromunknow=true;//收到陌生人的消息
  JOptionPane.showMessageDialog(this,"收到陌生人"+infofromip+"的消息","ok",JOptionPane.INFORMATION_MESSAGE);
  }
  }while(index4<friendnames.size());//whileSystem.out.println(index4);
  }
  }
catch(IOException  ex){ex.printStackTrace();}
  }
  }










//以下创建数据报
  public void CreatUDP(){
  try{
  sendSocket=new DatagramSocket();
  receiveSocket=new DatagramSocket(4040);
  }catch(SocketException se){se.printStackTrace();System.out.println("false udp");}
  }









public void creatframe(){
setTitle("聊天室");
setSize(410,410);
setResizable(false);
xianshi.setBorder(BorderFactory.createLoweredBevelBorder());
jScrollPane1.setBounds(new Rectangle(10, 10, 279, 211));
this.getContentPane().setLayout(null);
this.getContentPane().setBackground(UIManager.getColor("TextPane.selectionBackground"));
fasong.setBounds(new Rectangle(216, 227, 71, 25));
fasong.setBorder(BorderFactory.createLineBorder(Color.black));
fasong.setText("fasong ");
fasong.addMouseListener(new ChatRoom_fasong_mouseAdapter(this));
fenzu.setBackground(Color.white);
fenzu.setBounds(new Rectangle(10, 223, 43, 30));
fenzu.setBorder(null);
fenzu.setDebugGraphicsOptions(0);
fenzu.setHorizontalTextPosition(SwingConstants.TRAILING);
ImageIcon c=new ImageIcon("3.GIF");
fenzu.setIcon(c) ;
fenzu.setText("fenzu");
fenzu.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
fenzu_mouseClicked(e);
}});
tianjia.setBackground(Color.white);
tianjia.setBounds(new Rectangle(57, 223, 43, 30));
tianjia.setBorder(null);
c=new ImageIcon("4.gif");
tianjia.setIcon(c) ;
tianjia.setText("tianjia");
tianjia.addMouseListener(new ChatRoom_tianjia_mouseAdapter(this));
tianjia.addMouseListener(new ChatRoom_tianjia_mouseAdapter(this));
ListModel model=new NameAndPicListModel(friendnames,picsonline);
ListCellRenderer renderer=new NameAndPicListCellRenderer();
list=new JList(model);
OneAddyou.getContentPane().setLayout(null);
fenzutishi.getContentPane().setLayout(null);
togroup.setBackground(UIManager.getColor("ComboBox.selectionBackground"));
togroup.setForeground(Color.black);
togroup.setBorderPainted(false);
togroup.setText("对组员");
togroup.setBounds(new Rectangle(14, 354, 92, 15));
    togroup.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        togroup_mouseClicked(e);
      }
    });
flade.setBackground(UIManager.getColor("ComboBox.selectionBackground"));
flade.setText("隐身");
flade.setBounds(new Rectangle(201, 353, 92, 15));
    flade.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        flade_mouseClicked(e);
      }
    });
jScrollPane2.setBounds(new Rectangle(10, 257, 284, 88));
shuru.setBorder(BorderFactory.createLoweredBevelBorder());
chuanwenjian.setBackground(Color.white);

⌨️ 快捷键说明

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