首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2SE

Java 實現 MSN/QQ 風格好友上線通知彈窗 (基於 SWT)

     編輯:J2SE

效果描述

螢幕右下角彈出小視窗,向上滑動至指定位置停留幾秒後淡出消失,模仿 MSN/QQ 好友上線提醒。

技術選型:SWT

SWT (Standard Widget Toolkit) 是 Eclipse 專用 GUI 庫,直接呼叫作業系統原生元件,效能優於 AWT/Swing。官網

核心邏輯

  1. 取得螢幕工作區高度 area.height。
  2. 彈窗高度 100px,最高停留位置 upPosition = area.height - 100,初始隱藏位置 downPosition = area.height + 100。
  3. 水平靠右:leftPosition = area.width - 180。
  4. 執行緒循環:每 10ms 向上移動 moveStep=2 像素,直到 downPosition <= upPosition。
  5. 到達頂端後 sleep(5000) 5 秒,銷毀 Shell 退出執行緒。

完整代碼

主視窗 Test.java


import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;

public class Test {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell();
        shell.setText("主視窗");
        shell.setSize(250, 150);

        Button btn = new Button(shell, SWT.NONE);
        btn.setBounds(50, 20, 100, 25);
        btn.setText("彈出通知");
        btn.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                new Popup("您的好友 xxx 上線了。").start();
            }
        });

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

彈窗執行緒 Popup.java


import org.eclipse.swt.*;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.*;

public class Popup extends Thread {
    Shell shell;
    int moveStep = 2, upPosition, downPosition, leftPosition;

    public Popup(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;
        downPosition = area.height + 100;
        leftPosition = area.width - 180;

        shell.setSize(180, 100);
        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(() -> {
                        shell.setLocation(leftPosition, downPosition - moveStep);
                        downPosition -= moveStep;
                    });
                } else {
                    Thread.sleep(5000);
                    display.asyncExec(() -> shell.dispose());
                    break;
                }
            } catch (InterruptedException e) { e.printStackTrace(); }
        }
    }
}

關鍵點

  • SWT.ON_TOP 確保彈窗置頂。
  • Display.asyncExec() 確保 UI 操作在 UI 執行緒執行。
  • 可自訂訊息、尺寸、動畫速度、停留時間。

本文來自編程入門網:原文連結

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved