我正在编写一个程序,涉及从USB设备读取数据并将其绘制在折线图(画布)上。画布放在ScrollPane中,所以当画线到达画布的末尾时画布“大小增加,ScrollPane自动滚动到右侧。我想在垂直方向上实现相同的功能,但setHeight(double h)
只向下扩展画布,所以当行到达画布顶部时,这不起作用。
由于画布无法向上扩展(因为这意味着负面区域),我希望有一种方法可以将所有先前绘制的线向下移动,以便在向下展开画布后在其上方腾出空间。
有谁知道如何做到这一点?
答案 0 :(得分:0)
我没有看到任何代码,所以我假设了一些事情。一个是你不通过调用GraphicsContent#save
来“保存”所绘制的内容。否则你将无法正确完成这一任务。
无论如何,这里是你如何完成转换(尚未测试!)
Canvas canvas; // assuming you've initialized it, and drawn a lot of stuff already without saving.
GraphicsContent gc = canvas.getGraphicsContext2D();
gc.translate(0, addedHeight);
在此调用之后,您的新坐标也应该被转换,这意味着您必须在添加新数据时进行补偿,或者调用save(这意味着事情之后无法修改(可能不是您想要的))。
修改强>
实现相同效果的另一种方法是每次需要向负方向扩展时创建一个新画布。多个画布实例可以相互叠加,当背景设置为透明时,之前绘制的线仍然可见。 (确保翻译前一个画布以弥补负面扩展!)
答案 1 :(得分:0)
这是在Canvas上创建折线图的一种非常糟糕的方法。最终画布将达到最大尺寸,并在您尝试将其扩展到超出限制时开始抛出错误。让图表运行几分钟后,这正是发生的事情。更好的方法是以某种方式存储USB数据并不断地用最后X个USB数据点重绘画布以使图形“移动”。