科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Java实现类MSN、QQ好友上线通知界面

Java实现类MSN、QQ好友上线通知界面

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Java实现类MSN、QQ好友上线通知界面

作者:sunyfun 来源:赛迪网技术社区 2007年11月30日

关键字: 通知界面 QQ msn java

  • 评论
  • 分享微博
  • 分享邮件
来源: 天极网 O)p-YgI2  
]KDxXV%V*  
  相信大家都使用过MSN,QQ这样的即时聊天类软件,对于它们的好友上线提示功能并不陌生吧?从屏幕右下角弹出一个小界面,慢慢上升,最后消失。我们能不能在自已的程序中也做出相同的功能呢?能!笔者现用JAVA和eclipse的SWT用户界面组件实现这个功能。 v^R\0<3]  
13Vx[i;V  
  什么是SWT呢? mj8&s=y  
?Tq"{_0 R  
  SWT原来是eclipse项目组为开发eclipse IDE所编写的图形界面API,运行时,其先判断本机是否有相同的界面元素,如果有则直接调用显示,如没有才进行模拟显示。其运行机制使速度比AWT,SWING快很多。 F;8dSd  
t4O8O1s J  
  了解更多请看:http://www.eclipse.org/swt )Re.-; 8  
hE2+^K*  
  编写思路 hN]?>tglJ  
u|7_9S  
  先取得用户屏幕大小,用屏幕高度减去popup界面的高度计算出popup界面在屏幕显示的最高位置(当界面移动到此位置时就停止移动)。 -- z`SB6>  
ghUu^u;}  
wH)NZ`S  
Rectangle area = Display.getDefault().getClientArea(); RA`{v.y  
int upPosition = area.height - 100; uzVG#S*  
e5fqKS9s  
  用屏幕高度加上popup界面的高度就计算出popup界面的初始位置(初始化时不可见,然后慢慢上移到upPosition点后停止移动,再显示若干秒后消失)。 jRX K`h=  
