package com.heima.GuiChat;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
public class GuiChat extends Frame{
private Button send;
private Button log;
private Button clear;
private Button shake;
private TextField text;
private TextArea toptext;
private TextArea downtext;
private DatagramSocket socket;
private BufferedWriter dw;
public GuiChat(){
Innit();
SouthPanel();
CenterPanel();
event();
}
private void CenterPanel() {
Panel center=new Panel();
toptext = new TextArea();
downtext = new TextArea(5,1);
center.setLayout(new BorderLayout());
toptext.setEditable(false);
toptext.setBackground(Color.white);
downtext.setFont(new Font("xx", NORMAL, 18));
center.add(toptext, BorderLayout.CENTER);
center.add(downtext, BorderLayout.SOUTH);
this.add(center,BorderLayout.CENTER);
}
private void SouthPanel() {
Panel south=new Panel();
text = new TextField(20);
text.setText("192.168.1.102");
send = new Button("发送");
log = new Button("记录");
clear = new Button("清除");
shake = new Button("震动");
south.add(text);
south.add(send);
south.add(log);
south.add(clear);
south.add(shake);
this.add(south,BorderLayout.SOUTH);
}
public void event() {
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
try {
dw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
socket.close();
System.exit(0);
}
});
send.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
sendMessage();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
log.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
logFile();
}
});
clear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
toptext.setText("");
}
});
shake.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
send(new byte[]{-1},text.getText());
shake();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
downtext.addKeyListener(new KeyAdapter(){
public void keyReleased(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER){
try {
sendMessage();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
});
}
private void shake() {
int x=this.getLocation().x;
int y=this.getLocation().y;
for (int i = 0; i < 10; i++) {
try{
this.setLocation(x+20, y-20);
Thread.sleep(20);
this.setLocation(x+20, y+20);
Thread.sleep(20);
this.setLocation(x-20, y+20);
Thread.sleep(20);
this.setLocation(x-20, y+20);
Thread.sleep(20);
this.setLocation(x, y);
}
catch(InterruptedException e){
e.printStackTrace();
}
}
}
protected void logFile() {
try {
dw.flush();
FileInputStream in=new FileInputStream("config.txt");
ByteArrayOutputStream by=new ByteArrayOutputStream();
int len;
byte[] arr=new byte[8192];
while((len=in.read(arr))!=-1){
by.write(arr,0, len);
}
String l=by.toString();
toptext.setText(l);
} catch (IOException e) {
e.printStackTrace();
}
}
private void sendMessage() throws IOException {
String ip=text.getText();
ip=ip.trim().length()==0?"255.255.255.255":ip;
String message=downtext.getText();
send(message.getBytes(),ip);
String time=getTime();
String str = time+"我对"+(ip=="255.255.255.255"?"所有人":ip)+"说:\r\n"+message+"\r\n\r\n";
dw.write(str);
toptext.append(str);
downtext.setText("");
}
private void send(byte[] arr,String ip) throws IOException {
DatagramPacket packet=
new DatagramPacket(arr,arr.length, InetAddress.getByName(ip), 8888);
socket.send(packet);
}
private String getTime() {
Date s=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("YYYY年MM月DD日HH:mm:ss");
return sdf.format(s);
}
public void Innit() {
this.setTitle("MyQQ");
this.setLocation(500, 50);
this.setSize(410, 600);
Receive s1=new Receive();
s1.start();
try {
dw=new BufferedWriter(new FileWriter("config.txt",true)) ;
socket = new DatagramSocket();
} catch (IOException e) {
e.printStackTrace();
}
this.setVisible(true);
}
private class Receive extends Thread{
@Override
public void run() {
try {
DatagramSocket ReceiveSocket=new DatagramSocket(8888);
DatagramPacket ReceivePacket=new DatagramPacket(new byte[8192], 8192);
while(true){
ReceiveSocket.receive(ReceivePacket);
byte[] arr=ReceivePacket.getData();
int len=ReceivePacket.getLength();
if(arr[0]==-1&&len==1){
shake();
continue;
}
String time=getTime();
String ip=ReceivePacket.getAddress().getHostAddress();
String message=new String(arr,0,len);
String str = time+":"+ip+"对我说:\r\n"+message+"\r\n\r\n";
dw.write(str);
toptext.append(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new GuiChat();
}
}
仿qq聊天工具
最新推荐文章于 2024-04-23 09:51:16 发布