Java实现带图形界面的聊天程序

作者:CaiBenwei 时间:2022-04-25 22:41:55 

本文实例为大家分享了Java实现带图形界面聊天程序的具体代码,供大家参考,具体内容如下

ServerDemo01.java

import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.*;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo01 implements ActionListener {
    private ServerSocket serverSocket;
    private Socket socket;
    private DataInputStream dataInputStream;
    private DataOutputStream dataOutputStream;
    private JFrame jFrame;
    private JScrollPane jScrollPane;
    private JTextArea jTextArea;
    private JPanel jPanel;
    private JTextField jTextField;
    private JButton jButton;

    public ServerDemo01() {
        //创建组件
        jFrame = new JFrame("服务器");
        jTextArea = new JTextArea();
        jScrollPane = new JScrollPane(jTextArea);
        jPanel = new JPanel();
        jTextField = new JTextField(20);
        jButton = new JButton("发送");
        //添加组件到容器
        jFrame.add(jScrollPane, BorderLayout.CENTER);
        jFrame.add(jPanel, BorderLayout.SOUTH);
        jPanel.add(jTextField);
        jPanel.add(jButton);
        //设置窗体
        jFrame.setBounds(200,200,400,300);
        jFrame.setVisible(true);
        jFrame.setResizable(false);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //添加监听
        jButton.addActionListener(this);
        //TCP网络通信
        try {
            serverSocket = new ServerSocket(9999);
            socket = serverSocket.accept();//等待连接
            dataInputStream = new DataInputStream(socket.getInputStream());
            dataOutputStream = new DataOutputStream(socket.getOutputStream());

            while(true) {//接收来自客户端的消息
                String strClient = dataInputStream.readUTF();
                jTextArea.append("客户端:" + strClient + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        //监听发送按钮
        if(e.getSource()==jButton){
            String str = jTextField.getText();//获取文本框中的内容
            if(str.length()==0)//发送内容为空
                JOptionPane.showMessageDialog(jTextField,"发送内容不能为空");
            else{
                //将数据发送到客户端
                try {
                    dataOutputStream.writeUTF(str);
                    jTextArea.append("服务器:"+str + "\n");
                    jTextField.setText("");
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                }
            }

        }
    }

    public static void main(String[] args) {
        new ServerDemo01();
    }
}

ClientDemo01.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

public class ClientDemo01 implements ActionListener {
    private Socket socket;
    private DataInputStream dataInputStream;
    private DataOutputStream dataOutputStream;
    private JFrame jFrame;
    private JScrollPane jScrollPane;
    private JTextArea jTextArea;
    private JPanel jPanel;
    private JTextField jTextField;
    private JButton jButton;

    public ClientDemo01() {
        //创建组件
        jFrame = new JFrame("客户端");
        jTextArea = new JTextArea();
        jScrollPane = new JScrollPane(jTextArea);
        jPanel = new JPanel();
        jTextField = new JTextField(20);
        jButton = new JButton("发送");
        //添加组件
        jFrame.add(jScrollPane, BorderLayout.CENTER);
        jFrame.add(jPanel,BorderLayout.SOUTH);
        jPanel.add(jTextField);
        jPanel.add(jButton);
        //设置窗体
        jFrame.setBounds(610,200,400,300);
        jFrame.setVisible(true);
        jFrame.setResizable(false);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //添加监听
        jButton.addActionListener(this);
        //TCP网络通信
        try {
            socket = new Socket("127.0.0.1",9999);
            dataInputStream = new DataInputStream(socket.getInputStream());
            dataOutputStream = new DataOutputStream(socket.getOutputStream());

            //接收服务器的消息
            while (true) {
                String strServer = dataInputStream.readUTF();
                jTextArea.append("服务器:"+strServer + "\n");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==jButton){
            String str = jTextField.getText();
            if(str.length()==0)
                JOptionPane.showMessageDialog(jTextField,"发送内容不能为空");
            else{
                try {
                    dataOutputStream.writeUTF(str);
                    jTextArea.append("客户端:"+str + "\n");
                    jTextField.setText("");
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        new ClientDemo01();
    }
}

运行截图:

Java实现带图形界面的聊天程序

Java实现带图形界面的聊天程序

来源:https://blog.csdn.net/qq_45708165/article/details/118070591

标签:Java,聊天
0
投稿

猜你喜欢

  • Java二维数组查找功能代码实现

    2023-01-04 19:47:17
  • Spring Cloud Ribbon配置详解

    2023-11-25 01:32:50
  • Mybatis的几种传参方式详解

    2021-12-08 15:35:53
  • java异常处理详细介绍及实例

    2023-11-28 05:07:02
  • 浅析Java中Apache BeanUtils和Spring BeanUtils的用法

    2021-07-10 21:29:15
  • java实现仿射密码加密解密

    2022-10-09 04:04:49
  • C#中常使用进度条的代码

    2021-06-27 23:31:18
  • java操作Apache druid的实例代码

    2023-12-24 02:10:58
  • JavaWeb中获取表单数据及乱码问题的解决方法

    2021-11-21 11:03:53
  • Java遍历Properties所有元素的方法实例

    2022-09-08 14:58:24
  • SpringMVC数据响应详细介绍

    2023-09-24 04:12:41
  • java二叉树面试题详解

    2021-06-13 08:40:23
  • Java使用Apache.POI中HSSFWorkbook导出到Excel的实现方法

    2022-05-24 17:14:13
  • mybatis新手快速入门以及一些错误汇总

    2023-01-25 13:01:14
  • C#中动态数组用法实例

    2021-11-30 16:42:23
  • Java基础学习之ArrayList类概述与常用方法

    2023-03-13 02:15:24
  • Java实现输出数字三角形实例代码

    2023-08-25 02:09:51
  • 关于Java集合框架面试题(含答案)上

    2021-06-02 13:29:44
  • Spring注解之@Lazy注解使用解析

    2023-08-28 23:12:23
  • Java微信授权登陆的实现示例

    2021-12-11 22:03:04
  • asp之家 软件编程 m.aspxhome.com