我的问题是,为什么在 JPanel 上绘图时,与直接在 JFrame 上相比,相同的摆动自定义绘图程序快近 16 倍?它只是双缓冲吗?不可能吧?
背景:当 JFrame 未被遮挡(尤其是仅被部分遮挡)时,我遇到了自定义绘制未刷新的问题。在搜索了 SO 之后,我决定硬着头皮弄清楚如何将 JPanel 的子类连接到一个 bluddy-NetBeans-form-designer 表单中。
对于处于相同情况的任何人:在 NetBeans 中,您需要创建一个恰好扩展 JPanel 的新标准类(不是 JPanel 表单),并手动编码其中的所有内容(没有 GUI 设计器,如过去的美好时光,叹)。然后在表单中添加一个标准的 JPanel,设置它的大小;然后右键单击并选择“自定义代码”并在组合框中选择“自定义创建”......它会创建一个新的 javax.swing.JPanel 替换您的子类。
所以......这让我能够“正确地做”并在组件上绘画,而不是直接在表单上。此外,panels-key-listener 是一个比劫持帧 key-event-dispatcher 更简洁的解决方案。
无论如何,现在分析器说完全相同的自定义绘画代码在 JPanel 的 paintComponent() 中的执行速度几乎是 JFrame 的 paint() 的 16 倍......我想知道是否有人可以解释原因。
先感谢您。基思。
编辑:这个问题是基于被误解的指标。分析器不包括/报告 AWT-EventQueue 线程中的 JPanel 的 paintComponent() 方法,因为我的基线配置文件确实包括 JFrame 的 paint()。在问一个愚蠢的问题之前,我应该更仔细地看一下。我的错。