用swing实现类似qq的隐藏功能

由于工作需要,要实现一个鼠标拖拽控制功能。于是在网上找寻了大量资料,碰巧遇到一个用swing实现类似qq的隐藏功能的程序,觉得有借鉴的价值,故转载记录如下。

package org.test;

import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.Timer;

public class MyFrame extends JFrame implements ActionListener {

    private Rectangle rect;
    // 窗体离屏幕左边的距离
    private int left;
    // 窗体离屏幕顶部的距离
    private int top;
    // 窗体的宽
    private int width;
    // 窗体的高
    private int height;
    // 鼠标在窗体的位置
    private Point point;

    private Timer timer = new Timer(10, this);

    public MyFrame() {
        timer.start();
    }

    public void actionPerformed(ActionEvent e) {
        left = getLocationOnScreen().x;
        top = getLocationOnScreen().y;
        width = getWidth();
        height = getHeight();
        // 获取窗体的轮廓
        rect = new Rectangle(0, 0, width, height);
        // 获取鼠标在窗体的位置
        point = getMousePosition();
        if ((top < 0) && isPtInRect(rect, point)) {
            // 当鼠标在当前窗体内,并且窗体的Top属性小于0
            // 设置窗体的Top属性为0,就是将窗口上边沿紧靠顶部
            setLocation(left, 0);
        } else if (top > -5 && top < 5 && !(isPtInRect(rect, point))) {
            // 当窗体的上边框与屏幕的顶端的距离小于5时 ,
            // 并且鼠标不再窗体上 将QQ窗体隐藏到屏幕的顶端
            setLocation(left, 5 - height);
        }
    }

    /**
     * 判断一个点是否在一个矩形内
     *
     * @param rect:Rectangle对象
     * @param point:Point对象
     * @return:如果在矩形内返回true,不在或者对象为null则返回false
     */
    public boolean isPtInRect(Rectangle rect, Point point) {
        if (rect != null && point != null) {
            int x0 = rect.x;
            int y0 = rect.y;
            int x1 = rect.width;
            int y1 = rect.height;
            int x = point.x;
            int y = point.y;

            return x >= x0 && x < x1 && y >= y0 && y < y1;
        }
        return false;
    }

    public static void main(String[] args) {
        MyFrame frame = new MyFrame();
        frame.setTitle("Test");
        frame.setSize(400, 300);
        frame.setLocation(400, 300);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

该程序实现了,向上拖拽frame,遇到边缘则隐藏的功能。

同时记录几个有用的函数:
//获取鼠标在屏幕的坐标
MouseInfo.getPointerInfo().getLocation().getX()
MouseInfo.getPointerInfo().getLocation().getY()
//获取屏幕的宽高
java.awt.Toolkit.getDefaultToolkit().getScreenSize().width
java.awt.Toolkit.getDefaultToolkit().getScreenSize().height

你可能感兴趣的:(工作,swing,qq)