java 聊天室源代码_java聊天室源码(含客户端、服务端)
【实例简介】使用了线程、实现了多人聊天室。
【实例截图】
【核心代码】
package com.wanggensheng.chatClient;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.LayoutStyle.ComponentPlacement;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JScrollPane;
public class ClientMainWindow extends JFrame {
private static final long serialVersionUID = 1L;
private JScrollPane scrollPane_1;
JTextArea chatWindow;
JTextArea userList;
JTextArea SendMsg;
JButton chatCancelButton;
JButton chatSendButton;
String userName;
String sex;
String userInputName;
/**
* Create the frame.
*/
public ClientMainWindow() {
setAlwaysOnTop(false);
addWindowListener(new WindowAdapter() {
@Override
//关闭窗口动作响应,发送下线信息
public void windowClosing(WindowEvent arg0) {
try {
ChatManager.getCM().send("下线了:" LoginWindow.userInputName ":" LoginWindow.sex);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
setTitle("聊天客户端~~" LoginWindow.userInputName);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 520, 360);
JLabel label = new JLabel("消息窗口");
JLabel label_1 = new JLabel("在线用户列表");
chatSendButton = new JButton("发送");
chatSendButton.addMouseListener(new MouseAdapter() { //发送按钮的事件响应
@Override
public void mouseClicked(MouseEvent arg0) {
try {
ChatManager.getCM().send(LoginWindow.userInputName ":" SendMsg.getText());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SendMsg.setText("");
}
});
chatCancelButton = new JButton("取消");
chatCancelButton.addMouseListener(new MouseAdapter() { //设定取消按钮的事件响应,清空输入框
@Override
public void mouseClicked(MouseEvent e) {
SendMsg.setText("");
}
});
SendMsg = new JTextArea();
SendMsg.setText("你好");
SendMsg.setColumns(10);
JScrollPane scrollPane = new JScrollPane();
/*
* 窗体参数设置,自动生成
*/
scrollPane_1 = new JScrollPane();
GroupLayout groupLayout = new GroupLayout(getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
.addGroup(groupLayout.createSequentialGroup()
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(SendMsg, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 391, Short.MAX_VALUE)
.addComponent(label)
.addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 382, Short.MAX_VALUE))
.addGap(18)
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(scrollPane_1, GroupLayout.PREFERRED_SIZE, 84, GroupLayout.PREFERRED_SIZE)
.addComponent(label_1))
.addGap(10))
.addGroup(Alignment.LEADING, groupLayout.createSequentialGroup()
.addComponent(chatSendButton, GroupLayout.PREFERRED_SIZE, 89, GroupLayout.PREFERRED_SIZE)
.addGap(96)
.addComponent(chatCancelButton, GroupLayout.PREFERRED_SIZE, 83, GroupLayout.PREFERRED_SIZE)))
.addGap(0))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(label)
.addComponent(label_1))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
.addGroup(groupLayout.createSequentialGroup()
.addComponent(scrollPane, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
.addGap(18)
.addComponent(SendMsg, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addComponent(scrollPane_1, GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE))
.addGap(11)
.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
.addComponent(chatCancelButton)
.addComponent(chatSendButton, GroupLayout.PREFERRED_SIZE, 24, GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
userList = new JTextArea();
userList.setEditable(false);
scrollPane_1.setViewportView(userList);
userList.setLineWrap(true);
chatWindow = new JTextArea();
chatWindow.setEditable(false);
scrollPane.setViewportView(chatWindow);
chatWindow.setLineWrap(true);
chatWindow.setText("欢迎进入聊天室......" "\n");
getContentPane().setLayout(groupLayout);
}
/*
* 以下为给文本域追加消息的方法
* append2ChatWindow(String in)
* append2UserList(String in)
*/
public void append2ChatWindow(String in) {
chatWindow.append(in);
chatWindow.setCaretPosition(chatWindow.getText().length());
}
public void append2UserList(String in) {
userList.append(in);
userList.setCaretPosition(userList.getText().length());
}
public void clearUserList() {
userList.setText(null);
}
}
java 聊天室源代码_java聊天室源码(含客户端、服务端)相关推荐
- 草帽船长(梦想海贼王)全套源码:客户端+服务端+资源+文档
草帽船长(梦想海贼王)全套源码:客户端+服务端+资源+文档 ,需要帮助搭建联系QQ 2805477110 下载地址:http://www.51xyyx.com/2705.html 梦想海贼王全套源码, ...
- 急急急~!求一款源码~!背背恋Android约会交友APP完整源码(客户端+服务端)~!
急急急!求一款源码!背背恋Android约会交友APP完整源码(客户端+服务端)~!
- 手机版电台功能php源码,android音乐电台APP源码(客户端+服务端)
android音乐电台APP源码(客户端+服务端),支持MP3 , AAC | AAC+ stream,包含Android Studio 2客户端源码.php+mysql服务端源码,功能强大,代码规范 ...
- Netty 源码解析系列-服务端启动流程解析
netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...
- zookeeper源码分析之五服务端(集群leader)处理请求流程
leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- 视频直播源码中关于服务端直播开播推送实现
在视频直播源码中直播app开播时需向客户推送开播消息通知用户,实现方式如下: 1.申请相应的推送服务三方,如下使用极光推送,获取相应的配置资料,并做好相应的配置 2.推送代码如下: /* 极光推送 * ...
- 【Netty系列_3】Netty源码分析之服务端channel
highlight: androidstudio 前言 学习源码要有十足的耐性!越是封装完美的框架,内部就越复杂,源码很深很长!不过要抓住要点分析,实在不行多看几遍,配合debug,去一窥优秀框架的精 ...
- java聊天程序源代码_java聊天程序源代码
服务端: import java.io.*; import java.net.*; import java.util.*; public class ChatServer { boolean stat ...
- java source folder作用_java项目把源码放到folder里,不是source folder,这个java代码还能被调用吗?...
看到这个问题,真心觉得初学入门就用IDE真心不是一个好方法.IDE屏蔽了太多基础知识,比如Java是需要编译的,运行的是编译后的class文件.编译命令有编译参数,执行命令有执行命令的参数.还有环境变 ...
最新文章
- acm第二节2020.4.2-4.4补
- 关于计算机的发展过程及基础知识正确的是,2011doc-计算机基础知识.doc
- hadoop搭建_hadoop分布式搭建之虚拟机克隆
- 强烈谴责中国红十字会
- 已跳过全部重新生成_2020年最新跳对公技术1+5,1+10,5+50(必读)
- CI框架PHP漫画小说二合一CMS
- WordPress后台保护插件 Sabre 和 电子商务插件E - commerce GetShopped
- 网页截图和svg模版动态生成图片Java实现
- 2.图像作为函数 | 噪音概念、图像相减_7
- uniapp 子组件 props拿不到数据_谈一谈使用 webpack 开发时,Vue 组件之间的数据传递...
- C++中对字符串操作
- Python之京东商品秒杀
- WCF服务系列——定义宿主(IIS服务宿主)
- flutter 内网安装包生成二维码
- hadoop HA 架构
- 图像的阈值分割(Optimum Thresholding)
- 模式识别技术漫谈(1)
- 射频衰减器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- props 更新.使用规则
- win7开启uasp协议_移植win8通用USB驱动到win7上并开启UASP功能!
热门文章
- 短视频APP管理系统源码 直播系统源码
- 计算机网络是几级学科,教育部更新学科目录 “网络空间安全”增设为一级学科...
- 赤峰中考计算机考试软件,2017年内蒙古赤峰中考信息技术操作考试实施细则
- java jni 生成_利用javah技术生成jni接口的详细步骤 | 学步园
- html5手机页面工具,Html5技术变革下的H5页面制作工具和手机app开发工具
- 生产环境下服务器台账
- js 去除空格与换行
- cocoscreator 资源加密
- 基于SSH开发教务排课系统
- 什么是人工智能?(科普)