java - 如何响应鼠标单击形状
问题描述
我想创建一个小功能,我:
- 用户可以选择任意数量的对象(如线、圆等)进行偏移。
- 用户将右键单击他们想要垂直偏移的对象,并提供一个可输入的字段来指定偏移距离。
- 单击#2 中的“确定”按钮后,对象将从选定对象和空间的中心开始偏移指定距离,直到所有选定对象都已放置。
我是 Swing 框架的新手,我已经学会了如何创建对象和动作侦听器。请帮助我这样做。
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import javax.swing.JComponent;
public class Line extends JComponent {
private final Point2D start, end;
public Line( Point2D start, Point2D end){
this.start = start;
this.end = end;
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("mouse clicked");
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLACK);
g2.setStroke(new BasicStroke(2.0F));
g2.draw(new Line2D.Double(start,end));
}
}
解决方案
在您通过将问题划分为较小的问题来解决问题。
您需要做的第一件事是识别鼠标在一行上的点击。
实现它的一种方法是拥有一个像这样的自定义组件:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import javax.swing.JComponent;
public class Line extends JComponent {
private final Point2D start, end;
public Line( Point2D start, Point2D end){
this.start = start;
this.end = end;
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("mouse clicked");
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLACK);
g2.setStroke(new BasicStroke(2.0F));
g2.draw(new Line2D.Double(start,end));
}
}
尝试使用它在JPanel
.
尝试画几条线并确定点击了哪条线。
之后尝试移动单击的行。
推荐阅读
- r - 将特定日期值与 R 中数据框中的列匹配
- python - sklearn.exceptions.NotFittedError:此 LabelEncoder 实例尚未安装
- python - 在 Python 中将 db 响应转换为布尔值
- python - weasyprint 不加载烧瓶图像
- android - PagedList.Config 使用recycleview在中间加载列表
- python - 如何在 python pandas 中将数据从行转换为列?
- python - 确定分组数据框中是否发生任何更改
- ansible - ansible初始化多个windows磁盘
- ruby - Ruby - 如何将值写入 csv 文件?
- c++ - 准备发布我的第一个游戏,尝试在测试环境中运行时出现错误 0xc000007b