📄 chatapp.java
字号:
import java.net.*;
import java.io.*;
import javax.swing.UIManager;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChatApp {
boolean packFrame = false;
public ChatApp(){
ChatFrame frame = new ChatFrame();//设置图形用户界面
if(packFrame){
frame.pack();
}
else{
frame.validate();
}
//设置窗口的位置大小
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if(frameSize.height> screenSize.height){
frameSize.height = screenSize.height;
}
if(frameSize.width > screenSize.width){
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width)/2,(screenSize.height - frameSize.height)/2);
frame.setVisible(true);
frame.waitforpackets();
}
public static void main(String[] args){
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e){
e.printStackTrace();
}
new ChatApp();
}
}
//创建聊天窗口
class ChatFrame extends JFrame{
JPanel contentPane;
Label label1 = new Label();//创建标志
Label label2 = new Label();//同上
TextField textField1 = new TextField();//定义输入得文本框
TextField textField2 = new TextField();//定义输入得文本框
Button button1 = new Button();//创建按钮
TextArea textArea1 = new TextArea();//创建聊天区域
DatagramPacket sendpacket,receivepacket;//创建接收发送数据包
DatagramSocket sendsocket,receivesocket;//同上
//使窗口上的按钮有效
public ChatFrame(){
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try{jbInit();}
catch(Exception e){
e.printStackTrace();
}
}
private void jbInit() throws Exception{
contentPane = (JPanel) this.getContentPane();
label1.setText("发送信息:");
label1.setBounds(new Rectangle(13,59,60,21));
contentPane.setLayout(null);//布局设为空
this.setSize(new Dimension(363,275));//设置大小
this.setTitle("利用UDP实现聊天室");
label2.setText("请输入对方IP地址:");
label2.setBounds(new Rectangle(12,19,109,23));//设置其范围
try {
sendsocket = new DatagramSocket();
receivesocket = new DatagramSocket(5001);
}
catch(SocketException se){
se.printStackTrace();
System.exit(0);
}
button1.setLabel("发送");
button1.setBounds(new Rectangle(280,59,59,21));//设置范围
//为按钮添加监听事件处理
button1.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(ActionEvent e){
button1_actionPerformed(e);
}
});
textField2.setBounds(new Rectangle(123,20,114,19));
textArea1.setBounds(new Rectangle(11,96,333,134));
textField1.setBounds(new Rectangle(76,57,191,19));//设置页面上内容区域的范围
//添加初始内容都为空
contentPane.add(label2, null);
contentPane.add(label1, null);
contentPane.add(textField1, null);
contentPane.add(button1, null);
contentPane.add(textField2, null);
contentPane.add(textArea1, null);
}
//窗口上的关闭按钮有效
protected void processWindowEvent(WindowEvent e){
super.processWindowEvent(e);
if(e.getID()==WindowEvent.WINDOW_CLOSING){
System.exit(0);
}
}
public void waitforpackets(){
while(true){
try{
byte[]array = new byte[100];
receivepacket = new DatagramPacket(array,array.length);
receivesocket.receive(receivepacket);
textArea1.append("\nfrom"+receivepacket.getAddress() +":");
byte data[] = receivepacket.getData();
String received = new String(data,0);
textArea1.append(received);
}//接收数据报
catch(IOException se){
textArea1.append(se.toString() +"\n");
se.printStackTrace();
}
}
}
//检测对话空中的内容是否为空,如果不为空则,输入第二个对话框的内容,如果为空则要弹出“请输入您朋友的IP地址,否则无法连接!”
void button1_actionPerformed(ActionEvent e){
String str = textField2.getText();
if(str.compareTo("")!=0){
try{
textArea1.append("\nto"+ textField2.getText() +":"+ textField1.getText());
String s = textField1.getText();
byte data[] = new byte[100];
s.getBytes(0,s.length(),data,0);
sendpacket = new
DatagramPacket(data, s.length(),InetAddress.getByName(textField2.getText()),5000);//获取发送数据报
sendsocket.send(sendpacket);//发送数据报
}
catch(IOException exc){
textArea1.append(exc.toString() +"\n");
exc.printStackTrace();
}
}
else
textArea1.setText("请输入您朋友的IP地址,否则无法连接!");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -