鼠标点击画图

来源:互联网 发布:网络组策略如何打开 编辑:程序博客网 时间:2024/04/30 17:55
package demo.event.swing;


import java.awt.Dimension;
import java.awt.Toolkit;


import javax.swing.JFrame;


public class SupperJFarme  extends JFrame{
public SupperJFarme() {
Dimension dim=Toolkit.getDefaultToolkit().getScreenSize();
this.setVisible(true);
this.setBounds((dim.width-500)/2, (dim.height-500)/2, 500, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}




package demo.event.swing;


import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;


import javax.swing.JPanel;






public class MouseTest {
public static void main(String[] args) {
new MouseJFrame();
}
}
class MouseJFrame extends SupperJFarme{
public MouseJFrame() {
super();
this.setTitle("鼠标点击绘图");
this.add(new MousePanel());
}
}
class MousePanel extends JPanel{
private ArrayList<Rectangle2D> squares;
private Rectangle2D current;
private static final  int SIDELENGTH=10;
public MousePanel() {
squares=new ArrayList<Rectangle2D>();
current=null;
this.addMouseListener(new MouseHandler());
this.addMouseMotionListener(new MouseMotionHandler());
}
//绘图
@Override
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
Graphics2D g2d=(Graphics2D) g;
for (Rectangle2D r : squares) {
g2d.draw(r);
}
}

public Rectangle2D finds(Point2D p){
for (Rectangle2D r : squares) {
if(r.contains(p))
return r;

}
return null;
}
//添加方形
public void add(Point2D p){
double x= p.getX();
double y=p.getY();
current=new Rectangle2D.Double(x-SIDELENGTH/2, y-SIDELENGTH/2, SIDELENGTH, SIDELENGTH);
squares.add(current);
repaint();
}
//移除方形
public void remove(Rectangle2D r){
if(r==null)
return;
if(r==current) 
current=null;
squares.remove(r);
repaint();
}
//鼠标事件监听
private class MouseHandler extends MouseAdapter{
//鼠标按下事件
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
super.mousePressed(e);
//查找当前鼠标点击的区域是否存在方形
current=finds(e.getPoint());
//如果不存在就添加
if(current==null)
add(e.getPoint());
}
//鼠标点击事件
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
super.mouseClicked(e);
current=finds(e.getPoint());
//如果点击方形存在,以及是双击事件,就移除
if(current!=null && e.getClickCount()>=2)
remove(current);
}
}
//鼠标移动和拖动事件
private class MouseMotionHandler implements MouseMotionListener{


//鼠标拖动时间
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
if(current!=null){
double x=e.getX();
double y=e.getY();
current.setFrame(x-SIDELENGTH/2,y-SIDELENGTH/2,SIDELENGTH,SIDELENGTH);
repaint();
}
}


//鼠标移动事件
public void mouseMoved(MouseEvent e) {
  if(finds(e.getPoint())==null)
  setCursor(Cursor.getDefaultCursor());
  else
  setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

}

}
}