单击JPanel移动未修饰的窗口

Jan*_*ski 9 java swing border panel

当该窗口未修饰时,是否有可能通过单击窗口中的一个面板来移动窗口?

我有一个带有哑光边框40像素大小的主面板,里面有几个带控件的面板,我想在点击边框时移动窗口.那可能吗?

Sor*_*ter 30

您可以使用边框面板上放置另一个面板,使边框可见.使用以下代码移动窗口.

public class MotionPanel extends JPanel{
    private Point initialClick;
    private JFrame parent;

    public MotionPanel(final JFrame parent){
    this.parent = parent;

    addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
            initialClick = e.getPoint();
            getComponentAt(initialClick);
        }
    });

    addMouseMotionListener(new MouseMotionAdapter() {
        @Override
        public void mouseDragged(MouseEvent e) {

            // get location of Window
            int thisX = parent.getLocation().x;
            int thisY = parent.getLocation().y;

            // Determine how much the mouse moved since the initial click
            int xMoved = e.getX() - initialClick.x;
            int yMoved = e.getY() - initialClick.y;

            // Move window to this position
            int X = thisX + xMoved;
            int Y = thisY + yMoved;
            parent.setLocation(X, Y);
        }
    });
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经使用这段代码了一段时间,为未修饰的窗口制作自定义标题栏.PS:您可以通过扩展JComponent而不是JPanel来概括此示例.


Pol*_*ome 1

是的,这很有可能。您需要一个 MouseListener 来侦听鼠标事件。您在鼠标按下时开始移动,在鼠标向上时停止移动。然后,您只需将窗口位置平移与鼠标在该阶段平移的量相同的量(计算旧鼠标位置和新鼠标位置之间的增量,并将其添加到帧位置)。您应该能够使用鼠标侦听器相当轻松地完成此操作。