2013-03-05 110 views
0

我做了一个drag'n'drop算法,让组件拖到窗口内。setLocation移动后的窗口

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

如果我移动窗口,该部件的位置,然后从等于I移动的帧当我点击的距离的距离偏移它,当我拖动它。

任何人都知道为什么?

代码示例:

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); 

    } 

} 
+0

我预计'e.getLocationOnScreen()'给全局坐标,而'panel.setLocation(...)'使用相对坐标。但这并不能解释它为什么在第一个地方工作... – 2013-03-05 14:15:11

+0

@Heuster,你会知道如何将setLocation转换为全局坐标? – 2013-03-05 14:34:44

回答

0

假设鼠标事件是由在其中面板应该被拖动,则应该只使用相对坐标的容器上升。

也就是说,使用

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