Java+Swing聊天室

  • 一、系统介绍
  • 二、系统展示
    • 1.发送消息
    • 2.清屏
  • 三、系统实现
  • 四、其他
    • 1.其它系统
    • 2.获取源码

一、系统介绍

本系统实现了简单的聊天室功能:发送消息、清屏、退出系统。

二、系统展示

1.发送消息

2.清屏

三、系统实现

Client.java

package cn.talk;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
import java.nio.charset.*;
import java.text.*;public class Client
{//建立客户端Socketstatic Socket s = null;//消息接收者uidstatic StringBuilder uidReceiver = null;public static void main(String[] args){//创建客户端窗口对象ClientFrame cframe = new ClientFrame();//窗口关闭键无效,必须通过退出键退出客户端以便善后cframe.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);//获取本机屏幕横向分辨率int w = Toolkit.getDefaultToolkit().getScreenSize().width;//获取本机屏幕纵向分辨率int h = Toolkit.getDefaultToolkit().getScreenSize().height;//将窗口置中cframe.setLocation((w - cframe.WIDTH)/2, (h - cframe.HEIGHT)/2);//设置客户端窗口为可见cframe.setVisible(true);try{//连接服务器s = new Socket(InetAddress.getLocalHost(), 10086);//获取输入流InputStream in = s.getInputStream();//获取输出流OutputStream out = s.getOutputStream();//获取服务端欢迎信息byte[] buf = new byte[1024];int len = in.read(buf);//将欢迎信息打印在聊天消息框内cframe.jtaChat.append(new String(buf, 0, len));cframe.jtaChat.append("\n");//持续等待接收服务器信息直至退出while(true){in = s.getInputStream();len = in.read(buf);System.out.println(len);//处理服务器传来的消息String msg = new String(buf, 0, len);//消息类型:更新在线名单或者聊天String type = msg.substring(0, msg.indexOf("/"));//消息本体:更新后的名单或者聊天内容String content = msg.substring(msg.indexOf("/") + 1);//根据消息类型分别处理//更新在线名单if(type.equals("OnlineListUpdate")){//提取在线列表的数据模型DefaultTableModel tbm = (DefaultTableModel) cframe.jtbOnline.getModel();//清除在线名单列表tbm.setRowCount(0);//更新在线名单String[] onlinelist = content.split(",");//逐一添加当前在线者for(String member : onlinelist){String[] tmp = new String[3];//如果是自己则不在名单中显示if(member.equals(InetAddress.getLocalHost().getHostAddress() + ":" + s.getLocalPort()))continue;tmp[0] = "";tmp[1] = member.substring(0, member.indexOf(":"));tmp[2] = member.substring(member.indexOf(":") + 1);//添加当前在线者之一tbm.addRow(tmp);}//提取在线列表的渲染模型DefaultTableCellRenderer tbr = new DefaultTableCellRenderer();//表格数据居中显示tbr.setHorizontalAlignment(JLabel.CENTER);cframe.jtbOnline.setDefaultRenderer(Object.class, tbr);}//聊天else if(type.equals("Chat")){String sender = content.substring(0, content.indexOf("/"));String word = content.substring(content.indexOf("/") + 1);//在聊天窗打印聊天信息cframe.jtaChat.append(cframe.sdf.format(new Date()) + "\n来自 " + sender + ":\n" + word + "\n\n");//显示最新消息cframe.jtaChat.setCaretPosition(cframe.jtaChat.getDocument().getLength());}}}catch(Exception e){cframe.jtaChat.append("服务器挂了.....\n");e.printStackTrace();}}
}//客户端窗口
class ClientFrame extends JFrame
{//时间显示格式SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//窗口宽度final int WIDTH = 700;//窗口高度final int HEIGHT = 700;//创建发送按钮JButton btnSend = new JButton("发送");//创建清除按钮JButton btnClear = new JButton("清屏");//创建退出按钮JButton btnExit = new JButton("退出");//创建消息接收者标签JLabel lblReceiver = new JLabel("对谁说?");//创建文本输入框, 参数分别为行数和列数JTextArea jtaSay = new JTextArea();//创建聊天消息框JTextArea jtaChat = new JTextArea();//当前在线列表的列标题String[] colTitles = {"网名", "IP", "端口"};//当前在线列表的数据String[][] rowData = null;//创建当前在线列表JTable jtbOnline = new JTable(new DefaultTableModel(rowData, colTitles){//表格不可编辑,只可显示@Overridepublic boolean isCellEditable(int row, int column){return false;}});//创建聊天消息框的滚动窗JScrollPane jspChat = new JScrollPane(jtaChat);//创建当前在线列表的滚动窗JScrollPane jspOnline = new JScrollPane(jtbOnline);//设置默认窗口属性,连接窗口组件public ClientFrame(){//标题setTitle("聊天室");//大小setSize(WIDTH, HEIGHT);//不可缩放setResizable(false);//设置布局:不适用默认布局,完全自定义setLayout(null);//设置按钮大小和位置btnSend.setBounds(20, 600, 100, 60);btnClear.setBounds(140, 600, 100, 60);btnExit.setBounds(260, 600, 100, 60);//设置标签大小和位置lblReceiver.setBounds(20, 420, 300, 30);//设置按钮文本的字体btnSend.setFont(new Font("宋体", Font.BOLD, 18));btnClear.setFont(new Font("宋体", Font.BOLD, 18));btnExit.setFont(new Font("宋体", Font.BOLD, 18));//添加按钮this.add(btnSend);this.add(btnClear);this.add(btnExit);//添加标签this.add(lblReceiver);//设置文本输入框大小和位置jtaSay.setBounds(20, 460, 360, 120);//设置文本输入框字体jtaSay.setFont(new Font("楷体", Font.BOLD, 16));//添加文本输入框this.add(jtaSay);//聊天消息框自动换行jtaChat.setLineWrap(true);//聊天框不可编辑,只用来显示jtaChat.setEditable(false);//设置聊天框字体jtaChat.setFont(new Font("楷体", Font.BOLD, 16));//设置滚动窗的水平滚动条属性:不出现jspChat.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);//设置滚动窗的垂直滚动条属性:需要时自动出现jspChat.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);//设置滚动窗大小和位置jspChat.setBounds(20, 20, 360, 400);//添加聊天窗口的滚动窗this.add(jspChat);//设置滚动窗的水平滚动条属性:不出现jspOnline.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);//设置滚动窗的垂直滚动条属性:需要时自动出现jspOnline.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);//设置当前在线列表滚动窗大小和位置jspOnline.setBounds(420, 20, 250, 400);//添加当前在线列表this.add(jspOnline);//添加发送按钮的响应事件btnSend.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent event){//显示最新消息jtaChat.setCaretPosition(jtaChat.getDocument().getLength());try{//有收信人才发送if(Client1.uidReceiver.toString().equals("") == false){//在聊天窗打印发送动作信息jtaChat.append(sdf.format(new Date()) + "\n发往 " + Client1.uidReceiver.toString() + ":\n");//显示发送消息jtaChat.append(jtaSay.getText() + "\n\n");//向服务器发送聊天信息OutputStream out = Client1.s.getOutputStream();out.write(("Chat/" + Client1.uidReceiver.toString() + "/" + jtaSay.getText()).getBytes());} }catch(Exception e){}finally{//文本输入框清除jtaSay.setText("");}}});//添加清屏按钮的响应事件btnClear.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent event){//聊天框清屏jtaChat.setText("");}});//添加退出按钮的响应事件btnExit.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent event){try{//向服务器发送退出信息OutputStream out = Client1.s.getOutputStream();out.write("Exit/".getBytes());//退出System.exit(0);}catch(Exception e){}}});//添加在线列表项被鼠标选中的相应事件jtbOnline.addMouseListener(new MouseListener(){@Overridepublic void mouseClicked(MouseEvent event){//取得在线列表的数据模型DefaultTableModel tbm = (DefaultTableModel) jtbOnline.getModel();//提取鼠标选中的行作为消息目标,最少一个人,最多全体在线者接收消息int[] selectedIndex = jtbOnline.getSelectedRows();//将所有消息目标的uid拼接成一个字符串, 以逗号分隔Client1.uidReceiver = new StringBuilder("");for(int i = 0; i < selectedIndex.length; i++){Client1.uidReceiver.append((String) tbm.getValueAt(selectedIndex[i], 1));Client1.uidReceiver.append(":");Client1.uidReceiver.append((String) tbm.getValueAt(selectedIndex[i], 2));if(i != selectedIndex.length - 1)Client1.uidReceiver.append(",");}lblReceiver.setText("发给:" + Client1.uidReceiver.toString());}@Overridepublic void mousePressed(MouseEvent event){};@Overridepublic void mouseReleased(MouseEvent event){};@Overridepublic void mouseEntered(MouseEvent event){};@Overridepublic void mouseExited(MouseEvent event){};});}
}

