简易聊天窗口

  沟通交流是人的基本能力,更是获取消息的最佳途径。为了具备基本能力,走最佳途径,一个实用的聊天窗口就成了一种标配了。

  那么,问题来了,如何创建一个聊天窗口呢?

转载于:https://www.cnblogs.com/code-Officer/p/5628443.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的双人聊天窗口的实现,使用Java Swing和Socket编写: ```java import java.awt.BorderLayout; 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.ServerSocket; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; public class ChatServer extends JFrame { private static final long serialVersionUID = 1L; private JTextArea chatArea; private JTextField inputField; private JButton sendButton; private ServerSocket serverSocket; private Socket clientSocket; private PrintWriter out; private BufferedReader in; public ChatServer() { super("Chat Server"); initializeGUI(); // 等待客户端连接 try { serverSocket = new ServerSocket(8888); clientSocket = serverSocket.accept(); // 初始化输入输出流 out = new PrintWriter(clientSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); // 创建一个线程用于接收客户端消息 Thread thread = new Thread(new IncomingReader()); thread.start(); } catch (IOException e) { e.printStackTrace(); } } private void initializeGUI() { chatArea = new JTextArea(); chatArea.setEditable(false); inputField = new JTextField(); inputField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { sendMessage(inputField.getText()); } }); sendButton = new JButton("Send"); sendButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { sendMessage(inputField.getText()); } }); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(inputField, BorderLayout.CENTER); panel.add(sendButton, BorderLayout.EAST); getContentPane().add(chatArea, BorderLayout.CENTER); getContentPane().add(panel, BorderLayout.SOUTH); setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } private void sendMessage(String message) { out.println(message); inputField.setText(""); chatArea.append("Server: " + message + "\n"); } public static void main(String[] args) { new ChatServer(); } // 用于接收客户端消息的线程 private class IncomingReader implements Runnable { @Override public void run() { try { String message; while ((message = in.readLine()) != null) { chatArea.append("Client: " + message + "\n"); } } catch (IOException e) { e.printStackTrace(); } } } } ``` 以上代码实现了一个简单的聊天服务器,可以启动一个ServerSocket并监听客户端连接。它提供了一个聊天窗口,其中包括一个文本框和一个发送按钮。当用户在文本框中输入消息并按下发送按钮或回车键时,消息将被发送到客户端并显示在聊天窗口中。 ```java import java.awt.BorderLayout; 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 javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; public class ChatClient extends JFrame { private static final long serialVersionUID = 1L; private JTextArea chatArea; private JTextField inputField; private JButton sendButton; private Socket socket; private PrintWriter out; private BufferedReader in; public ChatClient() { super("Chat Client"); initializeGUI(); // 连接服务器 try { socket = new Socket("localhost", 8888); // 初始化输入输出流 out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 创建一个线程用于接收服务器消息 Thread thread = new Thread(new IncomingReader()); thread.start(); } catch (IOException e) { e.printStackTrace(); } } private void initializeGUI() { chatArea = new JTextArea(); chatArea.setEditable(false); inputField = new JTextField(); inputField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { sendMessage(inputField.getText()); } }); sendButton = new JButton("Send"); sendButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { sendMessage(inputField.getText()); } }); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(inputField, BorderLayout.CENTER); panel.add(sendButton, BorderLayout.EAST); getContentPane().add(chatArea, BorderLayout.CENTER); getContentPane().add(panel, BorderLayout.SOUTH); setSize(400, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } private void sendMessage(String message) { out.println(message); inputField.setText(""); chatArea.append("Client: " + message + "\n"); } public static void main(String[] args) { new ChatClient(); } // 用于接收服务器消息的线程 private class IncomingReader implements Runnable { @Override public void run() { try { String message; while ((message = in.readLine()) != null) { chatArea.append("Server: " + message + "\n"); } } catch (IOException e) { e.printStackTrace(); } } } } ``` 以上代码实现了一个简单的聊天客户端,可以连接到聊天服务器并向其发送消息。它也提供了一个聊天窗口,其中包括一个文本框和一个发送按钮。当用户在文本框中输入消息并按下发送按钮或回车键时,消息将被发送到服务器并显示在聊天窗口中。同时,它也创建了一个线程用于接收服务器的消息,并将其显示在聊天窗口中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值