準(zhǔn)備工作:
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),正陽企業(yè)網(wǎng)站建設(shè),正陽品牌網(wǎng)站建設(shè),網(wǎng)站定制,正陽網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,正陽網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
兩個(gè)QQ(Q號(hào)現(xiàn)在好容易申請(qǐng))
eclipse(支持awt swing 可視化開發(fā)的版本為佳)
JDK 以上
JQL 直接從官方那螞沖數(shù)邊下載的不能直接用需要改裝 下載地址:
步悶首驟:
解壓jqgsv beta_src
用eclipse導(dǎo)入目錄jqgsv beta_src下的項(xiàng)目
把jqgsv beta_src目錄下的mons codec jar 和 mons logging jar加到項(xiàng)目屬性里的Librares中
打開判亂 myqq MuiltQQfrendSend 實(shí)例代碼都在這里 可以直接運(yùn)行用eclipse運(yùn)行該類 如果登陸失敗 多登陸
幾次就可以了
//登陸代碼
client = new QQClient();
client setConnectionPoolFactory(new PortGateFactory());
QQUser user = new QQUser(你的Q號(hào) 你Q號(hào)的密碼);
client addQQListener(this);
user setUdp(true);
client setUser(user);
//client setLoginServer( );
client setLoginServer( );
qq服務(wù)器地址有多種 你可以選一個(gè)填上去 QQ號(hào)必須是整型
//發(fā)送消息
client sendIM(一個(gè)好友的QQ號(hào) Util getBytes(ext));//發(fā)送一個(gè)普通的消息
好友的QQ號(hào)必須是整型
類QQClient主要是執(zhí)行QQ客戶端的動(dòng)作 比如 發(fā)送消息 添加好友 獲取好友等
//獲取你的Q號(hào)下的所有好友信息
GetFriendListReplyPacket gf = (GetFriendListReplyPacket)e getSource();
java util List friends = (java util List) gf friends;
for(int i = ; i friends size() ; i++){
QQFriend qf = (QQFriend)friends get(i);
jTextArea setText(jTextArea getText() + String valueOf(qf qqNum) + \n );
}
if((int)gf position != ){
client getFriendList(gf position);
}else{
jButton setEnabled(true);
jButton setEnabled(true);
}
client getFriendList() //獲取好友列表
這個(gè)方法需要配合一個(gè)變量position和一個(gè)事件才能完成 因?yàn)镼Q是按多次發(fā)送好友列表 position =
表示已到好友列表最后一頁 不需要在getFriendList 當(dāng)?shù)玫胶糜蚜斜頃?huì)產(chǎn)生一個(gè)事件 事件編號(hào)為
GetFriendListReplyPacket 好友類
//事件驅(qū)動(dòng)
jql全部采用事件驅(qū)動(dòng) 實(shí)現(xiàn)接口 IQQListener
public void qqEvent(QQEvent e) {//事件監(jiān)聽器
System out println( 事件ID: + e type);
/* */ switch(e type)
{
/* MISALIGNED */ /* */ default:
break;
/* MISALIGNED */ /* */ case :
/* MISALIGNED */ /* */ processLoginSuccess();//對(duì)應(yīng)的事件處理
/* MISALIGNED */ /* */ break;
/* MISALIGNED */ /* */ case :
/* MISALIGNED */ /* */ processLoginFail();
/* MISALIGNED */ /* */ break;
///* MISALIGNED */ /* */ case :
///* MISALIGNED */ /* */ processLoginUnknownError();
///* MISALIGNED */ /* */ break;
/* MISALIGNED */ /* */ case :
/* MISALIGNED */ /* */ processSendIMSuccess();
/* MISALIGNED */ /* */ break;
/* MISALIGNED */ /* */ case :
/* MISALIGNED */ /* */ processChangeStatusSuccess();
QQ的每次動(dòng)作都會(huì)產(chǎn)生一個(gè)事件 每個(gè)事件對(duì)應(yīng)一個(gè)整數(shù) 在類edu tsinghua lumaqq qq events QQEvent有具體描述
lishixinzhi/Article/program/Java/hx/201311/26541
package?com.tanyue;
import?javax.swing.JComboBox;
import?javax.swing.JFrame;
public?class?Test?彎歲{
/**
?*?@param?args
?*/
public?static?void?main(String[]?args)?{
//?TODO?睜含Auto-generated?method?stub
JFrame?frame?=?悉鬧笑new?JFrame("box");
JComboBox?box?=?new?JComboBox();
box.addItem("好友1");
box.addItem("好友2");
box.addItem("好友3");
box.addItem("好友4");
frame.setBounds(0,?0,?300,?300);
frame.add(box);
frame.setVisible(true);
}
}
好友類里面包括姓名 聯(lián)系方式 郵箱等等
class Friend{
String name;
String contact;
String email;
Friend(String name,String contact,String email){
構(gòu)造函數(shù)
}
getter
setter
}
上面只是個(gè)雛形自己完善
用一個(gè)ArrayListFriend來儲(chǔ)存所有的Friends
取,刪或耐橋者增直接調(diào)用ArrayList的函數(shù)
用swing來顯示所有的好友。。for循環(huán)讀取ArrayList
然稿畝春后批量加入swing GUI顯示就行
可以用鍵耐JTable或者直接用JPanel等等
首先要有個(gè)存好友的數(shù)據(jù)結(jié)構(gòu):friendList
既然是QQ,廳態(tài)那么肯定有好友類別了,一個(gè)類別底下的子節(jié)點(diǎn)為一個(gè)好友。
然后根據(jù)這個(gè)數(shù)據(jù)結(jié)構(gòu)畫出這個(gè)Jtree,
第一列毀洞字節(jié)點(diǎn)為好友類別,
第二列子節(jié)點(diǎn)為好友,給這些字節(jié)點(diǎn)添加鼠標(biāo)點(diǎn)擊事件,點(diǎn)擊后彈出想扮余源要的東西。
最后,在接收信息進(jìn)程內(nèi)添加一個(gè)方法,即一旦有好友上線或者下線則接收改變的好友的信息,之前的存好友的數(shù)據(jù)結(jié)構(gòu)也隨之改變,
再根據(jù)這個(gè)數(shù)據(jù)結(jié)構(gòu)改變這個(gè)JTree,不會(huì)改變的話就重新畫一個(gè),tree=new JTree();(tree為之前的列表),這樣就可以了。