一个关于如何创建类似于QQ客户端聊天窗口的模拟小项目

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

  1. 首先,你要先创建一个客户端聊天框(取名为:ChatClient,它是你创建的类),这个类继承了Frame。而这个Frame是java.awt里的一个子类,它是带有标题和边框的顶层窗口,它里面有很多方法(具体查手册)。下面是一段示例代码:

  

 1 import java.awt.*;
 2
 3 public class ChatClient extends Frame{//你创建的类继承了Frame
 4
 5     public static void main(String[] args) {
 6         new ChatClient().launchFrame();//通过new实例化创建一个对象
 7     }
 8
 9     public void launchFrame(){//设置聊天框的大小参数
10         setLocation(400,300);
11         setSize(300,300);
12         setVisible(true);//设置为可见
13     }
14 }

这是运行之后出现的一个雏形聊天框:

  2. 第二步,调整聊天框的大小,并且往框架中添加控件。下面是代码:

 1 import java.awt.*;
 2
 3 public class ChatClient extends Frame{
 4     //实例化创建对象
 5     TextField tfTxt = new TextField();
 6     TextArea taContent = new TextArea();
 7
 8     public static void main(String[] args) {
 9         new ChatClient().launchFrame();
10     }
11
12     public void launchFrame(){
13         setLocation(400,300);
14         setSize(300,300);
15         //往框架中添加控件,Frame默认的布局是BorderLayout
16         add(tfTxt,BorderLayout.SOUTH);
17         add(taContent,BorderLayout.NORTH);
18         this.pack();
19
20
21         setVisible(true);
22     }
23 }

这是运行之后的效果:

  3.添加事件感应,可以往文本框中输入文字

 1 import java.awt.*;
 2 import java.awt.event.*;
 3
 4 public class ChatClient extends Frame {
 5
 6     // 添加文本域事件感应,三种方法:外部并行类,内部类,局部匿名类
 7     TextField tfTxt = new TextField();
 8     TextArea taContent = new TextArea();
 9
10     public static void main(String[] args) {
11         new ChatClient().launchFrame();//通过new实例化创建一个对象
12     }
13
14     public void launchFrame() {
15         setLocation(400, 300);
16         setSize(300, 300);
17         // 往框架中添加控件
18         add(tfTxt, BorderLayout.SOUTH);
19         add(taContent, BorderLayout.NORTH);
20         this.pack();//打包
21         //给当前对象添加一个窗口监听事件
22         this.addWindowListener(new WindowAdapter(){
23             public void windowClosing(WindowEvent e){
24                 System.exit(0);
25             }
26         });
27         tfTxt.addActionListener(new TfListener());//给文本域添加一个事件监听
28         setVisible(true);
29     }
30
31     private class TfListener implements ActionListener{
32         public void actionPerformed(ActionEvent e){
33             String s = tfTxt.getText().trim();
34
35         }
36     }
37 }

运行之后的效果:

  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();

        }
    }
}

  

先写到这里,有什么不对的地方,请大神敬请指教!

 

时间: 2024-08-10 23:30:43

一个关于如何创建类似于QQ客户端聊天窗口的模拟小项目的相关文章

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

学习一定要从基础学起,只有有一个好的基础,我们才会变得更加的perfect 下面小编将利用TabHost制作QQ客户端标签栏效果(这个版本的QQ是在前几年发布的)…. 首先我们看一下效果: 看到这个界面,刹那间一点喜悦感都没有了,不过对于我们学习程序的人来说,UI是一方面,代码也是一方面,今天讲述的是代码,所以我们就在此忽略UI吧 --------------------------------------------------------华丽分割线----------------------

一个基于Android系统的新闻客户端(一)

一.整体概述 在服务器端,通过对凤凰网的抓取存入数据库,客户端通过向服务器发送请求得到新闻. 服务端用WCF,宿主为window服务,客户端为Java写的安卓程序. 二.客户端 我在eclipse里新建了个Android项目,命名为MyNewClient,eclipse自动生成二个xml布局文件,如图: 其中,fragment_main.xml是新版的布局文件,暂时不会用,把它删掉. 新建xml文件,命名为activity_foot.xml,在这里我们要做app的底部,先上代码: <?xml v

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

