概述
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怎么实现窗体隐藏,Java swing开发|Java实现窗体隐藏的全部内容,希望文章能够帮你解决java怎么实现窗体隐藏,Java swing开发|Java实现窗体隐藏所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复