JavaFX Canvas - 向负方向扩展



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

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

有谁知道如何做到这一点?

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

我没有看到任何代码,所以我假设了一些事情。一个是你不会通过调用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(这意味着之后无法修改内容(可能不是您想要的((。

编辑

实现相同效果的另一种方法是在每次需要向负方向扩展时创建一个新画布。多个画布实例可以相互叠加,当背景设置为透明时,之前绘制的线条仍然可见。(确保翻译之前的画布以补偿负扩展!

最新更新