虽然我没有做一些动画或绘制非常复杂的图形
我需要(有点)双缓冲来绘制几个基元。在应用程序中,用户输入Shape的名称,后跟相关参数,并在缓冲区上绘制该形状,然后在屏幕上绘制。
例如命令是RECT 100, 50, 200, 120
。
对于持久性,我可以将所有命令存储在列表和中
JPanel的public void paintComponent(Graphics g)
我逐一绘制它们
但这非常低效,因为每次都要遍历列表并使用哈希映射来调用(或调度)相关的形状绘图界面。
我可以如何以及在什么类型的缓冲区绘制?不同的方法如何利用这个缓冲区?
另外有一种方便的方法可以使用缓冲区撤消以前的绘制吗?或者每次撤消时我是否需要重新绘制缓冲区?
谢谢,我不想要完整的代码,但是赞赏相关的类名和小伪代码。
答案 0 :(得分:6)
JPanel
是双缓冲的,因此选择和拖动通常非常流畅。 GraphPanel
是一个简单的对象绘图程序,用于说明List<Node>
上的此类操作。类似的方法已成功用于数千个节点。
实施撤消策略的详细信息在很大程度上取决于所需的行为,但remove()
和repaint()
是有效的。
附录:渲染大量对象的一个常见优化使用flyweight pattern。 JTable
,JFreeChart
和JGraph
就是例子。这个简化的example
说明了基本机制。