package gui_talk;
import java.awt.FlowLayout;
import java.awt.TextArea;
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.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.JButton;
import javax.swing.JFrame;
public class WindowSet {
private JFrame window;
private TextArea show;
private TextArea input;
private JButton send;
private JButton exit;
private JButton move;
private DatagramSocket server;
private DatagramSocket user;
private String title;
public WindowSet(JFrame window) {
this.window = window;
windowSet();
}
private void windowSet() {
try {
title = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
window.setTitle("本机地址:" + title+"========奥斯威尔");
window.setBounds(400, 150, 500, 500);
window.setResizable(false);
window.setLayout(new FlowLayout());
// 添加窗体监听事件
windowClose();
// 加载显示区域
loadShow();
window.add(show);
// 加载输入区域
loadInput();
window.add(input);
// 加载发送按钮
loadSend();
window.add(send);
// 加载退出按钮
loadExit();
window.add(exit);
// 添加清屏按钮
loadMove();
window.add(move);
window.setVisible(true);
input.requestFocus();
// 加载服务端
loadServer();
}
private void loadServer() {
try {
server = new DatagramSocket(4540);
byte[] bys = new byte[1024000];
DatagramPacket dp = new DatagramPacket(bys, bys.length);
try {
while (true) {
server.receive(dp);
String ip = dp.getAddress().getHostAddress();
int size = dp.getLength();
byte[] messageArray = dp.getData();
String showMessage = new String(messageArray, 0, size);
show.append(ip + ":\r\n" + showMessage + "\r\n");
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (SocketException e) {
e.printStackTrace();
}
}
private void loadMove() {
move = new JButton();
move.setText("清除信息");
move.setSize(50, 20);
move.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
show.setText("");
input.requestFocus();
}
});
}
private void loadSend() {
send = new JButton();
send.setText("发送(ENTER)");
send.setSize(50, 20);
// 添加发送按钮临听事件
send.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
InetAddress ip = null;
try {
ip = InetAddress.getByName("192.168.1.255");
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
user = new DatagramSocket();
String userMessage = input.getText();
byte[] userbys = userMessage.getBytes();
DatagramPacket dp = new DatagramPacket(userbys,
userbys.length, ip, 4540);
try {
user.send(dp);
input.setText("");
input.requestFocus();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (SocketException e1) {
e1.printStackTrace();
}
}
});
}
private void loadExit() {
exit = new JButton();
exit.setText("退出");
exit.setSize(50, 20);
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
private void loadInput() {
input = new TextArea(5, 60);
input.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER){
try {
InetAddress ip = InetAddress.getByName("192.168.1.255");
user = new DatagramSocket();
String userMessage = input.getText();
byte[] userbys = userMessage.getBytes();
DatagramPacket dp = new DatagramPacket(userbys,
userbys.length, ip, 4540);
user.send(dp);
input.setText("");
input.requestFocus();
}catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
}
private void loadShow() {
show = new TextArea(20, 60);
}
private void windowClose() {
window.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}