我制作了一个拖放算法,让组件在窗口内拖动。
它表现良好,直到我移动框架窗口......
如果我移动窗口,那么当我点击它并拖动它时,组件的位置会从等于我移动框架的距离的距离移开。
任何人都知道为什么?
代码示例:
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 :(得分:0)
假设鼠标事件是由应该拖动面板的容器引发的,那么你应该只使用相对坐标。
即,使用
public void mouseDragged(MouseEvent e) {
if(SwingUtilities.isLeftMouseButton(e)) {
panel.setLocation(e.getPoint().x - panel.getWidth()/2, e.getPoint().y - panel.getHeight()/2);
}
}