Java swing开发|Java实现窗体隐藏
2012-12-15 00:05
375 查看
// 先声明都是转载的
import java.awt.Point; import java.awt.Rectangle;import java.awt.*; import java.awt.event.*; import javax.swing.*; public class WindowSnapper extends ComponentAdapter { private boolean locked = false; private int snap_distance = 50; @Override public void componentMoved(ComponentEvent evt) { if (locked) { return; } Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); int nx = evt.getComponent().getX(); int ny = evt.getComponent().getY(); // top if (ny < 0 + snap_distance) { ny = 0; } // left if (nx < 0 + snap_distance) { nx = 0; } // right if (nx > size.getWidth() - evt.getComponent().getWidth() - snap_distance) { nx = (int) size.getWidth() - evt.getComponent().getWidth(); } // bottom if (ny > size.getHeight() - evt.getComponent().getHeight() - snap_distance) { ny = (int) size.getHeight() - evt.getComponent().getHeight(); } // make sure we don't get into a recursive loop when the // set location generates more events locked = true; evt.getComponent().setLocation(nx, ny); locked = false; } public static void main(String[] args) { JFrame frame = new JFrame("Hack #33: Window Snapping"); JLabel label = new JLabel("Move this window's titlebar to demonstrate screen edge snapping."); frame.getContentPane().add(label); frame.pack(); frame.addComponentListener(new WindowSnapper()); frame.setVisible(true); } }
// 这是另外一个人的
// 该程序实现了,拖拽frame,遇到边缘则隐藏的功能。 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(); } @Override 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() { @Override public void mousePressed(MouseEvent e) { isDraging = true; xx = e.getX(); yy = e.getY(); } @Override public void mouseReleased(MouseEvent e) { isDraging = false; } }); jFrame.addMouseMotionListener(new MouseMotionAdapter() { @Override 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) { MyFrame myFrame = new MyFrame(); } }
相关文章推荐
- 利用 Java Swing 实现游戏开发
- Java实现窗体隐藏,功能类似于QQ窗口自动隐藏
- Java swing实现简单计算器的开发
- java实现捕鱼达人游戏之Java swing图形界面开发游戏项目捕鱼达人源码及实现方式详解
- 度量快速开发平台:网格部件焦点行数据实现窗体功能的显示与隐藏控制
- Java Swing实现让窗体居中显示的方法示例
- Java实现把窗体隐藏到系统托盘方法
- java在线聊天项目0.1版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包)
- java在线聊天项目0.2版本 制作客户端窗体,使用swing(用户界面开发工具包)和awt(抽象窗口工具包) BorderLayout布局与GridLayout布局不同之处 JPanel设置大小
- 度量快速开发平台:网格部件焦点行数据实现窗体功能的显示与隐藏控制
- 利用Java Swing 实现游戏开发
- java swing开发的图像生成器demo实例源代码下载,实现绘制图像,截屏功能。
- java实现潜艇大战游戏之Java swing图形界面开发游戏项目潜艇大战源码及实现方式详解
- Java Swing实现窗体添加背景图片的2种方法详解
- 利用Java Swing 实现游戏开发-Java基础-Java-编程开发
- java实现愤怒的小鸟游戏之Java swing图形界面开发游戏项目愤怒的小鸟源码及实现方式详解
- JAVA程序员基本功:开发实现类隐藏及应用
- Java秘史:隐藏在SWT/Swing背后的故事-Java基础-Java-编程开发
- Java实现窗体隐藏
- 利用Java Swing 实现游戏开发