JFrame 拖动监听器?

JFrame drag listener?

我正在寻找某种 WindowMotionListener 或类似的东西,所以当我通过标题栏(或其他方式)拖动 window 时,我可以像使用 MouseMotionListener 一样获取位置信息.我正在尝试制作一个工作方式类似于 MFC 的 Swing 组件,您可以在其中将 window 拖到某个位置并将其卡入其中(例如:https://imgur.com/LWSXv9x).

到目前为止,当用户通过框架的内容拖动框架时,我已经了解了捕捉和拖动,但不是通过标题栏,这对最终用户来说会容易得多。有什么办法可以得到某种 window 拖动事件吗?我是否必须制作自己的 windows 装饰品并为它们添加“拖拽”?

如有任何帮助,我们将不胜感激

I want to get events when the window is moved. ... my main issue is that there is no way to determine if a user is dragging a jframe around

嗯,JFrame 上的 ComponentListener 怎么样?...

import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class Main {
    
    private static void createAndShowGUI() {
        final JFrame frame = new JFrame("Drag frame");
        
        frame.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentMoved(final ComponentEvent e) {
                System.out.println("New frame location: " + frame.getLocation());
            }

            @Override
            public void componentResized(final ComponentEvent e) {
                System.out.println("New frame size: " + frame.getSize());
            }
        });
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new JLabel("Drag the title bar and see the logs..."));
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
    
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(Main::createAndShowGUI);
    }
}