📄 mainfrm.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 + -