package com.griphics.java;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.KeyboardFocusManager;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;import javax.swing.JFrame;
import javax.swing.JPanel;
public class MouseTest { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
       new MoFrame();
       KeyboardFocusManager kb=KeyboardFocusManager.getCurrentKeyboardFocusManager();
       System.out.println(kb.getFocusedWindow().toString());
       
}}
 class MoFrame extends JFrame{

public MoFrame(){
Toolkit tk=Toolkit.getDefaultToolkit();
Dimension d=tk.getScreenSize();
this.setLocation((int)(d.getWidth()-450)/2,(int)(d.getHeight()-450)/2);
this.setSize(450,450);
this.add(new MoPanel());
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}



}
 class MoPanel extends JPanel{

    public MoPanel(){
     this.rect=new ArrayList<Rectangle2D>();
     this.addMouseListener(new MouseHander());
     this.addMouseMotionListener(new MouseMoHander());
     this.DE_HE=10;
     this.DE_WI=10;
     this.setFocusable(true);     
    }
    public Rectangle2D find(Point2D p){
     for (int i = 0; i < rect.size(); i++)
        {
           Rectangle2D r = (Rectangle2D)rect.get(i);
           if (r.contains(p)) return r;
        }         return null;
   }  
public void add(Rectangle2D r)
  {

this.rect.add(r);
  }
public void remove(Rectangle2D r)
   {
       
       this.rect.remove((Rectangle2D)r);
     
   repaint();   }
 class MouseHander extends  MouseAdapter{ @Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
current=find(e.getPoint());
if(current!=null && e.getClickCount()>=2)
remove(current);



      
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
current=new Rectangle2D.Double(e.getX()-(DE_WI-2),e.getY()-(DE_HE-2),DE_WI,DE_HE);
if(find(e.getPoint())==null)
add(current);
repaint();

//System.out.print("OK");
}  
 
 }
 class MouseMoHander implements MouseMotionListener{
 public void mouseDragged(MouseEvent e) {
 
// TODO Auto-generated method stub

} @Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
current=find(e.getPoint());
if(current==null)
setCursor(Cursor.getDefaultCursor());

else
    
setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); }
 }
 public void paintComponent(Graphics g)
 {
 Graphics2D g2=(Graphics2D)g;
 
 for (Rectangle2D r:rect)
 { g2.draw(r);
            
 }
 }
private Rectangle2D current;  
private ArrayList<Rectangle2D>rect ;
private int DE_WI;
private int DE_HE;
 }