2017-10-28 42 views
1

很简单的问题,但是我无法找到JavaFX的文档或StackOverflow的答案:JavaFX的:如何清除图纸不影响背景

我有一个JavaFX帆布充满图形(各种调用strokeLine() ,这里不是问题)。我需要能够在该图上绘制矩形,然后只需清除矩形,而不会影响背景中的图形。 (像撤消操作一样)。

代码绘制矩形(“p”和“E”是点):

gc.rect(p.getX(), p.getY(), e.getX()-p.getX(), e.getY()-p.getY()); 
gc.stroke(); 

最明显的答案是使用和clearRect()方法,但问题是,它同时会清除在背景图中的部分...

所以问题是:如何清除使用stroke()制作的绘图,而不影响背景中的其他绘图?

+0

如果您需要操作形状,您应该考虑将它们添加到窗格,AnchorPane或组中,随时移动它们,调整大小或删除它们。您可以使用Canvas,但在这种情况下,您需要将每个形状的所有信息(例如ArrayList)保留下来,并在每次应用更改(删除/移动等)时重绘所有内容,但取决于形状的数量这个过程可能非常耗费CPU /内存。 – JKostikiadis

回答

2

你不能这样做一个帆布。

画布只存储绘画操作的结果。 这是画布的兴趣,你可以在同一条线上画几百万次,它只会存储和表示结果,并且不会消耗更多的内存。

因此,如果您需要在图表上绘制某些东西,则应该在图表上放置另一个画布并在第二个画布上绘制。

1

如果您只是将画布放入组中,然后只需向该组中添加一个Rectangle节点,您可以随时将其删除,如果需要的话,JavaFX可能会更直接和更方便。