TC官方合作论坛

 找回密码
 立即注册
查看: 1546|回复: 1

[问题] 如何用TC实现QQ那样靠近屏幕边缘自动隐藏的效果

[复制链接]
发表于 2018-8-20 10:18:42 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如何用TC实现QQ那样靠近屏幕边缘自动隐藏的效果?有没有大佬能提供一下思路,非常感谢
回复

使用道具 举报

 楼主| 发表于 2018-8-20 10:25:32 | 显示全部楼层
百度到JAVA中是这样写的,先学习一下吧
// 该程序实现了拖拽窗体遇到边缘则隐藏的功能。
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JFrame;
import javax.swing.Timer;
public class MyFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private Rectangle rect;
// 窗体离屏幕左边的距离
private int left;
// 窗体离屏幕右边的距离;
private int right;
// 屏幕的宽度;
private int screenXX;
// 窗体离屏幕顶部的距离
private int top;
// 窗体的宽
private int width;
// 窗体的高
private int height;
// 鼠标在窗体的位置
private Point point;
private Timer timer = new Timer(10, this);
private int xx, yy;
private boolean isDraging = false;
private JFrame jFrame = new JFrame();
public MyFrame() {
super();
timer.start();
jFrame.setTitle("窗体在屏幕边缘隐藏演示");
jFrame.setSize(400, 300);
jFrame.setLocation(400, 300);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setAlwaysOnTop(true);
jFrame.setUndecorated(true);
jFrame.setVisible(true);
moveFrame();
}
public void actionPerformed(ActionEvent e) {
left = jFrame.getLocation**creen().x;
top = jFrame.getLocation**creen().y;
width = jFrame.getWidth();
height = jFrame.getHeight();
screenXX = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
right = screenXX - left - width;
// 获取窗体的轮廓
rect = new Rectangle(0, 0, width, height);
// 获取鼠标在窗体的位置
point = jFrame.getMousePosition();
if (left < 0 && isPtInRect(rect, point)) {
jFrame.setLocation(0, top); // 隐藏在左边,鼠标指到后显示窗体;
} else if (left > -5 && left < 5 && !(isPtInRect(rect, point))) {
jFrame.setLocation(left - width + 1, top); // 窗体移到左边便边缘隐藏到左边;
} else if ((top < 0 && left < 0) && isPtInRect(rect, point)) {//窗体在左上角;
jFrame.setLocation(0, 0);// 窗口隐藏了,鼠标指到它,就显示出来;
} else if ((top > -5 && top < 5) && (left > -5 && left < 5)
&& !(isPtInRect(rect, point))) {
// 当窗体的上边框与屏幕的顶端的距离小于5时 ,
// 并且鼠标不再窗体上将窗体隐藏到屏幕的顶端
jFrame.setLocation(left - width + 1, 1);
} else if ((top < 0) && isPtInRect(rect, point)) {
jFrame.setLocation(left, 0);// 窗口隐藏了,鼠标指到它,就显示出来;
} else if (top > -5 && top < 5 && !(isPtInRect(rect, point))) {
// 当窗体的上边框与屏幕的顶端的距离小于5时 ,
// 并且鼠标不再窗体上将窗体隐藏到屏幕的顶端
jFrame.setLocation(left, 1 - height);
} else if (right < 0 && isPtInRect(rect, point)) {
jFrame.setLocation(screenXX - width + 1, top);// 隐藏在右边,鼠标指到后显示;
} else if (right > -5 && right < 5 && !(isPtInRect(rect, point))) {
jFrame.setLocation(screenXX - 1, top); // 窗体移到屏幕右边边缘隐藏到右边;
} else if (right < 0 && top < 0 && isPtInRect(rect, point)) {//窗体在右上角;
jFrame.setLocation(screenXX - width + 1, 0);// 隐藏在右边,鼠标指到后显示;
} else if ((right > -5 && right < 5) && (top > -5 && top < 5)
&& !(isPtInRect(rect, point))) {
jFrame.setLocation(screenXX - 1, 1); // 窗体移到屏幕右边边缘隐藏到右边;
}
}
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 void moveFrame() {
jFrame.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
isDraging = true;
xx = e.getX();
yy = e.getY();
}
public void mouseReleased(MouseEvent e) {
isDraging = false;
}
});
jFrame.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
if (isDraging) {
int left = jFrame.getLocation().x;
int top = jFrame.getLocation().y;
jFrame.setLocation(left + e.getX() - xx, top + e.getY()
- yy);
jFrame.repaint();
}
}
});
}
public static void main(String[] args) {
new MyFrame();
}
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-18 03:04 , Processed in 0.037220 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表