鼠标控制方块

import javax.swing.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;

public class FirstSample{
    public static void main(String[] args){
        MouseFrame frame=new MouseFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class MouseFrame extends JFrame{
    public MouseFrame(){
        setTitle("Michael");
        setSize(WIDTH,HEIGHT);
       
        MousePanel panel=new MousePanel();
        add(panel);
    }
    public static final int WIDTH=800;
    public static final int HEIGHT=600;
}

class MousePanel extends JPanel{
    public MousePanel(){
        current=null;
        squares=new ArrayList<Rectangle2D>();
       
        addMouseListener(new MouseHandler());
        addMouseMotionListener(new MouseMotionHandler());
    }
   
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        Graphics2D g2=(Graphics2D) g;
       
        for(Rectangle2D r:squares)
            g2.draw(r);
    }
   
    public Rectangle2D find(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 s){
        squares.remove(s);
        repaint();
    }
   
    private static final int SIDELENGTH=30;
    private ArrayList<Rectangle2D> squares;
    private Rectangle2D current;
   
    private class MouseHandler extends MouseAdapter{
        public void mousePressed(MouseEvent event){
            current=find(event.getPoint());
            if(current==null)
                add(event.getPoint());
        }
       
        public void mouseClicked(MouseEvent event){
            current=find(event.getPoint());
            if(current!=null&&event.getClickCount()>=2)
                remove(current);
        }
    }
   
    private class MouseMotionHandler implements MouseMotionListener{
        public void mouseMoved(MouseEvent event){
            if(find(event.getPoint())==null)
                setCursor(Cursor.getDefaultCursor());
            else
                setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
        }
       
        public void mouseDragged(MouseEvent event){
            if(current!=null){
                int x=event.getX();
                int y=event.getY();
               
                current.setFrame(x-SIDELENGTH/2,y-SIDELENGTH/2,SIDELENGTH,SIDELENGTH);
                repaint();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值