2013-11-04 23:51 by 空智, 4041 阅读, 15 评论, 收藏, 编辑 在上一家公司写了一个时间轴效果,今天整理了下,感觉有必要写一篇博客出来 给大家分享分享 当然代码还有很多不足的地方,希望大家多指点指点下,此效果类似于QQ空间或者人人网空间时间轴效果,当时也是为了需求 研究了下qq空间逻辑(当然JS代码压缩了肯定看不到的),只是当时研究了下他们HTML结构和css结构,所以仿照他们那种逻辑自己也写了一个出来.先来看看是个什么样的吧!如下图所示: 需求分析:左侧是一个时间

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

LEADTOOLS Video Streaming Module控件为您创建一个自定义的视频会议应用程序和工具提供所有需要的功能.软件开发人员可以使用Video Streaming Module SDK,通过一些不同的配置来创建一些客户端/服务器应用程序.例如,如果有一个服务器需要向多个客户端发送音频/视频数据,那么就可以在服务器上创建这样的应用程序,比如多点传送或Web广播中的web多点传播.此外,当有多个捕捉点向一个源发送视频数据时,您可以创建安全/监控应用程序. 产品特征: 视频会议二进制

封装一个类搞定90%安卓客户端与服务器端交互

本实例封装了一个处理安卓客户端与服务器端交互的几个方法,对于中文乱码问题本实例也找到了解决方案.本例可以处理的场景如下: 1.与服务器端交互json数据. 2.Get方式与服务器端交互数据. 3.Post方式与服务器端交互数据. 4.HttpClient方式与服务器端交互数据. 5.上传文件到服务器端. 6.从服务器端下载文件. 7.从服务器端读取文本文件. 实例截图: 本篇文章将实例代码完整贴出,希望以本文作为一个交流的平台,大家集思广益封装出更好的处理类.交流地址: http://blog.

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

现在基本上所有的需要用户注册的APP都有一个需要用户上传头像的需求,上传的头像基本都是类似于QQ.微信等社交应用圆形头像.最近,正在做的一个社交应用多处需要用到这种圆形头像的处理,总不能每次都对图片做一些剪裁来实现圆形头像的处理,于是就想到了自定义一个控件来实现相应的效果.最后的效果图如下: 1.自定义View(CircleImageView) public class CircleImageView extends ImageView { private static final ScaleT

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

Definition and Introduction通常来说, descriptor 是一种绑定着特殊行为属性的对象, 在访问它时行为被descriptor协议定义的方法所重载.这些方法是__get__, __set__ 和__delete__. 如果对象定义了任一方法,这个对象就被叫做descriptor.访问对象的属性默认行为是get, set或delete对象字典中的属性.例如, a.x查找路径是从a.__dict__['x']开始,然后是type(a).__dict__['x'],并继

Android Socket 聊天工具(一个服务端实现多个客户端间通信)

如果某位朋友也打算做这个Socket聊天工具,本人有个小小的建议,你可以不必太着急些代码,先想清楚自己最终要做到怎样效果,然后把自己的思路都写下来,有一个基本的实现方法.在写代码时就按照自己的思路一步一步地写下去,这样可以很好地避免写代码时由于思路不清左删右改. 以下是本人程序的设计思路 客户端设计思路: 一 用户登录界面 1 用一个EditText作为用户名输入口,用一个按键确定. 2 注册一个广播接收器,专门接收由后来的聊天界面发过来的消息广播(包括发信人,收信人,消息体). 3 创建一个客

创建类似于输入法窗口的非激活窗口

原文:创建类似于输入法窗口的非激活窗口 创建类似于输入法窗口的非激活窗口 周银辉 我们注意到输入法的候选词窗口是不会被激活而获得输入焦点的, 一个很明显的现象是当你用鼠标点击该窗口时, 系统焦点不会转移到该窗口上, 原来获得焦点的窗口不会失去焦点. 这很棒, 如何实现呢? 很简单, 只要将窗口的ExStyle设置为WS_EX_NOACTIVATE(0x8000000)即可. (另外, 值得注意的是, 如果窗口在任务栏显示图标的话, 仍可以通过任务栏图标来激活它) 方式1, winform窗口中,