废话不多说,直接上干货。
转载请标明出处:桑尼号 http://blog.csdn.net/aws_yibadao
GiuHub链接获取完整代码:https://github.com/LBJ-LOVE/MyQQ
整个项目框架:
逐个说明如下:
1、ht.bean中两个类:Account对应数据库中account表,成员变量与表中字段一一对应,并生成对应的set、get函数。我用的数据库是mysql、数据库的连接会在ht.db包中介绍。因为是给新手看的,所以我尽量说的详细,把基础的内容也都说一下,我本身也是新手也算是自己再巩固下基础内容。
private int QQNum;//QQ号
private String trueName;//真实名字
private String nickName;//昵称
private String password;//密码
private String sex;//性别
private int age;//年龄
private String nation;//--民族
private String faceImage;//--头像
private String address;//--地址
private String email;//邮箱
private String ip;//地址
private int port;//端口号
private String status;//状态(在线,离线,隐身,忙碌)
private String groupName;
Friend类是保存好友信息的对应于数据库中friend表:
private int id;
private int myQQNum;
private int friendQQNum;
private String group;//分组
private int invalid;//0不是黑名单,1是黑名单
2、ht.db 连接数据库与对数据库的操作都放在这里
数据库连接,opendb()静态函数用来获取数据库连接。
try{
//1.调入驱动
Class.forName("com.mysql.jdbc.Driver");//调入驱动
//2.连接数据库
if(conn==null || conn.isClosed()){
conn = DriverManager.getConnection(URL, USER, PASSWORD);
}
if(!conn.isClosed())
System.out.println("数据库连接成功...");
else
System.out.println("数据库连接失败,请确认用户名或密码是否准确...");
}catch (Exception e) {
e.printStackTrace();//打印错误信息
}
return conn;
数据库操作:
void addAccount(Account acc) //注册用户也就是向数据库中添加记录,数据库的增删改查百度一下你就知道,这里篇幅原因就不贴代码了。sql=“insert into account values(?,?,?...)”
prepareStatement(sql)(用这个prepareStatement不用createStatement,原因可以百度都有)
Account login(Account acc) //登录 也就是通过QQ账号和密码来得到该账号的所有信息。
sql="select * from account where QQNum=? and password=?"
这里先说这两个方法,按照项目的真实过程之后的方法会在用到的时候再写,只要知道凡是涉及到操作数据库的操作都放在这个包中就可以了。
3、ht.common 命令字与一些公关的类
Cmd命令字,表征一系列的动作
public class Cmd {
//命令字
public static final int CMD_LOGIN=1001;//登陆通知
public static final int CMD_SEND=1002;//发送消息
public static final int CMD_HIDDEN=1003;//隐身通知
public static final int CMD_BUSY=1004;//忙碌通知
public static final int CMD_LEAVE=1005;//下线通知
public static final int CMD_SHAKE=1006;//抖动
public static final int CMD_ADDFRIEND=1007;//添加好友
public static final int CMD_AGREE=1008;//同意添加为好友
public static final int CMD_REJECT=1009;//拒绝添加好友
//public static final int CMD_DELFRIEND=1010;//删除好友,该功能我没做-.-
public static final String STATUS_ONLINE="在线";
public static final String STATUS_OFFLINE="离线";
public static final String STATUS_HIDDEN="隐身";
public static final String STATUS_BUSY="忙碌";
public static final String TYPE_FRIEND="好友";
public static final String TYPE_FAMILY="家人";
public static final String TYPE_CLASSMATE="同学";
public static final String TYPE_BLACK="黑名单";
SendMsg消息类,所有的消息必须包装成此类才可以发送:
public class SendMsg implements Serializable{
public int Cmd;//命令字
public Account myAcc;//发送者
public Account friendAcc;//接收者
public StyledDocument doc;//发送内容
public String sFileName;//发送文件的名字
public Object[] b;//文件内容 (字节数组)
}
SendSocket类,只有一个send(SendMsg msg)方法,用来发送消息:
public void send(SendMsg smg){
//字节数组输出流
try {
ByteArrayOutputStream bos=new ByteArrayOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(bos);
oos.writeObject(smg);
byte[] b=bos.toByteArray();//网络传输总是要转成字节数组传送
DatagramSocket socket=new DatagramSocket();
InetAddress addr=InetAddress.getByName(smg.friendAcc.getIp());
int port=smg.friendAcc.getPort();
DatagramPacket p=new DatagramPacket(b, 0, b.length, addr, port);
//发送
socket.send(p);
oos.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Sound类构造函数用来播放好友上线提示音,这个不重要,只要是在好友上线时调用能放个音乐或者声响就行。
4、ht.ui主要的工作都在这个包中
Login类登录模块,账号下拉框保存已登陆过的账号,选择不同的账号显示对应的头像。注册账号按钮转到注册界面,找回密码,记住密码以及自动登录我没做,一周多的时间重复的类似的功能模块或者不重要的模块我都没做,认真的同学可以做。
Reg类注册模块,所有的信息与account的字段对应,QQ号跟端口号是getQQ与getPort随机产生的,严谨地说还要判断是否已存在,但我这里数据量才6个人,已存在的几率很小就没有写对应的方法去判断是否存在。
MainUI主界面,登录按钮跳转到该界面,包括4个分组,本人的头像与昵称,查找好友按钮,状态改变下拉栏。并且右键好友能够出现聊天、查看信息按钮。
ChatUI聊天窗口、FindUI查找好友界面、LookInfo查看资料界面、TipUI好友上线提醒窗口效果如下:
总结
经过该项目的练习要掌握一个java项目的大致框架,数据库的基本使用,网络通信的简单实现,对于UI这部分只是为了做界面会用到不是重点,毕竟现在纯用java做UI的不多吧效果也没专业做UI 的工具漂亮。花半个月的时间练练手,让新手有点成就感,看了两个月的java也算是学着样子做出来了一个小小的项目。