我给窗体设了this.setUndecorated(true)这个属性去了边框后窗体就没办法拖动了,有没有什么方法可以使鼠标点窗体内部也能随意拖动窗体呢?

解决方案 »

  1.   

    import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import javax.swing.UIManager;public class Test extends JFrame implements MouseListener, MouseMotionListener {
    private static final long serialVersionUID = -7376696426025549528L; private JPanel pane = null;

    private int mouseX = 0, mouseY = 0; public Test() {
    super();
    this.setUndecorated(true);
    this.lookAndFeel();
    this.addMouseListener(this);
    this.addMouseMotionListener(this);
    JButton button = new JButton("关闭窗口");
    button.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
    System.exit(0);
    }});
    pane = new JPanel();
    pane.setLayout(new FlowLayout());
    pane.add(button);
    this.getContentPane().add(pane);
    this.setSize(300, 200);
    this.setLocationRelativeTo(null);
    this.setVisible(true);

    } public static void main(String[] arg) {
    new Test();
    }

    private void lookAndFeel() {
    try {
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
    e.printStackTrace();
    }
    } public void mouseClicked(MouseEvent e) {
    } public void mousePressed(MouseEvent e) {
    mouseX = e.getX();
    mouseY = e.getY();
    } public void mouseReleased(MouseEvent e) {
    } public void mouseEntered(MouseEvent e) {
    } public void mouseExited(MouseEvent e) {
    } public void mouseDragged(MouseEvent e) {
    if (e.getModifiers() == MouseEvent.BUTTON1_MASK) {
    this.setLocation(this.getX() + e.getX() - mouseX, this.getY() + e.getY() - mouseY);
    }
    } public void mouseMoved(MouseEvent e) {
    }}
      

  2.   

    将该窗体implements  DragSource等接口, 把窗体作为一个可拖动的对象,然后获取光标move的位置,相应的把窗体的location设置一下。没办法,就只有这么麻烦,去了边框还要保留拖动真的是比较怪异的需求。