import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.event.ComponentEvent; 
import java.awt.event.ComponentListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 

import javax.swing.JFrame; 

public class JFrameBug extends JFrame implements MouseListener, MouseMotionListener, ComponentListener { 

/** 
* Serial version UUID. 
*/ 
private static final long serialVersionUID = 1514585336232663488L; 


private int startX = 0; 
private int startY = 0; 
private int startMouseX = 0; 
private int startMouseY = 0; 
private int startMouseXdraw = 0; 
private int startMouseYdraw = 0;	
private boolean clicked = false; 


public JFrameBug() { 
this.setSize(400, 300); 
this.setUndecorated(true); 
this.addMouseListener(this); 
this.addMouseMotionListener(this); 
this.addComponentListener(this); 

this.setBackground(Color.WHITE); 
} 

public void paint(Graphics g) { 
super.paint(g); 
g.drawString("Drag this window!", 100, 100); 

if (clicked) { 
g.drawLine(startMouseXdraw-10, startMouseYdraw, startMouseXdraw+10, startMouseYdraw); 
g.drawLine(startMouseXdraw, startMouseYdraw-10, startMouseXdraw, startMouseYdraw+10); 
} 

} 



public static void main(String[] args) { 
JFrameBug bugtest= new JFrameBug(); 
bugtest.setVisible(true); 

} 


@Override 
public void mouseDragged(MouseEvent evt) { 
if (clicked) { 
System.out.println("Mouse dragged ("+evt.getX()+", "+evt.getY()+")"); 
int diffX = (evt.getX() + this.getX() - startMouseX); 
int diffY = (evt.getY() + this.getY() - startMouseY); 

int newX = startX + diffX; 
int newY = startY + diffY; 


System.out.println("setLocation ("+newX+", "+newY+")"); 
this.setLocation(newX, newY); 
this.repaint(); 
} 

} 


@Override 
public void mouseMoved(MouseEvent arg0) { 
// TODO Auto-generated method stub 

} 


@Override 
public void mouseClicked(MouseEvent evt) { 


} 


@Override 
public void mouseEntered(MouseEvent arg0) { 
// TODO Auto-generated method stub 

} 


@Override 
public void mouseExited(MouseEvent arg0) { 
// TODO Auto-generated method stub 

} 


@Override 
public void mousePressed(MouseEvent evt) { 
System.out.println("Mouse pressed ("+evt.getX()+", "+evt.getY()+")"); 
startX = this.getX(); 
startY = this.getY(); 
startMouseX = evt.getX() + this.getX(); 
startMouseY = evt.getY() + this.getY(); 

startMouseXdraw = evt.getX(); 
startMouseYdraw = evt.getY();	

System.out.println("Start ("+startX+", "+startY+")"); 
clicked = true; 
this.repaint(); 

} 


@Override 
public void mouseReleased(MouseEvent arg0) { 
System.out.println("Mouse released"); 
clicked = false; 
this.repaint(); 
} 

@Override 
public void componentResized(ComponentEvent e) { 
// TODO Auto-generated method stub 

} 

@Override 
public void componentMoved(ComponentEvent e) { 
// TODO Auto-generated method stub 
System.out.println("Component moved: "+this.getX()+", "+this.getY()); 
} 

@Override 
public void componentShown(ComponentEvent e) { 
// TODO Auto-generated method stub 

} 

@Override 
public void componentHidden(ComponentEvent e) { 
// TODO Auto-generated method stub 

} 




} 