package com.Socket.tcp.chatRoom;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/**编写聊天界面类
* 1、框架(JFrame)
* 2、面板(JPanel)
* 先要创建布局(这里主要是GridBagLayout) 布局可以管理容器
* 3、容器(container) 容器里面可以存放组件
* 4、组件(component)
*
*
*/
public class chatRoomGUI extends JFrame implements ActionListener{
private static int flag=1;
private Socket socket;
public static JTextArea t_message;
public static JTextField t_name;
public static JTextField t_send;
public chatRoomGUI() {
}
public chatRoomGUI(Socket socket){
this.socket=socket;
//创建框架
JFrame jFrame=new JFrame("简易聊天室");
jFrame.setLayout(new GridBagLayout());
jFrame.setBounds(50,50,700,600);
//创建初始化自己名字的面板及组件
JPanel panel_name=new JPanel(); //创建面板
JLabel l_name=new JLabel("请输入名字:"); //创建标签
t_name=new JTextField(10); //创建文本框
panel_name.add(l_name); //将组件添加到面板
panel_name.add(t_name);
GridBagConstraints gbc_name=new GridBagConstraints(); //定义网格包布局的约束条件
//把组件放在第1行,第3列
gbc_name.gridx=2; //gridx代表列 第三列
gbc_name.gridy=0; //gridy代表行 第一行
//创建文本域
//JPanel panel_messageArea=new JPanel(new FlowLayout());
t_message=new JTextArea("",20, 50);
//panel_messageArea.add(t_message);
GridBagConstraints gbc_message=new GridBagConstraints();
gbc_message.gridx=0;
gbc_message.gridy=1;
gbc_message.gridwidth=3;
//创建发送内容框
JPanel panel_send=new JPanel(new FlowLayout());
t_send=new JTextField(30);
JButton send=new JButton("发送");
panel_send.add(t_send);
panel_send.add(send);
GridBagConstraints gbc_send=new GridBagConstraints();
gbc_send.gridx=2;
gbc_send.gridy=2;
//把面板放进框架中
jFrame.add(panel_name,gbc_name);
jFrame.add(t_message,gbc_message);
jFrame.add(panel_send, gbc_send);
jFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
jFrame.setVisible(true);
send.addActionListener(this);
}
//向服务器发送消息
public void sendMessage() {
if(flag==1) {
String name="";
name="欢迎"+t_name.getText()+"加入聊天室";
t_message.append("系统消息:"+name+"\r\n");
flag++;
}
if(t_name.getText().isEmpty()) {
JOptionPane.showMessageDialog(null,"发送数据不能为空,请重新输入");
}
String message=t_send.getText();
try {
if(!message.isEmpty()){
//从现有的OutputStream创建一个新的PrintWriter,自动线路刷新
PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
pw.println(t_name.getText()+":"+message);
t_send.setText("");
}
else {
JOptionPane.showMessageDialog(null,"发送数据不能为空,请重新输入");
}
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("发送失败");
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
sendMessage();
}
}