JavaFXCanvas-反向展开

JavaFXCanvas-反向展开,canvas,javafx,Canvas,Javafx,我正在编写一个程序,其中包括从USB设备读取数据,并将其绘制在线形图(画布)上。画布放置在滚动窗格中,因此当线条到达画布的末端时,画布的大小会增加,滚动窗格会自动向右滚动。我想在垂直方向上实现相同的功能,但是setHeight(double h)只向下扩展画布,因此当线条到达画布顶部时,这不起作用 由于画布不能向上扩展(因为这意味着负面积),我希望有一种方法可以在向下扩展画布后向下移动所有先前绘制的线,以便在其上方腾出空间 有人知道如何做到这一点吗?我没有看到任何代码,所以我假设了一些事情。一个

我正在编写一个程序,其中包括从USB设备读取数据,并将其绘制在线形图(画布)上。画布放置在滚动窗格中,因此当线条到达画布的末端时,画布的大小会增加,滚动窗格会自动向右滚动。我想在垂直方向上实现相同的功能,但是
setHeight(double h)
只向下扩展画布,因此当线条到达画布顶部时,这不起作用

由于画布不能向上扩展(因为这意味着负面积),我希望有一种方法可以在向下扩展画布后向下移动所有先前绘制的线,以便在其上方腾出空间


有人知道如何做到这一点吗?

我没有看到任何代码,所以我假设了一些事情。一个是,您不通过调用
GraphicsContent\35save
来“保存”绘制的内容。否则,您将无法正确完成此任务

无论如何,以下是您如何完成转换(尚未测试!)

在这个调用之后,您的新坐标也应该被转换,这意味着您要么在添加新数据时进行补偿,要么调用save(这意味着在此之后无法修改内容(可能不是您想要的内容))

编辑


实现相同效果的另一种方法是,每次需要向负方向展开时,都创建一个新画布。多个画布实例可以相互覆盖,当背景设置为“透明”时,先前绘制的线条仍将可见。(确保平移上一个画布以补偿负扩展!)

这是在画布上创建线条图的一种非常糟糕的方法。最终画布将达到最大大小,并且当您尝试将其扩展到超出其限制时,将开始抛出错误。让图表运行几分钟后,事情就这样发生了。更好的方法是以某种方式存储USB数据,并不断使用最后X个USB数据点重新绘制画布,以保持图形“移动”。

在JavaFX中呈现为
画布
;支持缩放和平移;更多。translate方法没有移动先前绘制的线。@Ember我添加了一个替代方法,但当您自己发布时,对于更大的范围,您需要缩放/重新绘制。或者只渲染数据的最新部分。
Canvas canvas; // assuming you've initialized it, and drawn a lot of stuff already without saving.
GraphicsContent gc = canvas.getGraphicsContext2D();
gc.translate(0, addedHeight);