怎么让矩形顺着我画的线溜下来,鼠标按下,拖动画线,松开鼠标后,产生一矩形,顺着线段跑一圈,以下为我的代码,但是有点问题,看不到跑的过程,只是在线的末尾添加了一矩形.
import java.awt.Color;
import java.awt.Dimension;
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 java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import javax.swing.SwingUtilities;
class MouseLinePanel extends JPanel {
private List<Line2D> lineList; // 线集合
private Point2D lastPoint; // 保存最后点
private Rectangle2D rec; // 矩形
private static final int LENGTH = 10;// 矩形长宽
private List<Point2D> pointList; //所有线段的起始点集合
public MouseLinePanel() {
setLayout(null);
lineList = new ArrayList<Line2D>();
pointList = new ArrayList<Point2D>();
MouseLineEvent mle = new MouseLineEvent();
addMouseListener(mle);
addMouseMotionListener(mle);
addMouseWheelListener(mle);
rec = new Rectangle2D.Double();
}
// 重绘线条
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
for (Line2D line : lineList) {
g2.draw(line);
}
g2.draw(rec);
}
// 监听器
private class MouseLineEvent extends MouseAdapter {
// 按下时调用
@Override
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
lastPoint = e.getPoint();// 保存按下的点
}
// 松开时调用
@Override
public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
// 取集合中所有线段的起始点
for (Line2D line : lineList) {
pointList.add(line.getP1());
pointList.add(line.getP2());
}
for (Point2D p : pointList) {
//重新设置矩形的加载点
rec.setFrame( p.getX(), p.getY(), LENGTH, LENGTH);
repaint();//刷新面板
}
}
// 拖动
@Override
public void mouseDragged(MouseEvent e) {
super.mouseDragged(e);
Point2D newPoint = e.getPoint(); // 创建点
Line2D line = new Line2D.Double(lastPoint, newPoint); // 创建线段
lineList.add(line);
lastPoint = newPoint;
repaint();
}
}
}
class MouseLineFrame extends JFrame {
public MouseLineFrame() {
add(new MouseLinePanel());
setSize(700,500);
setVisible(true);
}
}
public class MouseLineTest {
public static void main(String[] args) {
new MouseLineFrame();
}
}
附件是源码
分享到:
相关推荐
在本示例中,我们将探讨如何使用VC++来绘制虚线矩形和点画线矩形。首先,我们需要理解VC++中的GDI(Graphics Device Interface)图形库,它是Windows API的一部分,用于处理图形设备操作,如屏幕、打印机等。 1. **...
本文将深入探讨如何利用MFC来实现画矩形与画线的功能,这对于开发图形用户界面(GUI)应用至关重要。 首先,我们需要了解MFC中的设备上下文(DC,Device Context)。设备上下文是Windows系统中一个非常重要的概念,...
如果你想让用户能够交互式地画线或矩形,你可以监听鼠标事件,如`MouseDown`、`MouseMove`和`MouseUp`。当用户按下鼠标时记录起点,移动鼠标时更新路径,释放鼠标时完成绘制。 在提供的压缩包文件"huatu"中,可能...
综上所述,Qt提供了丰富的图形绘制功能,包括绘制矩形、旋转矩形、画线等,可以方便地应用于各种图形界面和图像处理任务。在实际项目中,可以根据需求灵活组合这些方法,实现复杂的图形效果。在"DrawRect"这个示例中...
在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库在Visual Studio 2008中实现基本的图形绘制功能,包括画线、画圆和画矩形。MFC是微软提供的一种C++类库,它为构建Windows应用程序提供了一种...
通达信指标公式源码是用于生成季线、月线、周线画矩形的指标公式。该公式源码主要由五个部分组成:季线、月线、周线、季度线和主图指标。 1. 季线指标:WO:=O#WEEK;WC:=C#WEEK;WH:=H#WEEK;WL:=L#WEEK; 该部分定义...
易语言API画矩形源码,API画矩形,设置刷子颜色,取对象句柄_,设置画笔颜色,取设备场景_,释放设备场景_,画矩形_,删除对象_,DrawText,GetClientRect,选入设备场景_,画矩形边框_
android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明
接下来,让我们详细讲解“模拟拖动矩形”的实现过程。这通常涉及以下几个关键部分: 1. **初始化矩形**:在程序启动时,我们需要定义矩形的初始位置和大小。这可以通过设置矩形左上角的坐标和宽度、高度来完成。 2...
在给定的标题“用矩形法画等值线,效果挺好的”中,矩形法是一种计算和绘制等值线的技术,它通过将区域划分为多个小矩形,然后在每个矩形内估算平均值来构造等值线。这种算法相对简单,易于实现,且在某些情况下能...
填充矩形 随机画矩形 鼠标绘图 色彩变换矩阵 全局变形图形 漂亮的C#登录窗口(动画效果) 路径 另存为 绘制颜色渐变图形 绘制线条 绘制椭圆 绘制扇形 绘制抛物线 绘制矩形 绘制弧线 绘制多边形和折线 ...
在给定的“通达信指标公式源码通达信一分钟主图画矩形.doc”文件中,描述了一种特定的自定义指标公式,用于在一分分钟图上画出矩形框,以标记出每个交易日内每20分钟的最高价和最低价。下面将详细解释这个公式的工作...
在本文中,我们将深入探讨如何使用C#编程语言创建一个具有绘图功能的简单应用程序,包括画线、画圆和画矩形。这个程序还具备橡皮筋效果和图形的拖拽移动功能,使得交互性更强。以下是实现这些功能的关键知识点: 1....
我们可以使用 CDC 类的MoveTo 和 LineTo 方法来画线,以及InvalidateRect来更新视图,显示矩形。 4. **输出位置信息**:当用户释放鼠标(WM_LBUTTONUP消息)时,我们可以计算出矩形的左上角和右下角坐标,然后用...
MFC 画彩色线条和矩形,画笔画刷的利用,代码代码
本教程针对OpenGL初学者,重点讲解如何利用鼠标进行交互式画线、绘制圆和矩形,并实现简单的菜单功能。 一、OpenGL基础 OpenGL是一个跨语言、跨平台的编程接口,提供了一系列函数来创建和操纵2D和3D图形。它不包含...
本篇将详细介绍四种画线函数——向量画线法、函数画线法、Bresenham画线法和GDI画线,并探讨如何判断一个平面中的点是否位于给定的非正交矩形内。 一、画线函数 1. 向量画线法:基于起点和终点的向量进行计算,...
接下来,我们需要添加CSS来设置样式,确保鼠标在图片上时显示为十字形状,以及矩形框的样式: ```css #image-container { position: relative; } #selectable-image { cursor: crosshair; } .rectangle { ...
一维亥姆霍兹线圈仿真,绕线区域由矩形生成,即长方体,更好的模拟了多匝线圈的情况。开发平台为comsol5.2
本文将深入探讨如何使用Visual C++(VC)进行画线、绘制矩形和圆形,并对这些图形进行编辑,如修改属性、移动以及查询等操作。 首先,VC中的绘图功能主要依赖于Windows API中的GDI(Graphics Device Interface)库...