📄 chatroom.java
字号:
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 + -