求助:Java graphics画图 : 有什么方法使已画好的曲线随鼠标拖动而改变位置

时间:2020-12-01 21:52:47
遇到一个困难:
我根据一组数据画出一条曲线,现在我想让这条曲线能够随着鼠标拖动而改变位置。
由于数据量挺大的,如果没挪动一个像素点都repaint重新画,似乎不太合理,工作量太大。
大家有什么好的别的方法吗?
谢谢!!!

2 个解决方案

#1


用一个Canvas对象C1绘制全部数据组成的曲线,当按下鼠标时,新建一个Canvas对象C2,在其上绘制这组数据的外轮廓,鼠标移动时,重绘C2,使轮廓随着鼠标移动,松开鼠标时再重新绘制C1,使全部数据组成的曲线移动到鼠标的位置。这个方式有些类似Windows中拖到窗口的操作。

#2


楼主是在做报表么。

如果楼主只是想刷新一小部分内容,我推荐使用graphics类中的clipbound功能:

Graphics.setClip(...);

这样能保证所做修改局限于所设定的范围内。

关键问题还是在于楼主你能不能缩小每次需要刷新图片的范围,如果能限定在一定范围内的话(即这个拖动不是牵一发而动全身),则可以像这样,只更新部分显示(当然你也要在算法上做优化,不要再用画所有点的方法了)。

如果这里的拖动指的是“平移”画面,那么楼上的思想是对的,即缓存当前的曲线,然后用drawimage等方法一次绘制。当然只画轮廓效率更高。。。

#1


用一个Canvas对象C1绘制全部数据组成的曲线,当按下鼠标时,新建一个Canvas对象C2,在其上绘制这组数据的外轮廓,鼠标移动时,重绘C2,使轮廓随着鼠标移动,松开鼠标时再重新绘制C1,使全部数据组成的曲线移动到鼠标的位置。这个方式有些类似Windows中拖到窗口的操作。

#2


楼主是在做报表么。

如果楼主只是想刷新一小部分内容,我推荐使用graphics类中的clipbound功能:

Graphics.setClip(...);

这样能保证所做修改局限于所设定的范围内。

关键问题还是在于楼主你能不能缩小每次需要刷新图片的范围,如果能限定在一定范围内的话(即这个拖动不是牵一发而动全身),则可以像这样,只更新部分显示(当然你也要在算法上做优化,不要再用画所有点的方法了)。

如果这里的拖动指的是“平移”画面,那么楼上的思想是对的,即缓存当前的曲线,然后用drawimage等方法一次绘制。当然只画轮廓效率更高。。。