JFC系列3之添加窗体内拖动

简介:   在swing编程中,要拖动一个JFrame,是要在窗体标题那里按住鼠标才可以拖动它的。但有时,我们需要鼠标在窗体里面就能够拖动这个窗体,就像QQ的聊天窗口一样。另一方面,我们可能会对一个JFrame去掉窗体修饰(调用setUndecorated(true)方法),这时候貌似就不能拖动窗体了。

  在swing编程中,要拖动一个JFrame,是要在窗体标题那里按住鼠标才可以拖动它的。但有时,我们需要鼠标在窗体里面就能够拖动这个窗体,就像QQ的聊天窗口一样。另一方面,我们可能会对一个JFrame去掉窗体修饰(调用setUndecorated(true)方法),这时候貌似就不能拖动窗体了。

  添加窗体拖动的思路很简单,给它添加一个鼠标监听器。重写MouseAdapter的几个方法。一个是mousePressed,表示鼠标按下,在此获取鼠标按下时的坐标;一个是mouseDragged,表示鼠标拖动,在此获取此时鼠标和窗体的坐标,并计算出窗体应该出现的坐标并调用其setLocation方法。我已经将其封装,代码实现如下:

/** * 对指定 JFrame 对象添加拖动监听器。 * * @param frame JFrame对象 */ public static void addMouseDraggedActionListener(final JFrame frame) { final Point origin = new Point(); frame.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { origin.x = e.getX(); //当鼠标按下的时候获得窗口当前的位置 origin.y = e.getY(); } }); frame.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { Point p = frame.getLocation(); //窗口当前的位置 + 鼠标当前在窗口的位置 - 鼠标按下的时候在窗口的位置 frame.setLocation(p.x + e.getX() - origin.x, p.y + e.getY() - origin.y); } }); }

 

  上面代码已被收录在我的diaoxianSoft中的easyJFC包中。此包暂未完善,亦未做正规测试,不知其有多大通用性,仅作为我个人的私有包,在自己写代码中使用。

  JFC系列将分享一些常见但又让我们这些新手头疼的问题的解决方法,希望大家继续关注,也希望大家一起分享自己的成果。

目录
相关文章
|
4月前
ThreeJs的场景实现鼠标拖动旋转控制
这篇文章介绍了如何在Three.js中实现通过鼠标拖动来旋转场景中的模型,并提供了实现这一功能的代码示例。
184 0
|
9月前
滑动工具条
滑动工具条
65 0
|
9月前
鼠标不同方位移入特效
鼠标不同方位移入特效
|
前端开发 JavaScript 计算机视觉
css动画:文字向上移动并逐渐消失 点击按钮显示+1上移淡出
css动画:文字向上移动并逐渐消失 点击按钮显示+1上移淡出
1157 0
css动画:文字向上移动并逐渐消失 点击按钮显示+1上移淡出
|
前端开发
鼠标经过时反转遮罩层
当鼠标移入指定的元素时,图片会旋转到遮罩层,然后显示相关介绍内容。
127 0
鼠标经过时反转遮罩层
|
前端开发
html+css鼠标经过的样式变化例题
当用户移动鼠标到指定的区域或内容时,会出现什么不一样的渲染效果呢?看这篇文章一起来了解吧!
157 0
 html+css鼠标经过的样式变化例题
|
Java
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
506 0
swing中一些常见的鼠标事件(鼠标形状的改变、鼠标接近、按下(图标的切换)、鼠标接近、离开(字体颜色的改变)、鼠标拖拽等)还有系统托盘+对话框
|
机器学习/深度学习 算法
第四周:循环
所谓循环,就是多次重复执行某些类似的操作,这个操作一般不是完全一样的操作,而是类似的操作。都有哪些操作呢?通过阅读这篇文章来体会一下吧
99 0