Java Swing实现类似QQ的停靠在桌面边缘时自动隐藏详解编程语言
2023-06-13 09:20:28 时间
public class HideFrame extends JFrame implements ActionListener{
private Rectangle rect;
private int frameLeft;// 窗体离屏幕左边的距离
private int frameRight;// 窗体离屏幕右边的距离;
private int frameTop;// 窗体离屏幕顶部的距离
private int frameWidth; // 窗体的宽
private int frameHeight; // 窗体的高
private int screenXX;// 屏幕的宽度;
private Point point; // 鼠标在窗体的位置
private Timer timer = new Timer(10, this);
private int xx, yy;
private boolean isDraging = false;
public HideFrame(){
timer.start();
setTitle("窗体在屏幕边缘隐藏演示");
setSize(400, 300);
setUndecorated(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setAlwaysOnTop(true);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
isDraging = true;
xx = e.getX();
yy = e.getY();
public void mouseReleased(MouseEvent e) {
isDraging = false;
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
if (isDraging) {
int left = getLocation().x;
int top = getLocation().y;
setLocation(left + e.getX() - xx, top + e.getY() - yy);
repaint();
});
setVisible(true);
@Override
public void actionPerformed(ActionEvent arg0) {
frameLeft = getLocationOnScreen().x;
frameTop = getLocationOnScreen().y;
frameWidth = getWidth();
frameHeight = getHeight();
screenXX = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
frameRight =screenXX- frameLeft - frameWidth;
// 获取窗体的轮廓
rect = new Rectangle(0, 0, frameWidth, frameHeight);
// 获取鼠标在窗体的位置
point =getMousePosition();
if (frameLeft 0 isPtInRect(rect, point)) {
setLocation(0, frameTop); // 隐藏在左边,鼠标指到后显示窗体;
} else if (frameLeft -5 frameLeft 5 !(isPtInRect(rect, point))) {
setLocation(frameLeft - frameWidth + 1, frameTop); // 窗体移到左边边缘隐藏到左边;
} else if ((frameTop 0 frameLeft 0) isPtInRect(rect, point)) {// 窗体在左上角;
setLocation(0, 0);// 窗口隐藏了,鼠标指到他,就显示出来;
} else if ((frameTop -5 frameTop 5) (frameLeft -5 frameLeft 5) !(isPtInRect(rect, point))) {
// 当窗体的上边框与屏幕的顶端的距离小于5时 ,
// 并且鼠标不再窗体上将窗体隐藏到屏幕的顶端
setLocation(frameLeft - frameWidth + 1, 1);
} else if ((frameTop 0) isPtInRect(rect, point)) {
setLocation(frameLeft, 0);// 窗口隐藏了,鼠标指到他,就显示出来;
} else if (frameTop -5 frameTop 5 !(isPtInRect(rect, point))) {
// 当窗体的上边框与屏幕的顶端的距离小于5时 ,
// 并且鼠标不再窗体上将窗体隐藏到屏幕的顶端
setLocation(frameLeft, 1 - frameHeight);
} else if (frameRight 0 isPtInRect(rect, point)) {
setLocation(screenXX - frameWidth + 1, frameTop);// 隐藏在右边,鼠标指到后显示;
} else if (frameRight -5 frameRight 5 !(isPtInRect(rect, point))) {
setLocation(screenXX - 1, frameTop); // 窗体移到屏幕右边边缘隐藏到右边;
} else if (frameRight 0 frameTop 0 isPtInRect(rect, point)) {// 窗体在右上角;
setLocation(screenXX - frameWidth + 1, 0);// 隐藏在右边,鼠标指到后显示;
} else if ((frameRight -5 frameRight 5) (frameTop -5 frameTop 5) !(isPtInRect(rect, point))) {
setLocation(screenXX - 1, 1); // 窗体移到屏幕右边边缘隐藏到右边;
/**
* 检测是否在矩形框内
* @param rect
* @param point
* @return
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
return false;
public static void main(String[] args){
HideFrame frame = new HideFrame();
}
10271.html
cjava相关文章
- 静态代理与动态代理_java静态代理动态代理
- java工程师_Java工程师是青春饭吗?[通俗易懂]
- java 登录 qq_Java实现QQ登录
- java出现中文乱码_JAVA中文显示乱码问题「建议收藏」
- JAVA 什么是多态?
- java messagedigest_Java 自带的加密类MessageDigest类(加密MD5和SHA)[通俗易懂]
- java山寨qq账号密码验证_java swing实现QQ账号密码输入框
- java基本数据类型 think in java_Think in Java(一):Java基础[通俗易懂]
- java交通信号灯毕业论文范文_信号灯设计论文,关于基于FPGA的交通信号灯控制系统设计相关参考文献资料-免费论文范文…[通俗易懂]
- idea创建java项目的步骤_Java为什么新建不了项目
- java基于ssm,jsp鞋城源码卖鞋服装男鞋商城女鞋商城项目源码
- java中RESTful 的实现框架详解架构师
- 一个Java实现的简单的多个客户端聊天程序详解编程语言
- Java反射机制详解编程语言
- Java中Math类的几个四舍五入方法的区别详解编程语言
- JUnit和TestNG:Java单元测试框架
- javaNeo4j中的Java查询实现(neo4j查询and)
- 部署Java开发下的Linux部署(java开发linux)
- Java Reference核心原理分析
- 如何保存/恢复Java应用程序核心内存数据现场?
- 轻松安装,畅享音乐——QQ音乐Linux版上线!(qq音乐linux版)
- Linux下Java命令:简介与基本用法(linux下java命令)
- 惊艳科技:Linux Web QQ系统的运行(linux web qq)
- 从Java到Oracle轻松操作数据库(java写oracle库)