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


Posted in Java/Android onJune 10, 2022

本文实例为大家分享了vue + element ui实现锚点定位的具体代码,供大家参考,具体内容如下

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实现带图形界面的聊天程序

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


Tags in this post...

Java/Android 相关文章推荐
Spring Bean的实例化之属性注入源码剖析过程
Jun 13 Java/Android
解决Maven项目中 Invalid bound statement 无效的绑定问题
Jun 15 Java/Android
详解java如何集成swagger组件
Jun 21 Java/Android
Java实现二维数组和稀疏数组之间的转换
Jun 27 Java/Android
Java elasticsearch安装以及部署教程
Jun 28 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
详细了解MVC+proxy
Jul 09 Java/Android
java设计模式--原型模式详解
Jul 21 Java/Android
关于EntityWrapper的in用法
Mar 22 Java/Android
Java 使用类型为Object的变量指向任意类型的对象
Apr 13 Java/Android
Java 定时任务技术趋势简介
May 04 Java/Android
Java 中的 Lambda List 转 Map 的多种方法详解
Jul 07 Java/Android
Android中View.post和Handler.post的关系
Android Canvas绘制文字横纵向对齐
Jun 05 #Java/Android
Android 中的类文件和类加载器详情
Android中的Launch Mode详情
Spring中的@Transactional的工作原理
Jun 05 #Java/Android
Qt数据库应用之实现图片转pdf
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
Jun 01 #Java/Android
You might like
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
JavaScript基于用户照片姓名生成海报
2020/05/29 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
python使用pip安装SciPy、SymPy、matplotlib教程
2019/11/20 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
杭州时比特电子有限公司SQL
2013/08/22 面试题
上班睡觉检讨书
2014/01/09 职场文书
培训专员岗位职责
2014/02/26 职场文书
监督检查工作方案
2014/05/28 职场文书
投资意向书
2014/07/30 职场文书
小学教育见习报告
2014/10/31 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
2019西餐厅创业计划书范文!
2019/07/12 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python
Python 阶乘详解
2021/10/05 Python