窗口移动后的setLocation

时间:2013-03-05 14:09:07

标签: java drag-and-drop mouseevent mousemove

我制作了一个拖放算法,让组件在窗口内拖动。

它表现良好,直到我移动框架窗口......

如果我移动窗口,那么当我点击它并拖动它时,组件的位置会从等于我移动框架的距离的距离移开。

任何人都知道为什么?

代码示例:

public void mousePressed(final MouseEvent e) {

    if(SwingUtilities.isLeftMouseButton(e)) {

        origin = panel.getLocationOnScreen();

        panel.setLocation(origin.x, origin.y-panel.getHeight()/2);

        view.add(panel, JLayeredPane.DRAG_LAYER);
    }

}

public void mouseDragged(MouseEvent e) {

   if(SwingUtilities.isLeftMouseButton(e)) {

       panel.setLocation(e.getLocationOnScreen().x - panel.getWidth()/2, e.getLocationOnScreen().y - panel.getHeight()/2);

   }

}

1 个答案:

答案 0 :(得分:0)

假设鼠标事件是由应该拖动面板的容器引发的,那么你应该只使用相对坐标。

即,使用

public void mouseDragged(MouseEvent e) {
   if(SwingUtilities.isLeftMouseButton(e)) {
      panel.setLocation(e.getPoint().x - panel.getWidth()/2, e.getPoint().y - panel.getHeight()/2);
   }
}