一个关于如何创建类似于QQ客户端聊天窗口的模拟小项目
对于不久之前学习到的一个有关的类似于QQ聊天框的模拟项目,对其中涉及到的知识在这里做一下总结。
- 首先,你要先创建一个客户端聊天框(取名为:ChatClient,它是你创建的类),这个类继承了Frame。而这个Frame是java.awt里的一个子类,它是带有标题和边框的顶层窗口,它里面有很多方法(具体查手册)。下面是一段示例代码:
import java.awt.*;
public class ChatClient extends Frame{//你创建的类继承了Frame
public static void main(String[] args) {
new ChatClient().launchFrame();//通过new实例化创建一个对象
}
public void launchFrame(){//设置聊天框的大小参数
setLocation(400,300);
setSize(300,300);
setVisible(true);//设置为可见
}
}
这是运行之后出现的一个雏形聊天框:

2. 第二步,调整聊天框的大小,并且往框架中添加控件。下面是代码:
import java.awt.*;
public class ChatClient extends Frame{
//实例化创建对象
TextField tfTxt = new TextField();
TextArea taContent = new TextArea();
public static void main(String[] args) {
new ChatClient().launchFrame();
}
public void launchFrame(){
setLocation(400,300);
setSize(300,300);
//往框架中添加控件,Frame默认的布局是BorderLayout
add(tfTxt,BorderLayout.SOUTH);
add(taContent,BorderLayout.NORTH);
this.pack();
setVisible(true);
}
}
这是运行之后的效果:

