热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java+Swing聊天室

JavaSwing聊天室一、系统介绍二、系统展示1.发送消息2.清屏三、系统实现四、其他1.其它系统2.获取源码一、系统介绍本系统实现了简单的聊天室功能:发送消息、


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 }

四、其他


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聊天室


推荐阅读
author-avatar
Mr-o蛋挞
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有