模仿qq屏幕四周隐藏窗体

来源:互联网 发布:sql sever select as 编辑:程序博客网 时间:2024/05/16 14:12
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.getLocationOnScreen().x;  top = jFrame.getLocationOnScreen().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(); }}

原创粉丝点击