最近、GUI の見栄えを良くしようとしており、その一部として、独自のタイトルバー、最大化ボタン、最小化ボタンなどを実装しています。
ドラッグに問題があります。JFrame の任意の場所をクリックしてドラッグできるようにしたいと考えています。
それを処理するために mousemotionlistener を作成しようとしましたが、使用すると滑ってしまいます。ウィンドウをある場所にドラッグしようとしているのと同じように、mouseDragged への呼び出しをスキップし、代わりに mouseMoved を呼び出そうとしているようです。
これが私のコードです
public class MouseWindowDragManager implements MouseMotionListener{
private JFrame frame;
int prevPosX = -1;
int prevPosY = -1;
public MouseWindowDragManager(JFrame frame){
this.frame = frame;
}
@Override
public void mouseDragged(MouseEvent e) {
int newX = (frame.getLocation().x + (e.getXOnScreen() - prevPosX));
int newY = (frame.getLocation().y + (e.getYOnScreen() - prevPosY));
frame.setLocation(newX, newY);
prevPosX = e.getXOnScreen();
prevPosY = e.getYOnScreen();
}
@Override
public void mouseMoved(MouseEvent e) {
prevPosX = e.getXOnScreen();
prevPosY = e.getProperty("apple.awt.draggableWindowBackground", true);tYOnScreen();
}
}