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

 更新时间:2022年06月10日 16:30:49   作者:CaiBenwei  
这篇文章主要为大家详细介绍了Java实现带图形界面的聊天程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了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();
    }
}

运行截图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot基于Active MQ实现整合JMS

    Spring Boot基于Active MQ实现整合JMS

    这篇文章主要介绍了Spring Boot基于Active MQ实现整合JMS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java日期相关API的基本操作总结

    Java日期相关API的基本操作总结

    大概总结一下日期相关API操作原因是对于日期的操作我们开发中还是很常见的,包括在数据库中保存日期,以及之前String类中对字符串的一些处理开发中都很常见,希望对大家有所帮助
    2022-11-11
  • 一篇文章带你入门Java接口

    一篇文章带你入门Java接口

    这篇文章主要介绍了JAVA中接口的定义和接口的实现,文中讲解非常细致,配合代码更好的帮大家学习参考,感兴趣的朋友可以了解下
    2021-08-08
  • SpringBoot多环境配置及配置文件分类实例详解

    SpringBoot多环境配置及配置文件分类实例详解

    这篇文章主要介绍了SpringBoot多环境配置及配置文件分类,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Struts2拦截器登录验证实例

    Struts2拦截器登录验证实例

    本篇文章主要介绍了Struts2拦截器登录验证实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Spring Boot实现数据访问计数器方案详解

    Spring Boot实现数据访问计数器方案详解

    在Spring Boot项目中,有时需要数据访问计数器,怎么实现数据访问计数器呢?下面小编给大家带来了Spring Boot数据访问计数器的实现方案,需要的朋友参考下吧
    2021-08-08
  • 高并发系统的限流详解及实现

    高并发系统的限流详解及实现

    这篇文章主要介绍了高并发系统的限流详解及实现,内容详细,小编觉得很不错,这里分享给大家,供需要的朋友参考。随小编一起看看吧。
    2017-11-11
  • Java实现屏幕截图及剪裁

    Java实现屏幕截图及剪裁

    这是一篇入门级文章,高手请略过。在这篇文章中我们将学习如何用 Java 对图像进行剪裁并将剪裁出来的部分单独保存到文件中。
    2014-09-09
  • SpringMVC的@InitBinder参数转换代码实例

    SpringMVC的@InitBinder参数转换代码实例

    这篇文章主要介绍了SpringMVC的@InitBinder参数转换代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Java中clone方法使用笔记

    Java中clone方法使用笔记

    clone顾名思义是复制,在Java语言中,clone方法被对象调用,所以会复制对象,下面这篇文章主要给大家介绍了关于Java中clone方法使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02

最新评论