java拖动JPanel
我在尝试拖动JPanel时遇到问题。如果我纯粹在MouseDragged中实现它,则如下所示:
public void mouseDragged(MouseEvent me) {
me.getSource().setLocation(me.getX(), me.getY());
}
我得到一个奇怪的效果,移动的对象一直在两个位置之间反弹(生成更多的“拖动”事件)。如果我按照this post中描述的方式进行操作,但是:
public void mouseDragged(MouseEvent me) {
if (draggedElement == null)
return;
me.translatePoint(this.draggedXAdjust, this.draggedYAdjust);
draggedElement.setLocation(me.getX(), me.getY());
}
我得到的元素弹跳效果要小得多,但它仍然可见,并且元素的移动方式仅为鼠标指针的½。为什么会发生这种情况/我如何解决这种情况
# 1 楼答案
嗯。老问题,但如果有人遇到像我这样的问题,这可以相对简单地解决。在
JFrame
中拖动JPanel
时,我执行了以下操作:关键是使用
.getLocationOnScreen()
并在每次调用mouseDragged
结束时更新调整# 2 楼答案
我不知道你是否可以用鼠标标记的事件来完成。在过去,我使用mousePressed保存原始点,并拖动鼠标以获取当前点。在这两种情况下,我将点转换到屏幕上的位置。然后,两个点之间的差异很容易计算,并且可以适当地设置位置
我的通用类是Component Mover类
# 3 楼答案
试试这个
并添加此方法: