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<Rectangle2D> squares;
private Rectangle2D current;
public MouseComponent() {
this.squares = new ArrayList<Rectangle2D>();
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));
}
}
}
相关文章
|
3月前
|
存储 Java
Java 编程实例:相加数字、计算单词数、字符串反转、元素求和、矩形面积及奇偶判断
Java中相加两个数字可通过简单赋值实现,如`int sum = x + y;`。若要用户输入数字相加,可使用`Scanner`类读取。计算单词数,可使用`split()`方法或`StringTokenizer`类。反转字符串,可用`for`循环或`StringBuilder`的`reverse()`方法。计算数组元素总和,可遍历数组累加。矩形面积通过长度乘以宽度得出。判断奇偶性,利用模2运算或位运算检查最低位。更多内容,可关注微信公众号`Let us Coding`。
60 0
|
2月前
|
设计模式 监控 安全
屏幕监控软件的设计模式:深入理解Java EE
在Java EE环境中,屏幕监控软件采用生产者-消费者设计模式,`ScreenCaptureProducer`类捕获屏幕数据并放入队列,`ScreenCaptureConsumer`负责处理和提交。数据每5分钟通过定时任务和RESTful API自动提交至网站,提升管理效率。该方案支持实时监控、数据分析和高效的数据处理。
93 2
|
2月前
|
Java
2023蓝桥杯大赛省赛Java大学B组 矩形总面积
2023蓝桥杯大赛省赛Java大学B组 矩形总面积
15 0
|
3月前
|
Java Go C++
Rust每日一练(Leetday0031) 解码方法、复原 IP 地址
Rust每日一练(Leetday0031) 解码方法、复原 IP 地址
51 0
Rust每日一练(Leetday0031) 解码方法、复原 IP 地址
|
3月前
|
Java Go C++
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
56 0
Rust每日一练(Leetday0024) 爬楼梯、简化路径、编辑距离
|
3月前
|
Go Java C++
Java每日一练(20230407) 数据流变为多个不相交区间、最小栈、柱状图中最大的矩形
Java每日一练(20230407) 数据流变为多个不相交区间、最小栈、柱状图中最大的矩形
49 0
Java每日一练(20230407) 数据流变为多个不相交区间、最小栈、柱状图中最大的矩形
|
10月前
|
算法 Java 索引
单元格法近似求解多边形最大内接矩形问题【思路讲解+java实现】
单元格法近似求解多边形最大内接矩形问题【思路讲解+java实现】
174 0
|
机器人 Java
java实现模拟鼠标键盘操作
用java写脚本,首先需要用到Robot类 ,也就是机器人类。先new一个Robot对象然后调用里面的方法 ,keyPress方法是按下键盘上的某个键,比如下面代码里面写的
|
Java C++
第十三届蓝桥杯省赛 JAVA A组 - 矩形拼接
第十三届蓝桥杯省赛 JAVA A组 - 矩形拼接
143 0
|
Java
求多边形的最小包络矩形【java实现+原理讲解】
求多边形的最小包络矩形【java实现+原理讲解】
123 0