Mega Code Archive

 
Categories / Java Tutorial / Swing
 

Drag and move a frame from its content area

import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JPanel; public class Main extends JPanel {   public void paintComponent(Graphics g) {     g.setColor(Color.black);     g.fillRect(0, 0, getWidth(), getHeight());   }   public static void main(String[] args) {     JFrame frame = new JFrame();     frame.setPreferredSize(new Dimension(300, 280));     Main ch = new Main();     frame.getContentPane().add(ch);     frame.setUndecorated(true);     MoveMouseListener mml = new MoveMouseListener(ch);     ch.addMouseListener(mml);     ch.addMouseMotionListener(mml);     frame.pack();     frame.setVisible(true);   } } class MoveMouseListener implements MouseListener, MouseMotionListener {   JComponent target;   Point start_drag;   Point start_loc;   public MoveMouseListener(JComponent target) {     this.target = target;   }   public static JFrame getFrame(Container target) {     if (target instanceof JFrame) {       return (JFrame) target;     }     return getFrame(target.getParent());   }   Point getScreenLocation(MouseEvent e) {     Point cursor = e.getPoint();     Point target_location = this.target.getLocationOnScreen();     return new Point((int) (target_location.getX() + cursor.getX()),         (int) (target_location.getY() + cursor.getY()));   }   public void mouseClicked(MouseEvent e) {   }   public void mouseEntered(MouseEvent e) {   }   public void mouseExited(MouseEvent e) {   }   public void mousePressed(MouseEvent e) {     this.start_drag = this.getScreenLocation(e);     this.start_loc = this.getFrame(this.target).getLocation();   }   public void mouseReleased(MouseEvent e) {   }   public void mouseDragged(MouseEvent e) {     Point current = this.getScreenLocation(e);     Point offset = new Point((int) current.getX() - (int) start_drag.getX(),         (int) current.getY() - (int) start_drag.getY());     JFrame frame = this.getFrame(target);     Point new_location = new Point(         (int) (this.start_loc.getX() + offset.getX()), (int) (this.start_loc             .getY() + offset.getY()));     frame.setLocation(new_location);   }   public void mouseMoved(MouseEvent e) {   } }