您的位置:首页 > 其它

简易聊天系统-实现发送,清屏,聊天记录和震动功能

2013-09-10 21:46 399 查看
import java.awt.BorderLayout;
import java.awt.Button;
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.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedOutputStream;
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.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

import javax.xml.crypto.Data;

public class ChatDemo extends Frame {

private TextArea viewt1;
private TextArea sendt2;
private TextField textField;
private Button send;
private Button clear;
private Button log;
private Button shake;
private DatagramSocket datagramSocket;
private BufferedWriter fos;

public ChatDemo() {
init();

panelSouth();
panelCenter();
handleControl();
new receiver().start();
}

private void panelCenter() {
Panel panel = new Panel();
viewt1 = new TextArea();
sendt2 = new TextArea(5, 1);
panel.setLayout(new BorderLayout());
viewt1.setEditable(false);

panel.add(viewt1, BorderLayout.CENTER);
panel.add(sendt2, BorderLayout.SOUTH);
this.add(panel, BorderLayout.CENTER);

}

private void panelSouth() {
Panel panel = new Panel();
textField = new TextField(10);
textField.setText("192.168.3.161");
send = new Button("发送");
clear = new Button("清屏");
log = new Button("记录");
shake = new Button("震动");
panel.add(textField);
panel.add(send);
panel.add(clear);
panel.add(log);
panel.add(shake);
this.add(panel, BorderLayout.SOUTH);

}

private void handleControl() {
this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);
}
});
send.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
send();
}

});
sendt2.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_ENTER) {
send();
e.consume();
}
}
});
clear.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
viewt1.setText("");
}
});
log.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
loadfile();
}

});
shake.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
sendData();
}

});
}

private void sendData() {
try {
DatagramPacket datagramPacket = new DatagramPacket(
new byte[] { -1 }, 1, InetAddress.getByName(textField
.getText()), 9999);
datagramSocket.send(datagramPacket);
} catch (Exception e) {

e.printStackTrace();
}
}

private void loadfile() {
viewt1.setText("");
try {
fos.flush();
FileInputStream fileInputStream = new FileInputStream("abc.txt");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int len;
byte[] arr = new byte[1024];
while ((len = fileInputStream.read(arr)) != -1) {
byteArrayOutputStream.write(arr, 0, len);
}
byte[] arr2 = byteArrayOutputStream.toByteArray();
String ss = new String(arr2);
viewt1.setText(ss);
} catch (Exception e) {

e.printStackTrace();
}
}

private void send() {
String txtString = sendt2.getText();
String ipString = textField.getText();
try {
DatagramPacket datagramPacket = new DatagramPacket(
txtString.getBytes(), txtString.getBytes().length,
InetAddress.getByName(ipString), 9999);
datagramSocket.send(datagramPacket);
String currenttimeString = getDate();
synchronized (this) {

String str = currenttimeString + " " + "我对 " + ipString + "说\r\n"
+ txtString + "\n\n";
viewt1.append(str);
fos.write(str);

sendt2.setText("");
}
} catch (Exception e) {

e.printStackTrace();
}
}

private String getDate() {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
return simpleDateFormat.format(date);
}

private void init() {
this.setSize(300, 600);
this.setLocation(600, 50);
this.setVisible(true);
try {
datagramSocket = new DatagramSocket();
fos = new BufferedWriter(new FileWriter("abc.txt", true));
} catch (Exception e) {

e.printStackTrace();
}
}

class receiver extends Thread {
public void run() {
try {
DatagramSocket datagramSocket = new DatagramSocket(9999);
DatagramPacket datagramPacket = new DatagramPacket(
new byte[1024], 1024);
while (true) {
datagramSocket.receive(datagramPacket);
String ip = datagramPacket.getAddress().getHostAddress();
String time = getDate();
byte[] arr = datagramPacket.getData();
int len = datagramPacket.getLength();
if (len == 1 && arr[0] == -1) {
shake();
continue;
}
synchronized (ChatDemo.this) {

String string1 = new String(arr, 0, len);

viewt1.append(time + " " + ip + " " + "对我说:\r\n" + string1
+ "\r\n\r\n");
}
}
} catch (Exception e) {

e.printStackTrace();
}
}

}

private void shake() {
int x = this.getLocation().x;
int y = this.getLocation().y;

try {
for (int i = 0; i < 10; i++) {
Thread.sleep(30);
this.setLocation(x + 20, y + 20);
Thread.sleep(30);
this.setLocation(x - 20, y - 20);
Thread.sleep(30);
this.setLocation(x - 20, y + 20);
Thread.sleep(30);
this.setLocation(x + 20, y - 20);
Thread.sleep(30);
this.setLocation(x + 20, y + 20);
Thread.sleep(30);
this.setLocation(x, y);
}}catch (InterruptedException e) {

e.printStackTrace();
}

}

public static void main(String[] args) {
new ChatDemo();
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