`
bit6211
  • 浏览: 74313 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
由于工作需要,要实现一个鼠标拖拽控制功能。于是在网上找寻了大量资料,碰巧遇到一个用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
分享到:
评论
2 楼 bit6211 2010-08-25  
ActionLinster中监听,而是应该在ComponentAdapter
youjianbo_han_87 写道
有个小bug,当窗体在窗口顶端,鼠标在窗体顶端,窗体会剧烈闪动。

感觉不能再 ActionLinster中监听,而是应该在ComponentAdapter中监控。

呵呵,是有这个bug。
1 楼 youjianbo_han_87 2010-08-06  
有个小bug,当窗体在窗口顶端,鼠标在窗体顶端,窗体会剧烈闪动。

感觉不能再 ActionLinster中监听,而是应该在ComponentAdapter中监控。

相关推荐

    java Swing实现的仿qq

    在"java Swing实现的仿qq"项目中,我们将会探讨如何使用Swing来构建一个类似于腾讯QQ的客户端应用。 首先,我们需要理解Swing中的基本组件和布局管理器。例如,JFrame是窗口的基础,JLabel用于显示文本或图标,...

    swing 模仿QQ登录界面

    Swing是中国腾讯公司旗下即时通讯软件QQ的桌面客户端框架,它是Java AWT(Abstract Window Toolkit)的扩展,提供了丰富的组件和图形用户界面(GUI)工具,使得开发者可以创建出美观且功能丰富的应用程序。...

    swt 类似QQ分组的功能

    一个实现类似QQ分组的功能,可以通过事件的调用来实现控件的隐藏和显示

    实现类似与qq的自动停靠窗口隐藏

    总的来说,实现类似QQ的自动停靠窗口隐藏功能涉及了多个编程和设计方面,包括事件处理、布局管理、用户交互设计、动画效果以及跨平台兼容性。通过熟练掌握这些知识点,开发者可以创建出具有高级UI特性的应用,提高...

    javaSwingQQ登录界面

    下面将详细介绍Swing库以及如何利用它来实现类似QQ登录界面的设计。 Swing提供了丰富的组件(JComponents),如按钮(JButton)、文本框(JTextField)、密码框(JPasswordField)等,这些都是构建用户界面的基础...

    java仿QQ隐藏窗体

    在Java编程语言中,开发一个可以仿照QQ的隐藏窗体功能是一项有趣且实用的挑战。这个功能使得用户能够将应用程序窗口轻松地隐藏到屏幕边缘,以节省桌面空间或者在不使用时保持整洁的视觉效果。以下是实现这一功能的...

    能贴边隐藏的窗体,类似QQ

    能自动贴边隐藏的窗体实现代码,公有4个类, 主窗体类: AutoHiddenFrame 移动窗体使用的工具类: WindowMover 监听窗体移动的类:WindowLocationListener 监听鼠标进入及离开窗体的类:WindowMouseListener

    QQ一样的弹出窗体,超简单简单

    在本资源中,作者提供了一个简易实现QQ弹出窗体的方法,旨在帮助开发者快速创建类似的效果。接下来,我们将详细讨论如何实现这样的功能以及相关的编程知识点。 首先,我们需要理解“弹出窗体”(Popup Window)的...

    panel面板的隐藏与收缩

    4. **类似QQ风格**:QQ面板的隐藏通常伴随着一个可展开/折叠的图标,用户点击后,面板会以某种动画效果收缩或展开。这种效果可以通过自定义控件或使用第三方库来实现。例如,可以创建一个按钮,监听其点击事件,然后...

    2015QQ登陆界面源代码

    根据提供的信息,我们可以深入分析这段Java代码,它用于创建一个类似于2015年版本的QQ登录界面的应用程序。此程序使用了Swing组件库来构建GUI(图形用户界面),并涉及到了Java AWT(Abstract Window Toolkit)的...

    圣诞倒计时小软件_实现系统托盘背景透明依附边沿自动隐藏

    依附边沿自动隐藏的特性类似于QQ的消息框,通过检测窗口边缘的鼠标事件来实现。当窗口靠近屏幕边缘时,会自动收起隐藏,鼠标移开后再次展开。 在代码中,`snowX`和`snowY`数组存储了雪花的初始位置,`count`变量...

    java系统托盘实现缩小在开始菜单右下角的功能

    为了实现类似QQ的下拉菜单,你需要创建`PopupMenu`对象,然后添加`MenuItem`。每个`MenuItem`可以关联一个`ActionListener`,用于响应用户的点击事件。 7. **事件监听**: 通过`TrayIcon`的`addMouseListener()`...

    可自动停靠隐藏的对话框.zip_对话框 尺寸_隐藏 对话框

    在IT领域,尤其是在软件开发中,对话框是用户界面(UI)设计中不可或缺的一...而“www.pudn.com.txt”和“类似QQ可以自动停靠隐藏的对话框”可能包含了相关的代码示例或教程,可以帮助开发者深入理解和实现这类功能。

    QQ自动伸缩窗体

    QQ自动伸缩窗体是一种在编程领域中实现的特殊效果,常见于桌面应用程序设计,特别是聊天软件如QQ等。这种窗体可以根据用户的操作或者屏幕尺寸的变化自动调整自身的大小和形状,提供良好的用户界面体验。在本文中,...

    qq项目第一天(java JFrame 标题栏 最小化 最大化 拖动窗体)

    本项目"qq项目第一天"显然旨在实现一个类似于QQ的聊天客户端,而涉及到的关键技术点包括设置`JFrame`的标题栏、实现窗口的最小化和最大化功能以及允许用户拖动窗体。下面我们将详细讨论这些知识点。 1. **JFrame的...

    java图形界面之 山寨QQ登陆界面

    本主题将深入探讨如何使用Java实现一个类似于QQ登录界面的程序。QQ是一款在中国非常流行的即时通讯软件,它的登录界面简洁而直观,是学习Java GUI设计的一个良好示例。 首先,我们需要引入Java Swing库,它是Java...

    java实现桌面右下角弹窗效果

    本文主要介绍了如何使用Java实现桌面右下角弹窗效果,类似于QQ消息弹窗。该弹窗效果可以应用于各种桌面应用程序中,提供给用户重要信息或提示。 首先,需要了解Java中的Swing库,它提供了许多GUI组件,包括JPanel、...

    Java目录树控件

    JavaFX提供了更现代的UI和更好的性能,但基本的思路和Swing类似。 8. **文档阅读**: 提供的`java实现系统目录树控件.txt`文档很可能是项目实现的详细步骤或者代码示例,建议详细阅读,以便理解具体实现细节。 ...

    Java界面开发学习笔记.doc

    除了Swing和SWT的基本使用,笔记还涵盖了其他高级特性,如实现拖拽效果、QQ窗口自动隐藏、自定义控件库、欢迎界面制作、OutlookBar的使用、声效的添加、滚动字幕效果、居中和全屏显示、面板动态增删以及利用布局管理...

    java中echarts图形组件

    ECharts 是一个基于 JavaScript 的数据可视化库,广泛应用于 Web 应用中,尤其在 Java 开发的后端服务配合下,能实现丰富的前端图表展示。它由百度开发并开源,支持多种图表类型,如柱状图、折线图、饼图、散点图等...

Global site tag (gtag.js) - Google Analytics