对于不久之前学习到的一个有关的类似于QQ聊天框的模拟项目,对其中涉及到的知识在这里做一下总结。

  1. 首先,你要先创建一个客户端聊天框(取名为: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客户端聊天窗口的模拟小项目的更多相关文章

  1. 利用TabHost制作QQ客户端标签栏效果(低版本QQ)

    学习一定要从基础学起,只有有一个好的基础,我们才会变得更加的perfect 下面小编将利用TabHost制作QQ客户端标签栏效果(这个版本的QQ是在前几年发布的)…. 首先我们看一下效果: 看到这个界 ...

  2. classmethod一个用处是创建可选类构造器

    Definition and Introduction通常来说, descriptor 是一种绑定着特殊行为属性的对象, 在访问它时行为被descriptor协议定义的方法所重载.这些方法是__get ...

  3. 自定义控件--CircleImageView(类似于QQ、微信圆形头像自定义控件)

    现在基本上所有的需要用户注册的APP都有一个需要用户上传头像的需求,上传的头像基本都是类似于QQ.微信等社交应用圆形头像.最近,正在做的一个社交应用多处需要用到这种圆形头像的处理,总不能每次都对图片做 ...

  4. 可以创建专业的客户端/服务器视频会议应用程序的音频和视频控件LEADTOOLS Video Conferencing SDK

    LEADTOOLS Video Streaming Module控件为您创建一个自定义的视频会议应用程序和工具提供所有需要的功能.软件开发人员可以使用Video Streaming Module SD ...

  5. [课堂实践与项目]手机QQ客户端--4期(SQLite的加入,注册,找回,登录界面的修改):建立关于QQ注册类,使用SQLite进行存储,

    经过昨天下午和今天上午的不懈努力,终于通过了SQLite的学习. 我们现在这里定义一个有关SQLIte的封装类,便于我在后面的用户注册,用户密码找回,和登录界面的使用 1.首先我们看看我们建立的use ...

  6. 类似于qq空间类型的评论和回复

    最近学习thinkphp,做了一个博客系统,其中感觉实现一个类似于qq空间的评论和回复功能比较复杂,所以把这次的经历记录下来,与大家共勉,具体的方法就不说了,在这里分享一下思路. 目标就是这种,关键是 ...

  7. node.js中使用http模块创建服务器和客户端

    node.js中的 http 模块提供了创建服务器和客户端的方法,http 全称是超文本传输协议,基于 tcp 之上,属于应用层协议. 一.创建http服务器 const http = require ...

  8. node.js中net模块创建服务器和客户端(TCP)

    node.js中net模块创建服务器和客户端 1.node.js中net模块创建服务器(net.createServer) // 将net模块 引入进来 var net = require(" ...

  9. JS时间轴效果(类似于qq空间时间轴效果)

    在上一家公司写了一个时间轴效果,今天整理了下,感觉有必要写一篇博客出来 给大家分享分享 当然代码还有很多不足的地方,希望大家多指点指点下,此效果类似于QQ空间或者人人网空间时间轴效果,当时也是为了需求 ...

随机推荐

  1. 下载Xml文件方法

    #region 下载Xml文件方法 //定义委托 private delegate void DownLoadDelegate(string url, string filename); privat ...

  2. MEF 编程指南(七):使用目录

    目录(Catalogs)   MEF 特性编程模型的核心价值,拥有通过目录动态地发现部件的能力.目录允许应用程序轻松地使用那些通过 Export Attribute 注册自身的导出.下面列出 MEF ...

  3. C语言高效编程的几招(绝对实用,绝对经典)

    编写高效简洁的C语言代码,是许多软件工程师追求的目标.废话不说,走起! 第一招:以空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题 eg.字符串的 ...

  4. PostgreSQL的 initdb 源代码分析之二十二

    继续分析 load_plpgsql(); 展开: 就是让postgres 执行 create extension plpgsql cmd是: "/home/pgsql/project/bin ...

  5. PostgreSQL中,如何查表属于哪个数据库

    db1=# \x Expanded display is on. db1=# SELECT * FROM information_schema.tables WHERE table_name='tab ...

  6. Educational Codeforces Round 2 B. Queries about less or equal elements 水题

    B. Queries about less or equal elements Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforc ...

  7. codeforces Gym 100418D BOPC 打表找规律,求逆元

    BOPCTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.action?c ...

  8. [Mapreduce]eclipse下写wordcount

    上传两个文件到hdfs上的input目录下 代码例如以下: import java.io.IOException; import java.util.StringTokenizer; import o ...

  9. [Javascript] IO Functor

    IO functor doesn't like Maybe(), Either() functors. Instead of get a value, it takes a function. API ...

  10. JavaScript 中 typeof 知多少?

    typeof运算符介绍:typeof 是一个一元运算,放在一个运算数之前,运算数可以是任意类型.它返回值是一个字符串,该字符串说明运算数的类型. 你知道下面typeof运算的结果吗? typeof(1 ...