设计的聊天窗口如下: 制作过程: 首先,在默认的BorderLayout视图下, 上边也就是North处添加一个JPanel,将Layout调整为BorderLayout,West放一个JLabel用来放照片, Center再放一个JPanel,布局调整为BorderLayout,Center和South各方一个JLabel,分别放用户昵称和名言. 下边模仿QQ是一个上下可以自行拆分大小的JSplitPane,调整为垂直的上下模式. 拆分框的下边放一个JPanel,设布局为BorderLayou…
增加的菜单栏效果图如下: eclipse 中调整到 swt的design视图下 控件区域选择Menu Controls 将Menu Bar拖动到窗口标题栏 将Cascaded Menu拖动到Menu Bar 依次将多个Menu Item加入到New SubMenu Separator是分隔符 也可以再放入Cascaded Menu级联菜单 好友列表窗口的代码如下: package com.swift.frame; import java.awt.BorderLayout; import java…
登录框注册按钮点击改变窗口大小——出现注册面板  首先用swt可视化设计登录窗口如下图: 此时窗口高度为578 没点击注册时高度为301(可自己定) 注意:注册用户的Jpanel 的border选择Title Border,title属性是“注册用户”    布局Layout选择Absolute Layout 接着,对话框窗口设计好后,双击注册按钮,进行代码编辑,在注册按钮的监听代码中增加一个if判断,当等于301,就给改为窗口高度578,否则改为301 因为使用的是匿名内部类,不能直接使用th…
熟练使用各种布局方式 FlowLayout 流布局 left center right等 BorderLayout 边框布局 east west sorth north center AbsoluteLayout 绝对布局或空布局 任意拖拽 可以使用各种布局的嵌套效果,达到需要的目标 布局后可以在基本布局基础上添加新的JPanel,然后设置JPanel新的布局方式 制作好友列表窗口 首先,设置总的布局方式为 BorderLayout 上边放用户的图标,用户名和用户的名言,然后左边添加JLable…
LoginDialog类的代码修改如下: package com.swift.frame; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.DataInputStream;…
补充聊天项目功能,做如下需求分析: 梳理项目开发所需的必要Java知识基础 GUI将使用更快速的swt实现 SWT(Standard Widget Toolkit) Standard Widget Toolkit是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SWT开发的. 在SWT之前,Sun已经提供了一个跨平台GUI开发工具包就是AWT (Abstract Windowing Toolkit). swt开发包下载地址 链接: https:/…
建立Chat项目,并在项目中创建窗口类 package com.swift; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class ChatClientFrame extends JFrame{ private static f…
实现效果图: eclipse项目中初步整合之前的各个客户端和服务端的窗口与工具类,效果如下图: 已将注册服务器线程RegServer功能放到LoginServer中,使用客户端与服务端的request请求机制,根据请求是注册还是登录,分别进行相应response,客户端根据相应内容判断下一步操作. 发送信息的模式还较为原始,没有使用json方法,但gson包已经导入,支持发送键值对的字符串,及自动解析. 登录对话框LoginDialog类代码如下: package com.swift.frame…
设计好友列表框功能,思路—— 1.当客户端成功登陆后,则客户端把成功登陆信息发送给服务端, 2.由服务端将接收到来自各个成功登陆的客户端的用户信息添加进好友列表, 3.每当有成功登陆的用户就向各个客户端发送完整好友列表 4.好友列表窗要一直死循环着等待接收服务端不断发来的好友列表信息 注意:登陆窗退出时不要关闭socket 聊天窗退出时不要关闭socket 重新整合服务端各种服务到server 类中,只要服务端一开,即可接收客户端的各种请求(登陆.注册.聊天等) 1.3版客户端代码做了登陆成功后…
登录框消失语句 dispose(); 好友列表窗出现 使用new FriendsFrame(phone,s); 登陆对话框代码修改如下: package com.swift.frame; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.ev…
SWT成功激活后 new一个JDialog 调整到Design视图 默认的视图模式是BorderLayout,无论你怎么拖拽,只能放到东西南北中的位置上 所以,我们把视图模式调整为AbsoluteLayout,这样我们可以把小控件拖拽到任意我们需要的位置 发现,这个窗口的皮肤不是很好看,文本框和按钮都是直角矩形 如何更换皮肤呢? 更换Swing自带的Nimbus皮肤 JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLo…
客户端要不断接收服务端发来的信息 与服务端不断接收客户端发来信息相同,使用线程的方法,在线程中循环接收 客户端修改后代码如下: package com.swift; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; impo…
建一个服务端类ChatServer,用于设置端口接收连接 package com.swift; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class ChatServer { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(8888); for (…
代码如下: package com.swift; import java.awt.BorderLayout; import java.awt.Color; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; i…
迭代器的方式会产生锁定 服务器端增加发送给每个客户端已收到信息的功能 所以当获取到一个socket,并打开它的线程进行循环接收客户端发来信息时,我们把这个内部类的线程Client保存到集合List<Client>中 然后在读取到客户端信息后,把这个信息发送给所有端口 通过循环 for(int i=0;i<clients.size();i++){ Client c=clients.get(i); c.send(str); } 发送给每一个已经成功连接到服务端的客户端 服务端详细的代码修改如…
异常一 只开启一个客户端,输入信息后关闭,客户端出现如下异常 根据异常说明 ChatClientFrame客户端117行 提示原因是Socket关闭 分析原因 客户端代码 while (connected) { String str = dis.readUTF(); 当窗口关闭后,Socket已经关闭,读的操作还在继续 处理这个异常,代码如下 catch (SocketException e) { System.out.println("a client has been closed!&quo…
问题的原因是 while(connected) { String str=dis.readUTF(); System.out.println(str); } 不断循环执行,一直在死循环获取socket发送的信息, 使得前面的语句 s = ss.accept(); connected=true; 服务端接收新的客户端不能再被执行 解决的方法——通过多线程技术 当获得一个socket后,则开启一个多线程,让 while(connected) {String str=dis.readUTF();Sys…
服务端对try catch finally重新进行了定义,当发生异常,主动提示,或关闭出现异常的socket 服务器端代码修改如下: package com.swift; import java.io.DataInputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class ChatServer { public static void main(…
没有解决问题之前客户端代码: package com.swift; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.Buf…
方法一,使用匿名内部类的监听方法,因方法一致代码稍冗余 package com.swift; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import jav…
解决完毕后效果图: 好友列表Vector添加的时候进行判断,如果有相同的则不添加 int flag=0; for (int i = 0; i < names.size(); i++) { if (name.equals(names.get(i))) { flag=1; } } if(flag==0) { names.add(name); } 好友列表窗代码如下: package com.swift.frame; import java.awt.BorderLayout; import java.…
原文链接:http://www.cnblogs.com/wangleiblog/articles/5323305.html 转载请注明 最近在弄一个java版的局域网在线聊天项目,功能跟飞秋差不多.p2p嘛,点对点传输信息 基本的思路大致如下: 1. 程序一启动就开启两个线程,: (1) 一个广播消息,让局域网里的其他用户知道自己上线了 (2)第二个监听局域网的消息,一旦收到其他用户的广播消息,就将其加入自己的列表 2. 聊天采用的Socket套接字加多线程的方式进行,每个客户端都开启一个Soc…
在线聊天项目结构图: 多用户登陆效果图: 多用户聊天效果图: 数据库效果图: 重新构建了Server类,使用了Gson方法,通过解析Json字符串,增加Info类,简化判断过程. Server类代码如下: package com.swift.server; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.EOFException; import java.io.IOException;…
最近的项目有一个在线网页交流的需求,由于很久以前做过的demo已经忘记的差不多了,因此便重新学习一下. 我计划的大致实现步骤分这样几大步: 1.使用awt组件和socket实现简单的单客户端向服务端持续发送消息: 2.结合线程,实现多客户端连接服务端发送消息: 3.实现服务端转发客户端消息至所有客户端,同时在客户端显示: 4.把awt组件生成的窗口界面改成前端jsp或者html展示的界面,java socket实现的客户端改为前端技术实现. 这里首先实现第一步的简单功能,难点在于: 1.没有用过…
这个在线聊天工具小项目使用JAVA编写,用JAVA来做图形界面本来就是出了名的低效和丑陋.不过这不是重点.写这个小项目的目的在于串一串J2SE的知识,把当时写这个项目的时候的思路梳理一下.时间有点久了,不过,拿出来再遛一遍算是个总结吧. 1·搭建客户端 在线聊天工具首先得有一个Client端,作为用户的交互界面.所以可以先搭建一个客户端的框架.把图形界面搭起来. 先做一个客户端类Client.java public class ChatClient { public static void ma…
在上一篇,利用线程使服务端实现了能够接收多客户端请求的功能,这里便需要客户端接收多客户端消息的同时还能把消息转发到每个连接的客户端,并且客户端要能在内容显示区域显示出来,从而实现简单的在线群聊. 在实现客户端转发,无非就是增加输出流:而之前客户端都只发不收,这里也需要更改客户端达到循环接收服务端消息的目的,因此也需要实现多线程. 在实现这个功能的时候,偶然想起随机生成验证码的功能,于是也灵机一动随机给每个客户端生成一个名字,从而在输出的时候看起来更加像是群聊,不仅有消息输出,还能看到是谁. 实现…
接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进行处理,从而解决之前的循环读取中造成阻塞的问题. 写线程通常有两种方法,集成Thread或者实现runnable接口,原则上是能实现runnable的情况下就不继承,因为实现接口的方式更加灵活. 客户端代码相较之前没有变化,变得是服务端,因此这里便只贴出服务端代码: package chat.chat; im…
概述 Java socket编程,实现一个在线聊天室, 实现在线用户群聊,私聊,发送文件等功能. 详细 代码下载:http://www.demodashi.com/demo/13623.html 一.项目功能 本项目使用java socket编程,实现一个具有GUI界面的在线聊天室: 该项目具有以下几项功能: 构建一个服务器 S 和若干个客户机 C; 每一台客户机 C 都可以与服务器 S 和其他客户机连接; 每一台客户机 C 都可以通过 S 获得其他客户机发来的信息,并显示哪一台客户机在线,使用…
基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍.最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室.…
10个有意思的Java练手项目: 1.Java 开发简单的计算器 难度为一般,适合具有 Java 基础和 Swing 组件编程知识的用户学习 2.制作一个自己的 Java 编辑器 难度中等,适合 Java 基础扎实,对 Java 核心 API 有所熟悉的同学学习 3.Java 实现个人博客 涉及 SSM 框架和简单的前端知识,难度一般 4.用 Java 写一个日记软件 项目中涉及了包括 Swing 界面编程.文件和 IO 流操作.JDOM 解析 XML 文档等方面的知识点 5.Java 实现简单…