四、其他

1.其它系统

Java+Swing实现学生选课管理系统
Java+Swing实现学校教务管理系统
Java+Swing+sqlserver学生成绩管理系统
Java+Swing用户信息管理系统
Java+Swing实现的五子棋游戏
基于JavaSwing 银行管理系统
Java+Swing+mysql仿QQ聊天工具
Java+Swing 聊天室
Java+Swing+dat文件存储实现学生选课管理系统
Java+Swing可视化图像处理软件
Java+Swing学生信息管理系统
Java+Swing图书管理系统
Java+Swing图书管理系统2.0
基于java+swing+mysql图书管理系统3.0
大作业-基于java+swing+mysql北方传统民居信息管理系统

2.获取源码

点击下载
Java+Swing聊天室

Java+Swing聊天室相关推荐

  1. JAVA版聊天室小软件

    这是一篇关于JAVA的聊天室室小软件,用的swing的技术同时也用到了socket.今天发布出来,希望能帮到大家. 文章目录 开发环境 项目结构 下载地址: 一.运行画面展示 二.代码部分 1.客户端 ...

  2. java 嘻嘻哈哈聊天室

    服务端 package 夏日聊天室; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.I ...

  3. 2020暑假集训项目——Java简易聊天室

    经过一周的学习与搬砖,我成功的完成了暑假集训的第一个项目--Java简易聊天室,这里对整个项目做一个总结.(文末附下载地址) 本项目支持的功能: 1.可同时开启多个客户端进行多人聊天: 2.可与在线的 ...

  4. Java网络聊天室---个人博客

    Java网络聊天室 ---个人博客 一.项目简介 功能描述: 使用图形用户界面和socket通信,能实现一个聊天室中多人聊天,可以两人私聊,可以发送文件. 实现类似QQ用户注册.登录.聊天等功能. 参 ...

  5. 基于java的聊天室系统设计与实现(项目报告+开题报告+答辩PPT+源代码+部署视频)

    项目报告 Java网络聊天室系统的设计与实现 计算机从出现到现在有了飞速的发展,现阶段的计算机已经不单单是用于进行运算的独立的个体了,跟随计算机一同发展的还有互联网技术,经过了长久的发展,互联网技术有 ...

  6. java webscoket聊天室

    java webscoket聊天室 http://www.whohelpme.com/chats/index.html 欢迎使用 核心代码 package com.summer.whm.web.con ...

  7. java 语音聊天室

    javaSound的开源实现:http://www.tritonus.org/ 最近准备做个语音聊天室,困难很多.以后会在这里不断加入相关资源和开发进展. 语音api原理 一个游戏软件中使用的 语音 ...

  8. 毕业设计 - 基于Java的聊天室系统设计与实现【源码+论文】

    文章目录 前言 一.项目设计 1. 模块设计 服务器模块设计 客户端模块设计 2. 实现效果 二.部分源码 项目源码 前言 今天学长向大家分享一个 java 设计项目: 基于Java聊天室系统的设计与 ...

  9. java实现聊天室功能(包含全部代码,有界面)

    服务器端代码: import java.net.*; import java.io.*; import java.util.*; import java.util.concurrent.*; impo ...

