java 鼠标拖动矩形_JAVA鼠标屏幕绘制拖拽删除矩形

import java.awt.Cursor;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Point;

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.awt.geom.Rectangle2D.Double;

import java.util.ArrayList;

import javax.swing.JComponent;

public class MouseComponent extends JComponent {

private static final int SIDELENGTH = 10;

private ArrayList squares;

private Rectangle2D current;

public MouseComponent() {

this.squares = new ArrayList();

this.current = null;

this.addMouseListener(new MouseHandle());//监听鼠标点击事件

this.addMouseMotionListener(new MouseMotionHandler());//监听鼠标移动事件

}

//如果鼠标单击屏幕的地方有矩形则不绘制矩形

public Rectangle2D find(Point2D p) {

for (Rectangle2D r : squares) {

if (r.contains(p))

return r;

}

return null;

}

//绘制矩形

public void paintComponent(Graphics g) {

Graphics2D g2 = (Graphics2D) g;

for (Rectangle2D r : squares) {

g2.draw(r);

}

}

//添加矩形到屏幕

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) {

if (s == null)

return;

if (s == current)

current = null;

squares.remove(s);

repaint();

}

private class MouseHandle extends MouseAdapter {

@Override

public void mouseClicked(MouseEvent e) {

current = find(e.getPoint());

//当前位置如果有矩形,且点击大于2次,则删除矩形

if (current != null && e.getClickCount() >= 2)

remove(current);

}

@Override

public void mousePressed(MouseEvent e) {

current = find(e.getPoint());

//当前位置没有矩形则绘制

if (current == null)

add(e.getPoint());

}

}

private class MouseMotionHandler implements MouseMotionListener {

@Override

public void mouseDragged(MouseEvent e) {

//如果当前位置有矩形,进行拖拽。

if (current != null) {

int x = e.getX();

int y = e.getY();

current.setFrame(x - SIDELENGTH / 2, y - SIDELENGTH / 2,

SIDELENGTH, SIDELENGTH);

repaint();

}

}

@Override

public void mouseMoved(MouseEvent e) {

//鼠标在空白屏幕默认箭头

if(find(e.getPoint())==null)setCursor(Cursor.getDefaultCursor());

//碰到矩形区域区域变成十字架

else setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

}

}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值