e8R |7tw  
R4^Qi4D  
int downPosition = area.height + 100; "(|hSS  
:C{Lj  
  移动位置我们用线程实现,当初始化界面后,调用start()方法运行此线程,在线程中循环判断downPosition的大小是否小于upPosition,如果小于的话说明还未到停止的时候,设置popup界面的边框为downPosition,并暂停10毫秒,如果downPosition大于upPosition的,说明popup界面已移动到了最高位置。调用sleep()暂停5秒钟后关闭界面并退出程序。就这么简单,ok, Let's go! 下面给出整个程序代码: kge'A[f  
?cM Jd  
  描述: "5, 2bI/  
P4cFIl~TP  
  (Test为主界面,点击上面的button后,调用Popup在右下角显示像MSN和QQ一样的popup界面。) `C`sci  
A"vRX`q7  
  图一为源代码中的实现,图二为修改过后的界面(和QQ的有点像吧。) k=_?F3)  
'H7SURF0 f  
 *3UP  
图一       U9b R = F  
[ ehpO;5*  
Ut< v 33  
图二 Y~'7OXcy  
UE%Be5*5  
[ {c,a=&  
0->"Wv :3  
  源代码: o G,"Jh  
&qBC81WQT  
// Test.java IPJp~I0;F  
//主界面,其中只有一个button,当点击时调用Popup在右下角显示像MSN和QQ一样的popup界面。 wyMUl)=S  
e `=. ^i  
import org.eclipse.swt.SWT; ZF}F2X_  
import org.eclipse.swt.events.SelectionAdapter; ej=A\ ry9  
import org.eclipse.swt.events.SelectionEvent; J!ABp| -^  
import org.eclipse.swt.widgets.Button; r!@& ?my^  
import org.eclipse.swt.widgets.Display; %#(tM~qeB  
import org.eclipse.swt.widgets.Shell; `q#l3~9  
[%o.7&I  
public class Test { uEL7hs`]B  
&&(!v^"5  
 public static void main(String[] args) { wEcvQ;Mb  
' S&[{J  
  final Display display = new Display(); $MWmg  
  Shell shell = new Shell(); (ZQ59nLA  
  shell.setText("aaa"); ALCKQHa}  
  shell.setSize(250, 150); tUSl Q+Ng  
<C_jB~)  
  final Button button = new Button(shell, SWT.NONE); qi'FfKF|  
  button.setBounds(50, 20, 100, 25); SJySF!nnu  
  button.setText("button"); ZtzzQ-} P  
  //监听button的事件,当用户点击时调用Popup类显示popup界面。 ^Ip~Sgmy  
  button.addSelectionListener(new SelectionAdapter() { j,^(7  
   public void widgetSelected(SelectionEvent e) { AstbO[t4T  
    //实例化popup类,构造函数为popup界面中出现的提示信息。 Jqz Hx#2  
    Popup popup = new Popup("您的好友xxx上线了。"); Y+a.015pW  
    popup.start(); p >/~hJ6  
   } ?OhJK^g  
  }); MJ*>7@Ovwr  
Umd)(C#gO  
  shell.open(); AU !ZKNl1  
02N\ODe`  
  while (!shell.isDisposed()) { YjpYY[  
   if (!display.readAndDispatch()) { 5-2YT5  
    display.sleep(); w;p&>6&L3  
   } gyM y\uH@  
  } Isq/ 'n  
  display.dispose(); Y@q?5e*nB  
 } ;8_SB44  
}  lJpB@&  
& _W\N  
// Popup.java =< l|X J=  
//实现像MSN,QQ一样的好友上线通知popup RtxXGwi  
QyYIK&p$  
import org.eclipse.swt.SWT; Cux3F^[X/  
import org.eclipse.swt.graphics.Rectangle; Q4Cq>T-)  
import org.eclipse.swt.widgets.Display; un8RlxP%  
import org.eclipse.swt.widgets.Shell; !LJ\zt76)F  
import org.eclipse.swt.widgets.Text; o>*-?#-V  
MsQD:2G )  
public class Popup extends Thread { k4<;dv  
V=%ugO~FO  
 Shell shell; dn>G42c;)  
XQtgQF/rv  
 protected int moveStep = 2; //每次移动的pixel `vMfT d>~  
 protected int upPosition; //能移动到的最上面坐标 R_21;41  
 protected int downPosition; //当前popup的边框坐标 BXPq~e[!M  
 protected int leftPosition; //popup左边边框坐标 public Popup(final String message) { \NgEq[%T  
A W W_\D  
 shell = new Shell(SWT.ON_TOP); `Xg^.s  
 Text text = new Text(shell, SWT.MULTI | SWT.WRAP); Q]L=.u8P  
 text.setBounds(10, 20, 180, 80); 5ktl|  
 text.setBackground(shell.getBackground()); #^A H'  
 text.setText(message); w"Am24'%  
+5^x%b&u  
 //取屏莫大小 M.^r bS  
 Rectangle area = Display.getDefault().getClientArea(); m& ; 3!V.  
ymMVR$t   
 upPosition = area.height - 100;//计算出popup界面在屏幕显示的最高位置 A lLv:  
 downPosition = area.height + 100;//计算出popup界面的初始位置 5%5 '\2*  
 leftPosition = area.width - 180; -<T^p]&<y  
MZ.6Z+yA  
 shell.setSize(180, 100); pg#S (.&  
!*\>5H>  
 //初始化popup位置 5 +`i.Bm  
 shell.setLocation(leftPosition, downPosition); {x3 m mx.S  
&0]~|6 hf  
 shell.open(); }lP0  
aJoW]5]P=i  
} X^<'*;u  
nvol:CP'A  
public void run() { t\!=EBy  
"jN! .9y5  
 Display display = shell.getDisplay(); !7>^9}x2  
 while (true) { XyZ_Q3V  
  try { d=M8GNl(>  
   Thread.sleep(10); wlU .EF  
d-QY7v  
   //判断当前位置是否小于能出现的最高位置,小于的话就说明还可以向上移动。 _csj!-_}  
   if ((downPosition - moveStep) >upPosition) { $CbJ];W  
    display.asyncExec(new Runnable() { ec{>Uu<  
     public void run() { mV*Ey  
      shell.setLocation(leftPosition, downPosition- moveStep); cNB" Vl  
      downPosition -= moveStep; "h"A<W  
     } Ud sT7"g  
    }); l/t}|W   
    //此时已经移动到了最高位置,显示5秒钟后,关闭窗口并退出。 7nImF  
   } else { ,h>S:gz  
    Thread.sleep(5000); onB9XIAJL$  
    display.asyncExec(new Runnable() { U+(2@:$  
     public void run() { +>HuW"  
      shell.dispose(); N@xzDO!>z  
     }  .tpi?S  
    }); k)&M]~?*  
   } m]$Q J|  
  } catch (InterruptedException e) { w/.8Myo{  
   e.printStackTrace(); bLj &6  
  } $D rY6"=  
 } tx& i8  
} cO zxo{p  
} 1Gk'za  
?]/(;,}!  
  上面的源程序就完成了图一中的功能,读者可以自行修改,让其界面,功能更强大。
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章