📄 chat.java
字号:
/**
* Chat.java
*
* Created on September 6,2008, 15:13
*
* 聊天类,用于实现聊天的功能,p2p技术实现
*/
package draw;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
/**
* @author 王宽
*
*/
public class Chat extends JFrame {
JTextArea dataList=new JTextArea();
JTextField Tfip = new JTextField(18);
JTextField Tfdata = new JTextField(19);
JLabel Lip=new JLabel("输入对方的IP地址:");
JLabel Ldata=new JLabel("输入聊天的内容:");
DatagramSocket socket=null;
/**
* 构造一个聊天的交互界面
*/
public void go() {
try
{
socket=new DatagramSocket(5000);
}
catch(Exception e)
{
e.printStackTrace();
}
Tfip.setSize(150,15);
Tfdata.setSize(150,15);
//Tfip.setFocusable(true);
Tfip.setForeground(Color.blue);
Tfdata.setForeground(Color.red);
dataList.setForeground(Color.black);
this.getContentPane().add(new JScrollPane(dataList),"Center");
JPanel p = new JPanel();
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
p.setLayout(new BorderLayout());
p1.setLayout(new BorderLayout());
p2.setLayout(new BorderLayout());
p1.add(Lip,"West");
p1.add(Ldata,"East");
p2.add(Tfip,"West");
p2.add(Tfdata,"East");
p.add(p1,"North");
p.add(p2,"South");
this.getContentPane().add(p,"South");
new Thread(new Runnable()
{
public void run()
{
byte[] buf=new byte[1024];
DatagramPacket packet=new DatagramPacket(buf,1024);
while(true)
{
try
{
socket.receive(packet);
dataList.append(new String(buf,0,packet.getLength())+" FROM "+packet.getAddress().getHostAddress()+":"+packet.getPort());
dataList.append("\n");
}
catch(Exception e)
{
if(!socket.isClosed())
{
e.printStackTrace();
}
}
}
}
}
).start();
Tfdata.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
byte[] buf=new byte[1024];
buf=Tfdata.getText().getBytes();
DatagramPacket packet=new DatagramPacket(buf,buf.length,
InetAddress.getByName(Tfip.getText()),5000);
socket.send(packet);
dataList.append(new String(buf,0,packet.getLength())+" TO "+packet.getAddress().getHostAddress()+":"+packet.getPort());
dataList.append("\n");
}
catch(Exception x)
{
x.printStackTrace();
}
Tfdata.setText("");
}
}
);
MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu();
MenuItem menuFileExit = new MenuItem();
menuFile.setLabel("文件");
menuFileExit.setLabel("退出");
// Add action listener.for the menu button
menuFileExit.addActionListener
(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
Chat.this.windowClosed();
}
}
);
menuFile.add(menuFileExit);
menuBar.add(menuFile);
setTitle("我的聊天程序");
setMenuBar(menuBar);
setSize(new Dimension(310, 500));
this.setResizable(false);
// Add window listener.
this.addWindowListener
(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Chat.this.windowClosed();
}
}
);
}
/**
* 关闭,结束聊天
*/
protected void windowClosed() {
// TODO: Check if it is safe to close the application
// Exit application.
socket.close();
System.exit(0);
}
/**
* 构造函数,使聊天窗口可见
*/
public Chat() {
this.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -