该系统使用的了socket、swing相关知识,实现了一个简单的群聊和私聊的系统。

1、程序界面功能展示

服务端swing界面展示

客户端服务展示

用户上线与发送消息客户端与服务端

私发消息

相关代码:

package frame;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;import listener.ClientListener;/*** 客户端主窗口*/public class MainFrame extends JFrame {ClientListener clientListener;public JComboBox combobox;//选择发送消息的接受者public JTextArea messageShow;//客户端的信息显示JScrollPane messageScrollPane;//信息显示的滚动条JLabel express,sendToLabel,messageLabel ;public JTextField clientMessage;//客户端消息的发送public JCheckBox checkbox;//悄悄话public JComboBox actionlist;//表情选择public JButton clientMessageButton;//发送消息public JTextField showStatus;//显示用户连接状态//建立菜单栏JMenuBar jMenuBar = new JMenuBar(); //建立菜单组JMenu operateMenu = new JMenu ("操作"); //建立菜单项public JMenuItem loginItem = new JMenuItem ("用户登录");public JMenuItem logoffItem = new JMenuItem ("用户注销");public JMenuItem exitItem=new JMenuItem ("退出");JMenu conMenu=new JMenu ("设置");public JMenuItem userItem=new JMenuItem ("用户设置");public JMenuItem connectItem=new JMenuItem ("连接设置");JMenu helpMenu=new JMenu ("帮助");public JMenuItem helpItem=new JMenuItem ("帮助");//建立工具栏JToolBar toolBar = new JToolBar();//建立工具栏中的按钮组件public JButton loginButton;//用户登录public JButton logoffButton;//用户注销public JButton userButton;//用户信息的设置public JButton connectButton;//连接设置public JButton exitButton;//退出按钮//框架的大小Dimension faceSize = new Dimension(400, 600);JPanel downPanel ;GridBagLayout girdBag;GridBagConstraints girdBagCon;public MainFrame() {init();//初始化程序//添加框架的关闭事件处理this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();//设置框架的大小this.setSize(faceSize);this.setVisible(true);//设置运行时窗口的位置Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setLocation( (int) (screenSize.width - faceSize.getWidth()) / 2,(int) (screenSize.height - faceSize.getHeight()) / 2);this.setResizable(false);this.setTitle(clientListener.userName); //设置标题}/*** 程序初始化函数*/public void init() {Container contentPane = getContentPane();contentPane.setLayout(new BorderLayout());//添加菜单栏operateMenu.add (loginItem);operateMenu.add (logoffItem);operateMenu.add (exitItem);jMenuBar.add (operateMenu); conMenu.add (userItem);conMenu.add (connectItem);jMenuBar.add (conMenu);helpMenu.add (helpItem);jMenuBar.add (helpMenu); setJMenuBar (jMenuBar);//初始化按钮loginButton = new JButton("登录");logoffButton = new JButton("注销");userButton  = new JButton("用户设置" );connectButton  = new JButton("连接设置" );exitButton = new JButton("退出" );//当鼠标放上显示信息loginButton.setToolTipText("连接到指定的服务器");logoffButton.setToolTipText("与服务器断开连接");userButton.setToolTipText("设置用户信息");connectButton.setToolTipText("设置所要连接到的服务器信息");//将按钮添加到工具栏toolBar.add(userButton);toolBar.add(connectButton);toolBar.addSeparator();//添加分隔栏toolBar.add(loginButton);toolBar.add(logoffButton);toolBar.addSeparator();//添加分隔栏toolBar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);checkbox = new JCheckBox("悄悄话");checkbox.setSelected(false);actionlist = new JComboBox();actionlist.addItem("微笑地");actionlist.addItem("高兴地");actionlist.addItem("轻轻地");actionlist.addItem("生气地");actionlist.addItem("小心地");actionlist.addItem("静静地");actionlist.setSelectedIndex(0);//初始时loginButton.setEnabled(true);logoffButton.setEnabled(false);combobox = new JComboBox();combobox.insertItemAt("所有人",0);combobox.setSelectedIndex(0);messageShow = new JTextArea();messageShow.setEditable(false);//添加滚动条messageScrollPane = new JScrollPane(messageShow,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);messageScrollPane.setPreferredSize(new Dimension(400,400));messageScrollPane.revalidate();clientMessage = new JTextField(23);clientMessage.setEnabled(false);clientMessageButton = new JButton();clientMessageButton.setText("发送");sendToLabel = new JLabel("发送至:");express = new JLabel("         表情:   ");messageLabel = new JLabel("发送消息:");downPanel = new JPanel();girdBag = new GridBagLayout();downPanel.setLayout(girdBag);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 0;girdBagCon.gridwidth = 5;girdBagCon.gridheight = 2;girdBagCon.ipadx = 5;girdBagCon.ipady = 5;JLabel none = new JLabel("    ");girdBag.setConstraints(none,girdBagCon);downPanel.add(none);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 2;girdBagCon.insets = new Insets(1,0,0,0);//girdBagCon.ipadx = 5;//girdBagCon.ipady = 5;girdBag.setConstraints(sendToLabel,girdBagCon);downPanel.add(sendToLabel);girdBagCon = new GridBagConstraints();girdBagCon.gridx =1;girdBagCon.gridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_START;girdBag.setConstraints(combobox,girdBagCon);downPanel.add(combobox);girdBagCon = new GridBagConstraints();girdBagCon.gridx =2;girdBagCon.gridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_END;girdBag.setConstraints(express,girdBagCon);downPanel.add(express);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 3;girdBagCon.gridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_START;//girdBagCon.insets = new Insets(1,0,0,0);//girdBagCon.ipadx = 5;//girdBagCon.ipady = 5;girdBag.setConstraints(actionlist,girdBagCon);downPanel.add(actionlist);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 4;girdBagCon.gridy = 2;girdBagCon.insets = new Insets(1,0,0,0);//girdBagCon.ipadx = 5;//girdBagCon.ipady = 5;girdBag.setConstraints(checkbox,girdBagCon);downPanel.add(checkbox);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 3;girdBag.setConstraints(messageLabel,girdBagCon);downPanel.add(messageLabel);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 1;girdBagCon.gridy = 3;girdBagCon.gridwidth = 3;girdBagCon.gridheight = 1;girdBag.setConstraints(clientMessage,girdBagCon);downPanel.add(clientMessage);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 4;girdBagCon.gridy = 3;girdBag.setConstraints(clientMessageButton,girdBagCon);downPanel.add(clientMessageButton);showStatus = new JTextField(35);showStatus.setEditable(false);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 5;girdBagCon.gridwidth = 5;girdBag.setConstraints(showStatus,girdBagCon);downPanel.add(showStatus);contentPane.add(messageScrollPane,BorderLayout.CENTER);contentPane.add(downPanel,BorderLayout.SOUTH);clientListener = new ClientListener(this);//关闭程序时的操作this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){if(clientListener.type == 1){clientListener.DisConnect();}System.exit(0);}});}public int showConfirmDialog(String title, String msg) {int j=JOptionPane.showConfirmDialog(this,title,msg,JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if (j == JOptionPane.YES_OPTION){return 1;}return 0;}public static void main(String[] args) {// TODO Auto-generated method stubMainFrame mainFrame = new MainFrame();}}

Swing 实现聊天系统 私发与群发相关推荐

  1. 按键精灵实现qq群私发脚本Day1实战讲解

    按键精灵qq群私发脚本实战Day1总结: 总体思路及设计方法: ​ 1.首先在手机端主界面通过颜色命令里边的FindMultiColor(多点找色命令),对qq这款app的图标进行抓取(抓取代码非手动 ...

  2. 实验室博士背着导师私发了两篇SCI,导师知道了会怎样?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源 | 综合整理自知乎,中洪博元医学实验帮 转自 | 磐创AI(x ...

  3. 邮件轻松发--邮件群发小工具

    关于这个工具的创作:相信大家都有找工作的经历,在简历投递的时候是否有这样的烦恼?点对点的发送邮件时,不停的复制粘贴自己的简历发送,在这一期间不仅浪费了大家相当多的一部分时间,而且发送简历的效率也不是很 ...

  4. 回复群邮件导致邮件服务器,电子邮件逐个发-邮件群发软件-使用手册

    电子邮件逐个发是基于SMTP服务,一对一传递Email的邮件群发软件.使用Outlook或者Web网页方式同时给多人发送邮件,收件人地址栏会将所有收件人的Email地址都显示出来,发出的邮件既容易进垃 ...

  5. telegram协议电报群组采集,群用户提取,私发消息,群拉人,关键词监控回复等引流自动化

    稳定更新 tg: @AllenHi

  6. 【2023Unity游戏开发教程】零基础带你从小白到超神01——Unity简介下载和安装配置(视频资源订阅扣1私发)

    文章目录 简介 优缺点 下载 安装 配置 简介 Unity引擎由Unity科技研发,最早于2004年发布.虽然在3A游戏应用上Unity暂时处于下风,但是在知名游戏上的数量也不遑多让,例如当前火爆的& ...

  7. 【python】day08-09 pygame之泡泡堂游戏【综合性最强】(因为没有详细分析过代码,所以不会直接,也不会分享私发)

    这个项目教之前六个是比较大的,今天开始的主要任务是跟着老师学Flask框架,泡泡堂的任务只每天做一点.因为我想按顺序排知识点,所以先发篇文章占着这个知识点的位置. 1.项目介绍 1.1编写目标 1.搭 ...

  8. vuewebsocket做消息提醒_企业微信群怎么定时群发消息?如何突破群发次数限制?...

    文丨语鹦企服私域管家原创,未经授权不得转载 我们在使用企业微信做营销时,经常需要给客户群发通知或活动福利.企业微信提供多客户群群发工具,只需一键群发,即可通知到所有群.但遇上节假日或者忙碌的时候,定时 ...

  9. PHP+swoole 聊天窒 五子棋斗地主

    PHP 聊天窒源代码 五子棋源代码 斗地主源代码 基于swoole的开发的聊天,五子棋,斗地主功能 各功能系统界面 聊天功能界面 五子棋界面 斗地主界面 聊天系统包括的功能: 实时发送消息,消息的内容 ...

最新文章

  1. 安装sqoop1.4.6-cdh5.5.2
  2. 【开发软件】推荐一款MAC OS X 下php集成开发环境mamp
  3. shapefile导入oracle,shp2sdo.exe用法:shpfile导入OracleSpatial
  4. 《对Java的分析总结》-Java中的垃圾回收机制中的标记-清除算法 (五)
  5. ElasticSearch破解x-pack 6.0+和更新许可证(License)
  6. Ext.Net学习笔记20:Ext.Net FormPanel 复杂用法
  7. mysql5.6 主从_mysql5.6 主从配置
  8. Mac 用快捷键选取文字,省时省力提高工作效率
  9. Resharper快捷键及用法
  10. 产品经理常用专业名词
  11. win2008 php,Windows Server 2008(R2) 一键安装PHP环境(PHP5.3+FastCGI模式)
  12. 解决Specifying a namespace in include()withou providing an app_name
  13. TP-LINK_841N_V8路由器硬改升级OpenWRT记
  14. 卡特彼勒牵手CBA联赛助力中国篮球发展
  15. 无线路由器桥接、中继、电力猫组网方法分享
  16. 汽车故障诊断仪的原理与作用
  17. 动态更新 fqdn ptr linux,DNS简单概念 一
  18. 完美解决cannot import name ‘_validate_lengths‘ from ‘numpy.lib.arraypad‘错误
  19. 开源工业缺陷数据集汇总,持续更新中(已更新28个)
  20. Pentest Wiki Part5 提权

热门文章

  1. Go 分布式学习利器(6)-- Map
  2. HTML学习笔记之基本介绍
  3. vue路由对象($route)参数简介
  4. Nginx基本配置、性能优化指南
  5. AnsiToUtf8 和 Utf8ToAnsi
  6. http://www.shanghaihaocong.com-WORDPRESS开发的企业主题站
  7. AIX VNC setup
  8. SQL SERVER 2000写存储过程出现列名无效的解决方法
  9. Apache学习路线
  10. Silverlight中文件的生成操作与其对应的获取方法