java swing 实现窗体靠边自动伸缩隐藏
package com.test.test;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;/** * Swing靠边隐藏实例 * @author Administrator * */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();}}