UDP协议实现简单的聊天室
本案例采用了ufg-8的语言格式,涉及到了io,多线程,GUI等知识。
package test02.ChatTest;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
public class GuiChat extends JFrame {
private JButton sendButton; //发送按钮
private JButton clearButton; //清除聊天记录按钮
private static int DEFAULT_PORT=8888; //设置的初始端口号
private JTextField ipTextField; //输入ip地址的文本框
private JTextField portTextField; //输入端口号的文本框
private JTextArea inputTextArea; //输入要说的话的地方
private JTextArea centerTextArea; //显示聊天记录的区域
private JLabel stateLB; //设置端口状态信息
private DatagramSocket datagramSocket;
public GuiChat(){
setUpUI();
setListener();
initSocket();
}
public void setUpUI(){
//设置窗口的基本属性
setTitle("GUI聊天室");
setLayout(new BorderLayout());
setBounds(400,300,700,600);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setVisible(true);
//设置窗口上方的提示信息
stateLB=new JLabel();
stateLB.setText("窗口还未开始监听");
stateLB.setHorizontalAlignment(JLabel.RIGHT);
add(stateLB,BorderLayout.NORTH);
//设置显示聊天记录的部分
centerTextArea=new JTextArea();
centerTextArea.setEditable(false); //不可以对聊天记录进行修改
centerTextArea.setBackground(Color.cyan);
add(new JScrollPane(centerTextArea),BorderLayout.CENTER);
//设置窗口下方的输入框和ip地址和端口输入框
JPanel southPanel=new JPanel();
southPanel.setLayout(new BorderLayout());
inputTextArea=new JTextArea(5,30);
southPanel.add(inputTextArea,BorderLayout.NORTH);
JPanel bottomPanel=new JPanel();
ipTextField=new JTextField("127.0.0.1",10);
portTextField=new JTextField(String.valueOf(DEFAULT_PORT),3);
sendButton=new JButton("发送");
clearButton=new JButton("清空");
bottomPanel.add(ipTextField);
bottomPanel.add(portTextField);
bottomPanel.add(sendButton);
bottomPanel.add(clearButton);
southPanel.add(bottomPanel,BorderLayout.SOUTH);
add(southPanel,BorderLayout.SOUTH);
//使窗口可视化
setResizable(false);
}
//设置各个监听事件
public void setListener(){
sendButton.addActionListener(new ActionListener(){