Java實現類MSN、QQ好友上線通知界面--IT地帶
 首頁 新聞 安徽 體育 財經 黃梅 旅游 軍事 娛樂 法治 教育 伊人 健康
繁體中文
 IT 彩信 讀書 汽車 演藝 音樂 徽商 書庫 郵件 論壇 賀卡 相冊 交友
簡體中文
精彩圖庫 業界動態 觀察分析 手機數碼 電腦教室 軟件下載 游戲人間 本地市場
精彩推薦
v戴爾發布超低價筆記本 5999元衝擊市場
v盛大購新浪股票 陳天橋談盛大帝國開局戰
v聯想收購IBM PC業務通過美國政府批准
v好萊塢巨頭來華接洽 EVD有望獲千部影片發行權
v民建中央質疑電信收費 呼吁取消固話月租費
v專為巾幗准備 職業商場女性手機精選導購
v有多少機可以重來 2004年遺憾機型回顧
v肯定能讓人絕倒的《三國無雙》武將圖
v《帝國時代3》GDC精美游戲畫面全剖析
精彩圖片
  您當前的位置 :IT地帶 > 電腦教室 > 程序設計 正文
Java實現類MSN、QQ好友上線通知界面

中安網  2005-03-25 15:26

  天極yesky3月23日報道 相信大家都使用過MSN,QQ這樣的即時聊天類軟件,對於它們的好友上線提示功能並不陌生吧?從屏幕右下角彈出一個小界面,慢慢上昇,最後消失。我們能不能在自已的程序中也做出相同的功能呢?能!筆者現用JAVA和eclipse的SWT用戶界面組件實現這個功能。

  什麼是SWT呢?

  SWT原來是eclipse項目組為開發eclipse IDE所編寫的圖形界面API,運行時,其先判斷本機是否有相同的界面元素,如果有則直接調用顯示,如沒有纔進行模擬顯示。其運行機制使速度比AWT,SWING快很多。

  了解更多請看:http://www.eclipse.org/swt

  編寫思路

  先取得用戶屏幕大小,用屏幕高度減去popup界面的高度計算出popup界面在屏幕顯示的最高位置(當界面移動到此位置時就停止移動)。

  Rectangle area = Display.getDefault().getClientArea();

  int upPosition = area.height - 100;

  用屏幕高度加上popup界面的高度就計算出popup界面的初始位置(初始化時不可見,然後慢慢上移到upPosition點後停止移動,再顯示若乾秒後消失)。

  int downPosition = area.height + 100;

  移動位置我們用線程實現,當初始化界面後,調用start()方法運行此線程,在線程中循環判斷downPosition的大小是否小於upPosition,如果小於的話說明還未到停止的時候,設置popup界面的邊框為downPosition,並暫停10毫秒,如果downPosition大於upPosition的,說明popup界面已移動到了最高位置。調用sleep()暫停5秒鍾後關閉界面並退出程序。就這麼簡單,ok, Let's go!下面給出整個程序代碼:

  描述:

  (Test為主界面,點擊上面的button後,調用Popup在右下角顯示像MSN和QQ一樣的popup界面。)

  圖一為源代碼中的實現,圖二為修改過後的界面(和QQ的有點像吧。)

圖一
圖二

  源代碼:

  // Test.java

  //主界面,其中只有一個button,當點擊時調用Popup在右下角顯示像MSN和QQ一樣的popup界面。

  import org.eclipse.swt.SWT;

  import org.eclipse.swt.events.SelectionAdapter;

  import org.eclipse.swt.events.SelectionEvent;

  import org.eclipse.swt.widgets.Button;

  import org.eclipse.swt.widgets.Display;

  import org.eclipse.swt.widgets.Shell;

  public class Test {

  public static void main(String[] args) {

  final Display display = new Display();Shell shell = new Shell();shell.setText("aaa");shell.setSize(250, 150);

  final Button button = new Button(shell, SWT.NONE);button.setBounds(50, 20, 100, 25);button.setText("button");//監聽button的事件,當用戶點擊時調用Popup類顯示popup界面。button.addSelectionListener(new SelectionAdapter() {public void widgetSelected(SelectionEvent e) {//實例化popup類,構造函數為popup界面中出現的提示信息。Popup popup = new Popup("您的好友xxx上線了。");popup.start();}});

  shell.open();

  while (!shell.isDisposed()) {if (!display.readAndDispatch()) {display.sleep();}}display.dispose();}}

  // Popup.java

  //實現像MSN,QQ一樣的好友上線通知popup

  import org.eclipse.swt.SWT;

  import org.eclipse.swt.graphics.Rectangle;

  import org.eclipse.swt.widgets.Display;

  import org.eclipse.swt.widgets.Shell;

  import org.eclipse.swt.widgets.Text;

  public class Popup extends Thread {

  Shell shell;

  protected int moveStep = 2; //每次移動的pixelprotected int upPosition; //能移動到的最上面坐標protected int downPosition; //當前popup的邊框坐標protected int leftPosition; //popup左邊邊框坐標public Popup(final String message) {

  shell = new Shell(SWT.ON_TOP);Text text = new Text(shell, SWT.MULTI | SWT.WRAP);text.setBounds(10, 20, 180, 80);text.setBackground(shell.getBackground());text.setText(message);

  //取屏莫大小Rectangle area = Display.getDefault().getClientArea();

  upPosition = area.height - 100;//計算出popup界面在屏幕顯示的最高位置downPosition = area.height + 100;//計算出popup界面的初始位置leftPosition = area.width - 180;

  shell.setSize(180, 100);

  //初始化popup位置shell.setLocation(leftPosition, downPosition);

  shell.open();

  }

  public void run() {

  Display display = shell.getDisplay();while (true) {try {Thread.sleep(10);

  //判斷當前位置是否小於能出現的最高位置,小於的話就說明還可以向上移動。if ((downPosition - moveStep) > upPosition) {display.asyncExec(new Runnable() {public void run() {shell.setLocation(leftPosition, downPosition- moveStep);downPosition -= moveStep;}});//此時已經移動到了最高位置,顯示5秒鍾後,關閉窗口並退出。} else {Thread.sleep(5000);display.asyncExec(new Runnable() {public void run() {shell.dispose();}});}} catch (InterruptedException e) {e.printStackTrace();}}}

  }

  上面的源程序就完成了圖一中的功能,讀者可以自行修改,讓其界面,功能更強大。(文/何旭中)

編輯: 丁毅
 ?【相 關 報 道】?
-實戰Java多線程編程精要之限制優先級   05-02-05 14:30
-實戰體會Java多線程編程精要之基礎知識   05-01-17 13:56
-JavaBean實現多文件上傳的兩種方法   05-01-13 13:36
-深入淺出基於Java的解釋器設計模式   05-01-10 14:19
-網絡通訊更自由 談Java串行端口技術協議   04-12-29 12:40
 

中國安徽在線網站(中安在線)版權所有 未經允許 請勿復制或鏡像
皖ICP證 030106號