📄 mainframe.java
字号:
package com.client;
import java.awt.List;
import java.awt.Font;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.ServerSocket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JScrollPane;
class MainFrame extends JFrame implements Runnable
{
public static List list;
public static String clientName;
private static String destName;
private static Socket clientSocket;
private static ObjectOutputStream out ;
private static ObjectInputStream in;
private static String flag;
private static String destIP;
private static String[] chatMessage;
public static String[] serverMessage;
public static String serverIP;
public static int port;
public MainFrame(String[] serverMessage,String clientName,String sIP)
{
super();
this.serverIP=sIP;
setIconImage(new ImageIcon(this.getClass().getResource("image/bird.jpg")).getImage());
port=9000;
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.clientName=clientName;
this.serverMessage=serverMessage;
setTitle(clientName);
getContentPane().setLayout(null);
setBounds(100, 100, 194, 416);
list = new List();
list.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
int clickCount=e.getClickCount();
if(clickCount==2)
{
destName=list.getSelectedItem();
chatMessage=new String[2];
chatMessage[0]="chat";
chatMessage[1]=destName;
try
{
Socket sk=new Socket(serverIP,7777);
out=new ObjectOutputStream(sk.getOutputStream());
in=new ObjectInputStream(sk.getInputStream());
out.writeObject(chatMessage);
out.flush();
destIP=(String)in.readObject();
if(destIP.equals("failed"))
{
MessageDialog dialog=new MessageDialog("没有此用户!");
dialog.setSize(331, 163);
return;
}
else if(destIP.equals("unlogin"))
{
MessageDialog dialog=new MessageDialog("此用户未登录!");
dialog.setSize(331, 163);
return;
}
else
{
Socket requestSocket=new Socket(destIP,8890);
ObjectOutputStream os=new ObjectOutputStream(requestSocket.getOutputStream());
ObjectInputStream is=new ObjectInputStream(requestSocket.getInputStream());
os.writeObject("chat");
os.flush();
int ack=(Integer)is.readObject();
if(ack==1)
{
MessageDialog dialog=new MessageDialog("对方拒绝连接!");
dialog.setSize(331, 163);
return;
}
else
{
flag="client";
port=ack;
ChatThread chat=new ChatThread(flag,destIP,destName,port);
Thread thread=new Thread(chat);
chat.setVisible(true);
thread.start();
}
}
}catch(Exception ce){}
}
}
});
list.setBounds(10, 29, 166, 293);
Font font=new Font("楷体",Font.BOLD,16);
list.setFont(font);
for(int i=1;i<serverMessage.length;i++)
{
String[] tempStr=new String[2];
tempStr=serverMessage[i].split("!");
list.add(tempStr[0]);
}
final JScrollPane scrollPane= new JScrollPane();
scrollPane.setBounds(10, 42, 166, 277);
getContentPane().add(scrollPane);
scrollPane.setViewportView(list);
final JLabel label = new JLabel();
label.setText("好友列表");
label.setBounds(70, 0, 63, 21);
getContentPane().add(label);
final JButton close = new JButton();
close.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
try
{
Socket sk=new Socket(serverIP,7777);
out=new ObjectOutputStream(sk.getOutputStream());
in=new ObjectInputStream(sk.getInputStream());
String[] withdrawMessage=new String[2];
withdrawMessage[0]="withdraw";
withdrawMessage[1]=MainFrame.clientName;
out.writeObject(withdrawMessage);
out.flush();
System.exit(0);
}catch(Exception oe){}
}
});
close.setText("退出");
close.setBounds(102, 354, 63, 23);
getContentPane().add(close);
final JButton button = new JButton();
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
EditionMessage edition=new EditionMessage();
edition.setVisible(true);
}
});
button.setText("关于");
button.setBounds(23, 354, 63, 23);
getContentPane().add(button);
final JLabel lookup = new JLabel();
lookup.setIcon(new ImageIcon(this.getClass().getResource("image/lookup.jpg")));
lookup.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent arg0)
{
try {
Lookup dialog = new Lookup();
dialog.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
dialog.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
lookup.setBounds(37, 325, 37, 22);
getContentPane().add(lookup);
final JLabel delete = new JLabel();
delete.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent arg0)
{
try
{
Socket sk=new Socket(serverIP,7777);
out=new ObjectOutputStream(sk.getOutputStream());
in=new ObjectInputStream(sk.getInputStream());
String[] withdrawMessage=new String[2];
String[] deleteMessage=new String[3];
deleteMessage[0]="delete";
deleteMessage[1]=MainFrame.clientName;
deleteMessage[2]=list.getSelectedItem().toString();
out.writeObject(deleteMessage);
out.flush();
list.remove(deleteMessage[2]);
list.repaint();
MessageDialog dialog=new MessageDialog("已经将"+deleteMessage[2]+"从好友中删除。");
dialog.setSize(331, 163);
return;
}catch(Exception pe){}
}
});
delete.setIcon(new ImageIcon(this.getClass().getResource("image/del.jpg")));
delete.setBounds(124, 325, 37, 23);
getContentPane().add(delete);
setVisible(true);
}
public void run()
{
try
{
ServerSocket serverSocket=new ServerSocket(8890);
while(true)
{
Socket cSocket=serverSocket.accept();
ObjectOutputStream os=new ObjectOutputStream(cSocket.getOutputStream());
ObjectInputStream is=new ObjectInputStream(cSocket.getInputStream());
String request=(String)is.readObject();
port++;
os.writeObject(port);
os.flush();
if(request.equals("chat"))
{
flag="server";
String destIP=cSocket.getInetAddress().toString();
ChatThread chat=new ChatThread(flag,destIP,"",port);
chat.setVisible(true);
Thread thread=new Thread(chat);
thread.start();
}
else if(request.equals("file"))
{
port=port+1;
os.writeObject(port);
os.flush();
try
{
ServerSocket fileServerSocket=new ServerSocket(port);
Socket fileSocket=fileServerSocket.accept();
System.out.println("jie dao");
FileRecive fileRcv=new FileRecive(fileSocket);
fileRcv.setVisible(true);
Thread thread=new Thread(fileRcv);
thread.start();
}catch(Exception de){}
}
}
}catch(Exception e){ e.printStackTrace();}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -