package Chat;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
import Game.Puzzle;
import lombok.Data;
/**
* 用户类的构建 以login类中的用户名为user
*
*
* @author czx
*
*/
@Data
public class User {
JFrame frame;
private JTextField textField;
String username;
TextArea textArea;
private PrintWriter writer;
private BufferedReader reader;
String text;
String next;
static int port;
static String host;
Socket socket;
static String strMsg;
@SuppressWarnings("rawtypes")
ArrayList userList = new ArrayList();
public JFrame getFrame() {
return frame;
}
public void setFrame(JFrame frame) {
this.frame = frame;
}
/**
* Create the application.
*
* @param host
* @param port
*/
@SuppressWarnings("static-access")
public User(int port, String host) {
this.port = port;
this.host = host;
initialize();
System.out.println(port + host);
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 516, 274);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setVisible(true);
username = frame.getTitle();
TextArea textArea = new TextArea();
textArea.setBackground(Color.WHITE);
textArea.setEditable(false);
frame.getContentPane().add(textArea, BorderLayout.NORTH);
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder("文本输入"));
frame.getContentPane().add(panel, BorderLayout.SOUTH);
try {
// 创建一个套接字,host port是从login中获取的
socket = new Socket(host, port);
// 创建一个往套接字中写数据的管道,即输出流,给服务器发送信息
writer = new PrintWriter(socket.getOutputStream());
// 创建一个聪套接字读数据的管道,即输入流,读服务器读返回信息
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
JButton btnNewButton = new JButton("发送");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 获取用户输入读文本
String str = textField.getText();
text = str;
username = frame.getTitle();
if (!text.equals("")) {
next = textArea.getText();
// 通过输出流将数据发送给服务器
// text = "From " + username + "说: " + (str + "\r\n") +
// next;
writer.println(username + "说:" + text);
// writer.println(text);
writer.flush();
// 清空文本框
textField.setText("");
}
JOptionPane.showMessageDialog(null, "请输入内容");// 先这样吧,能提示就好
}
});
textField = new JTextField();
textField.setToolTipText("");
textField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 获取用户输入读文本
String str = textField.getText();
text = str;
username = frame.getTitle();
if (!text.equals("")) {
next = textArea.getText();
writer.println(username + "说:" + text);
writer.flush();
// 清空文本框
textField.setText("");
}
JOptionPane.showMessageDialog(null, "请输入内容");
}
});
panel.add(textField);
textField.setColumns(15);
panel.add(btnNewButton);
JButton btnNewButton_1 = new JButton("断开");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.dispose();// 销毁页面
}
});
panel.add(btnNewButton_1);
JButton btnNewButton_2 = new JButton("小游戏");
btnNewButton_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
@SuppressWarnings("unused")
Puzzle pz = new Puzzle();
}
});
panel.add(btnNewButton_2);
JButton btnNewButton_3 = new JButton("分享图片");
btnNewButton_3.addActionListener(new ActionListener() {
@SuppressWarnings("unused")
public void actionPerformed(ActionEvent e) {
Shared shared = new Shared();
}
});
panel.add(btnNewButton_3);
// 启动线程
new GetMsgFromServer().start();
Thread t1 = new Thread() {
@Override
public void run() {
while (this.isAlive()) {
try {
strMsg = reader.readLine();
if (strMsg != null) {
// 在文本域中显示聊天信息
textArea.append(strMsg + "\n");
}
Thread.sleep(50);
} catch (Exception e) {
e.printStackTrace();
}
}
}
};
t1.start();
}
// 接受服务器读返回信息读线程
class GetMsgFromServer extends Thread {
@Override
public void run() {
while (this.isAlive()) {
try {
strMsg = reader.readLine();
if (strMsg != null) {
}
Thread.sleep(50);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void appendText(String in) {
textArea.append("\n" + in);
}
}