【实例简介】使用了线程、实现了多人聊天室。

【实例截图】

【核心代码】

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聊天室源码(含客户端、服务端)相关推荐

  1. 草帽船长(梦想海贼王)全套源码:客户端+服务端+资源+文档

    草帽船长(梦想海贼王)全套源码:客户端+服务端+资源+文档 ,需要帮助搭建联系QQ 2805477110 下载地址:http://www.51xyyx.com/2705.html 梦想海贼王全套源码, ...

  2. 急急急~!求一款源码~!背背恋Android约会交友APP完整源码(客户端+服务端)~!

    急急急!求一款源码!背背恋Android约会交友APP完整源码(客户端+服务端)~!

  3. 手机版电台功能php源码,android音乐电台APP源码(客户端+服务端)

    android音乐电台APP源码(客户端+服务端),支持MP3 , AAC | AAC+ stream,包含Android Studio 2客户端源码.php+mysql服务端源码,功能强大,代码规范 ...

  4. Netty 源码解析系列-服务端启动流程解析

    netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...

  5. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

  6. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  7. 视频直播源码中关于服务端直播开播推送实现

    在视频直播源码中直播app开播时需向客户推送开播消息通知用户,实现方式如下: 1.申请相应的推送服务三方,如下使用极光推送,获取相应的配置资料,并做好相应的配置 2.推送代码如下: /* 极光推送 * ...

  8. 【Netty系列_3】Netty源码分析之服务端channel

    highlight: androidstudio 前言 学习源码要有十足的耐性!越是封装完美的框架,内部就越复杂,源码很深很长!不过要抓住要点分析,实在不行多看几遍,配合debug,去一窥优秀框架的精 ...

  9. java聊天程序源代码_java聊天程序源代码

    服务端: import java.io.*; import java.net.*; import java.util.*; public class ChatServer { boolean stat ...

  10. java source folder作用_java项目把源码放到folder里,不是source folder,这个java代码还能被调用吗?...

    看到这个问题,真心觉得初学入门就用IDE真心不是一个好方法.IDE屏蔽了太多基础知识,比如Java是需要编译的,运行的是编译后的class文件.编译命令有编译参数,执行命令有执行命令的参数.还有环境变 ...

最新文章

  1. acm第二节2020.4.2-4.4补
  2. 关于计算机的发展过程及基础知识正确的是,2011doc-计算机基础知识.doc
  3. hadoop搭建_hadoop分布式搭建之虚拟机克隆
  4. 强烈谴责中国红十字会
  5. 已跳过全部重新生成_2020年最新跳对公技术1+5,1+10,5+50(必读)
  6. CI框架PHP漫画小说二合一CMS
  7. WordPress后台保护插件 Sabre 和 电子商务插件E - commerce GetShopped
  8. 网页截图和svg模版动态生成图片Java实现
  9. 2.图像作为函数 | 噪音概念、图像相减_7
  10. uniapp 子组件 props拿不到数据_谈一谈使用 webpack 开发时,Vue 组件之间的数据传递...
  11. C++中对字符串操作
  12. Python之京东商品秒杀
  13. WCF服务系列——定义宿主(IIS服务宿主)
  14. flutter 内网安装包生成二维码
  15. hadoop HA 架构
  16. 图像的阈值分割(Optimum Thresholding)
  17. 模式识别技术漫谈(1)
  18. 射频衰减器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. props 更新.使用规则
  20. win7开启uasp协议_移植win8通用USB驱动到win7上并开启UASP功能!

热门文章

  1. 短视频APP管理系统源码 直播系统源码
  2. 计算机网络是几级学科,教育部更新学科目录 “网络空间安全”增设为一级学科...
  3. 赤峰中考计算机考试软件,2017年内蒙古赤峰中考信息技术操作考试实施细则
  4. java jni 生成_利用javah技术生成jni接口的详细步骤 | 学步园
  5. html5手机页面工具,Html5技术变革下的H5页面制作工具和手机app开发工具
  6. 生产环境下服务器台账
  7. js 去除空格与换行
  8. cocoscreator 资源加密
  9. 基于SSH开发教务排课系统
  10. 什么是人工智能?(科普)