最新文章

  1. python 示列:抓取网页所有a连接
  2. 服务器证书CA的相关操作
  3. 使用jQuery获取GridView的数据行的数量
  4. linux spoon.sh闪退,kettle使用spoon.sh打开报错问题解决
  5. iOS开发--Runtime知识点整理
  6. 尚学堂--面向对象2
  7. ubuntu 18.04 + SVO2.0
  8. php datedif,datedif是什么函数
  9. 在职上班族怎么报考成人大专?成人大专有哪些条件?
  10. matlab mtf,MtF - MATLAB Central
  11. SCI 论文常用词汇 持续更新中。。。
  12. java程序员必读书籍
  13. 第十二章 SysTick—系统定时器
  14. Python模拟轮盘抽奖游戏 轮盘分为三部分: 一等奖, 二等奖和三等奖;轮盘转的时候是随机的, 如果范围在[0,0.08)之间,代表一等奖,如果范围在[0.08,0.3)之间,代表2等奖, 如果范围
  15. 高一数学知识点:逻辑联结词、全称量词与存在量词
  16. 希望越大失望越大?iPhone 4S详情解析
  17. 程序员求职高峰期,这12条工作小技巧必看
  18. 由于找不到msvcp110.dll,无法继续执行代码。重新安装可以能会解决此问题
  19. 奇兔recovery卡刷教程_奇兔开发者学院课程教学第四讲: Recovery备份提取制作ROM
  20. 大数据周周看:京东将大数据AI科学家裴健招致麾下,英特尔芯片漏洞致股价大跌

热门文章

  1. web缓存—Squid代理服务
  2. bat 切换网络适配器_Windows批处理自动切换IP地址设置无线网络和以太网的IP地址...
  3. gentoo USE 项目解释
  4. Java——Shape类
  5. Echarts正负条形图将x轴都设置成正数
  6. matlab 正负数,matlab判断函数值正负程序
  7. 距离度量 —— 切比雪夫距离(Chebyshev Distance)
  8. 喵呜效应再现!跨界新品齐聚天猫618,网友:一秒无
  9. 程序逸的Java项目之旅-图书管理系统之项目搭建
  10. 下载微信支付平台证书及首次下载报错处理