怎么让矩形顺着我画的线溜下来,鼠标按下,拖动画线,松开鼠标后,产生一矩形,顺着线段跑一圈,以下为我的代码,但是有点问题,看不到跑的过程,只是在线的末尾添加了一矩形.
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画虚线矩形,实线矩形和点画线矩形的小demo!
C# 画图 画线条 画矩形 有两个窗体, 一个是画线条, 一个是画矩形 希望对大家有用
用MFC实现加载数据画矩形与直线!
用Visual studio 2008 MFC实现图形学的画圆、画线、画矩形程序
最近花了好多时间终于完成了5110液晶屏的画图函数库,是在之前nios ii的工程基础之上做的,完善了画图的基本函数,有画点,画直线,画折线,画矩形,画圆和贴图的基本功能。函数库提供了使用缓冲区和不使用缓冲区的...
易语言API画矩形源码,API画矩形,设置刷子颜色,取对象句柄_,设置画笔颜色,取设备场景_,释放设备场景_,画矩形_,删除对象_,DrawText,GetClientRect,选入设备场景_,画矩形边框_
季线 月线 周线画矩形通达信指标公式源码.doc
C# 绘图板 源码 (画线、画圆、画矩形),橡皮筋效果,并且可以对画好的进行拖拽移动
android openGl es2.0以画线的模式画成一个矩形 只有4条边中间透明
MFC 自定义画线 画椭圆 画矩形
qt 画矩形框、旋转矩形、先画直线、再画矩形、用于抠图
MFC 画彩色线条和矩形,画笔画刷的利用,代码代码
Qt实现点击添加图片,并可以在图片上画线、矩形、圆
填充矩形 随机画矩形 鼠标绘图 色彩变换矩阵 全局变形图形 漂亮的C#登录窗口(动画效果) 路径 另存为 绘制颜色渐变图形 绘制线条 绘制椭圆 绘制扇形 绘制抛物线 绘制矩形 绘制弧线 绘制多边形和折线 ...
一个简单的利用C++MFC画矩形的程序,很容易懂的哦
1097:画矩形 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 21249 通过数: 12589 【题目描述】 根据参数,画出矩形。输入四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列...
易语言画板模拟拖动矩形源码,画板模拟拖动矩形,子程序1,子程序2,刷新物体位置,点是否在矩形内
一维亥姆霍兹线圈仿真,绕线区域由矩形生成,即长方体,更好的模拟了多匝线圈的情况。开发平台为comsol5.2
VB Line方法画矩形 VB Line方法画矩形 VB Line方法画矩形
CAD:excel 批量画矩形 把excel中的长、宽数据批量画到cad中