我的问题是,为什么相同的 swing-custom-painting 例程在 JPanel 上绘制比直接在 JFrame 上绘制快近 16 倍?它只是双缓冲吗?不可能吧?
背景:当 JFrame 未被遮挡(特别是仅被部分遮挡)时,我遇到了自定义绘画未刷新的问题。在搜索 SO 之后,我决定硬着头皮想办法将 JPanel 的子类连接到 bluddy-NetBeans-form-designer 表单中。
对于处于相同情况的任何人:在 NetBeans 中,您需要创建一个新的标准类(不是 JPanel 表单),它恰好扩展了 JPanel,并手动编写其中的所有内容(没有 GUI 设计器,就像 good-ole -天,叹息)。然后你添加一个标准的 JPanel 到你的表单,设置它的大小;然后右键单击并选择“自定义代码”并在组合框中选择“自定义创建”...它会在其中创建一个新的 javax.swing.JPanel 替换您的子类。
所以...这使我能够“正确地做”并在组件上绘制,而不是直接在表单上绘制。此外,panels-key-listener 是比劫持框架 key-event-dispatcher 更简洁的解决方案。
无论如何,现在探查器说完全相同的自定义绘画代码在 JPanel 的 paintComponent() 中的执行速度比 JFrame 的 paint() 快近 16 倍...我想知道是否有人可以解释原因。
提前致谢。基思。
编辑:此问题基于 MISINTERPRETED METRICS。分析器不包括/报告 AWT-EventQueue 线程中的 JPanel 的 paintComponent() 方法,而我的基线分析程序确实包括 JFrame 的 paint()。在问一个愚蠢的问题之前,我应该更仔细地看一下。我的错。
最佳答案
JFrame 是扩展 aw.Frame 的顶级容器,需要本地资源进行绘图,而 JPanel 是由 UI 线程本身呈现的 swing 组件。
关于java - 为什么在 JFrame 上绘图比在 JPanel 上绘图慢得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18273040/