java swing 实现窗体靠边自动伸缩隐藏_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java swing 实现窗体靠边自动伸缩隐藏

java swing 实现窗体靠边自动伸缩隐藏

 2013/7/25 12:43:13  fangguanhong  程序员俱乐部  我要评论(1)
  • 摘要:packagecom.test.test;importjava.awt.Point;importjava.awt.Rectangle;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.awt.event.MouseMotionAdapter
  • 标签:实现 Java Swing
class="java">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();

	}
}
    网友 2015/3/22 20:45:50 发表

    没有隐藏

发表评论
用户名: 匿名