怎么使JWindow随着鼠标移动

 

写了一个继承JFrame的类,设置了this.setUndecorated(true);

出现了像Jwindow的样式,但是当添加了鼠标事件后,

编程后窗体无法随鼠标移动,请大家帮忙解决!谢谢

可以自己做个类似 窗口外框的东西。 给个例子:
[code="java"]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

import prx.swing.widgets.PWindowDragger;

public class PFrame extends JFrame {

/**
 * 
 */
private static final long serialVersionUID = 2685642063387323018L;

public PFrame() {
    this.setUndecorated(true);

    JPanel top = new JPanel();
    top.setBackground(Color.LIGHT_GRAY);
    top.setLayout(new BorderLayout());

    JLabel moveLabel = new JLabel("鼠标拖动区域", SwingConstants.CENTER);
    top.add(moveLabel, BorderLayout.CENTER);

    JButton closeButton = new JButton("关闭");
    closeButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            PFrame.this.dispose();
        }
    });

    top.add(closeButton, BorderLayout.EAST);

    new PWindowDragger(this, top);

    this.getContentPane().add(top, BorderLayout.NORTH);
}

public static void main(String[] args) {
    PFrame frame = new PFrame();
    frame.setSize(300, 300);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

}
[/code]

[code="java"]
package prx.swing.widgets;

import javax.swing.SwingUtilities;
import java.awt.Component;
import java.awt.Point;
import java.awt.Window;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;

/**

  • 可以让指定的Component通过鼠标拖动来移动Window的便利类
  • @author pengranxiang
    */
    public class PWindowDragger {

    private Window fWindow;

    private Component fComponent;

    private int dX;

    private int dY;

    /**

    • 让指定的Component通过鼠标拖动来移动Window
    • @param window
    • @param component
      */
      public PWindowDragger(Window window, Component component) {

      fWindow = window;
      fComponent = component;

      fComponent.addMouseListener(createMouseListener());
      fComponent.addMouseMotionListener(createMouseMotionListener());
      }

    private MouseListener createMouseListener() {
    return new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
    Point clickPoint = new Point(e.getPoint());
    SwingUtilities.convertPointToScreen(clickPoint, fComponent);

            dX = clickPoint.x - fWindow.getX();
            dY = clickPoint.y - fWindow.getY();
        }
    };
    

    }

    private MouseMotionAdapter createMouseMotionListener() {
    return new MouseMotionAdapter() {
    @Override
    public void mouseDragged(MouseEvent e) {
    Point dragPoint = new Point(e.getPoint());
    SwingUtilities.convertPointToScreen(dragPoint, fComponent);

            fWindow.setLocation(dragPoint.x - dX, dragPoint.y - dY);
        }
    };
    

    }

}
[/code]