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;
}
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;
}
super.paintComponent(g);//加上这句.你要做的不是接管JPanel的工作,而是增量绘制
Graphics2D g2 = (Graphics2D) g;
for (Rectangle2D r : rect) {
g2.draw(r); }
}