0

コンポーネントをウィンドウ内にドラッグできるように、ドラッグアンドドロップアルゴリズムを作成しました。

フレームウィンドウを移動するまでは、うまく機能します...

ウィンドウを移動すると、コンポーネントの位置は、フレームをクリックしてドラッグしたときにフレームを移動した距離に等しい距離からシフトします。

誰もが理由を知っていますか?

コードサンプル:

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

   }

}
4

1 に答える 1

0

パネルがドラッグされるコンテナによってマウスイベントが発生すると仮定すると、相対座標のみを使用する必要があります。

つまり、

public void mouseDragged(MouseEvent e) {
   if(SwingUtilities.isLeftMouseButton(e)) {
      panel.setLocation(e.getPoint().x - panel.getWidth()/2, e.getPoint().y - panel.getHeight()/2);
   }
}
于 2013-03-05T14:55:35.197 に答える