如何在具有撤消功能的缓冲区上绘图?

时间:2012-02-19 08:11:13

标签: java swing buffer jpanel graphics2d

虽然我没有做一些动画或绘制非常复杂的图形 我需要(有点)双缓冲来绘制几个基元。在应用程序中,用户输入Shape的名称,后跟相关参数,并在缓冲区上绘制该形状,然后在屏幕上绘制。 例如命令是RECT 100, 50, 200, 120

对于持久性,我可以将所有命令存储在列表和中 JPanel的public void paintComponent(Graphics g)我逐一绘制它们 但这非常低效,因为每次都要遍历列表并使用哈希映射来调用(或调度)相关的形状绘图界面。

我可以如何以及在什么类型的缓冲区绘制?不同的方法如何利用这个缓冲区?

另外有一种方便的方法可以使用缓冲区撤消以前的绘制吗?或者每次撤消时我是否需要重新绘制缓冲区?

谢谢,我不想要完整的代码,但是赞赏相关的类名和小伪代码。

1 个答案:

答案 0 :(得分:6)

默认情况下,

JPanel是双缓冲的,因此选择和拖动通常非常流畅。 GraphPanel是一个简单的对象绘图程序,用于说明List<Node>上的此类操作。类似的方法已成功用于数千个节点。

实施撤消策略的详细信息在很大程度上取决于所需的行为,但remove()repaint()是有效的。

附录:渲染大量对象的一个​​常见优化使用flyweight patternJTableJFreeChartJGraph就是例子。这个简化的example说明了基本机制。