3.添加事件感应,可以往文本框中输入文字
import java.awt.*;
import java.awt.event.*; public class ChatClient extends Frame { // 添加文本域事件感应,三种方法:外部并行类,内部类,局部匿名类
TextField tfTxt = new TextField();
TextArea taContent = new TextArea(); public static void main(String[] args) {
new ChatClient().launchFrame();//通过new实例化创建一个对象
} public void launchFrame() {
setLocation(400, 300);
setSize(300, 300);
// 往框架中添加控件
add(tfTxt, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
this.pack();//打包
//给当前对象添加一个窗口监听事件
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
tfTxt.addActionListener(new TfListener());//给文本域添加一个事件监听
setVisible(true);
} private class TfListener implements ActionListener{
public void actionPerformed(ActionEvent e){
String s = tfTxt.getText().trim(); }
}
}
运行之后的效果:

4.添加客户端,通过socket链接客户端和服务器。
import java.io.IOException;
import java.net.*; public class ChatServer {
//添加服务端
public static void main(String[] args) {
try(
ServerSocket ss = new ServerSocket(8888);//通过socket链接客户端和服务器端
){
while (true){
Socket s = ss.accept();
System.out.println( "a client connected!!" );
}
}catch(Exception e){
e.printStackTrace();
}
} }
5.第五步,链接服务器。
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.net.*; public class ChatClient extends Frame { // 添加文本域事件感应,三种方法:外部并行类,内部类,局部匿名类 TextField tfTxt = new TextField();
TextArea taContent = new TextArea(); public static void main(String[] args) {
new ChatClient().launchFrame();
} public void launchFrame() {
setLocation(400, 300);
setSize(300, 300);
// 往框架中添加控件
add(tfTxt, BorderLayout.SOUTH);
add(taContent, BorderLayout.NORTH);
this.pack();
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
tfTxt.addActionListener(new TfListener());
setVisible(true);
connect();
} //链接服务器方法
public void connect(){
try(
Socket s = new Socket("127.0.0.1", 8888);//端口号必须一致
){
System.out.println( "Connected sucsess" );
}catch(IOException e){
e.printStackTrace();
}
} private class TfListener implements ActionListener{
public void actionPerformed(ActionEvent e){
String s = tfTxt.getText().trim(); }
}
}
先写到这里,有什么不对的地方,请大神敬请指教!
一个关于如何创建类似于QQ客户端聊天窗口的模拟小项目的更多相关文章
- 利用TabHost制作QQ客户端标签栏效果(低版本QQ)
学习一定要从基础学起,只有有一个好的基础,我们才会变得更加的perfect 下面小编将利用TabHost制作QQ客户端标签栏效果(这个版本的QQ是在前几年发布的)…. 首先我们看一下效果: 看到这个界 ...
- classmethod一个用处是创建可选类构造器
Definition and Introduction通常来说, descriptor 是一种绑定着特殊行为属性的对象, 在访问它时行为被descriptor协议定义的方法所重载.这些方法是__get ...
- 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)
现在基本上所有的需要用户注册的APP都有一个需要用户上传头像的需求,上传的头像基本都是类似于QQ.微信等社交应用圆形头像.最近,正在做的一个社交应用多处需要用到这种圆形头像的处理,总不能每次都对图片做 ...
- 可以创建专业的客户端/服务器视频会议应用程序的音频和视频控件LEADTOOLS Video Conferencing SDK
LEADTOOLS Video Streaming Module控件为您创建一个自定义的视频会议应用程序和工具提供所有需要的功能.软件开发人员可以使用Video Streaming Module SD ...
- [课堂实践与项目]手机QQ客户端--4期(SQLite的加入,注册,找回,登录界面的修改):建立关于QQ注册类,使用SQLite进行存储,
经过昨天下午和今天上午的不懈努力,终于通过了SQLite的学习. 我们现在这里定义一个有关SQLIte的封装类,便于我在后面的用户注册,用户密码找回,和登录界面的使用 1.首先我们看看我们建立的use ...
- 类似于qq空间类型的评论和回复
最近学习thinkphp,做了一个博客系统,其中感觉实现一个类似于qq空间的评论和回复功能比较复杂,所以把这次的经历记录下来,与大家共勉,具体的方法就不说了,在这里分享一下思路. 目标就是这种,关键是 ...
- node.js中使用http模块创建服务器和客户端
node.js中的 http 模块提供了创建服务器和客户端的方法,http 全称是超文本传输协议,基于 tcp 之上,属于应用层协议. 一.创建http服务器 const http = require ...
- node.js中net模块创建服务器和客户端(TCP)
node.js中net模块创建服务器和客户端 1.node.js中net模块创建服务器(net.createServer) // 将net模块 引入进来 var net = require(" ...
- JS时间轴效果(类似于qq空间时间轴效果)
在上一家公司写了一个时间轴效果,今天整理了下,感觉有必要写一篇博客出来 给大家分享分享 当然代码还有很多不足的地方,希望大家多指点指点下,此效果类似于QQ空间或者人人网空间时间轴效果,当时也是为了需求 ...
随机推荐
- Spring3.0 入门进阶(三):基于XML方式的AOP使用
AOP是一个比较通用的概念,主要关注的内容用一句话来说就是"如何使用一个对象代理另外一个对象",不同的框架会有不同的实现,Aspectj 是在编译期就绑定了代理对象与被代理对象的关 ...
- 破解NET的四大神器
原本这篇文章可以更早一星期写出来与大家分享,由于某方面的原因耽搁到现在,心里竟有那么一点好像对不住大家的感觉.这当然与神器有关,因为我发现利用这四大神器我似乎觉得几乎所有的NET程序破解都不在话下了 ...
- eclipse 插件
eclipse 插件 pdt(http://projects.eclipse.org/projects/tools.pdt/downloads) PHP Development Tools 3.2 R ...
- Netty4.x分析
官网定义: netty是一个异步.事件驱动的网络应用框架,用于快速开发可维护的.高性能的服务端和客户端程序. 原理分析 Architecture Overview 网络模型:netty采用了Reac ...
- TC SRM 664 div2 B BearPlaysDiv2 bfs
BearPlaysDiv2 Problem Statement Limak is a little bear who loves to play. Today he is playing by ...
- 从Wolframserver获取DC comics卡通人物数据
背景知识 DC comics是美国时代华纳旗下DC娱乐下属的一个漫绘图书出版商. 超人.蝙蝠侠之类漫画的始作俑者. 在Wolfram的眼下为止3750个PopularCurves数据中(所有下载数据有 ...
- [AngularJS] ui-router: Abstract States
ui-router has the powerful ability to define abstract states, or states that can't be navigated to, ...
- Android Bundle传递简单数据、对象数据
Android开发过程中进程遇到组件之间.进程之间等数据的传递,数据传递有非常多种,当中使用Bundle传递非常方便. Bundle能够传递多种数据,是一种类似map的key-value数据结构 简单 ...
- ExpandableListView 箭头靠右
ExpandableListView 默认标示箭头是在左边的,当左边有图片时,不是太好看,想把它放在右边,这么简单的事可我折腾死了,还好给我找到了. 参照了以下链接: expandableListvi ...
- HDU3572 Task Schedule 【最大流】
Task Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...