java - 为什么在 JFrame 上绘图比在 JPanel 上绘图慢得多?

标签 java swing custom-painting

我的问题是,为什么相同的 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/

相关文章:

java - 非阻塞和阻塞并发

java - 如何使用JPanel和Jframe在相对(X,Y)上进行鼠标事件

c# - C#绘制父子父子自定义背景

java - 按下日历中的按钮后不会重新绘制不同的月份

java - LocalDateTime 解析抛出 "java.lang.IllegalArgumentException: Unknown pattern letter: T"

Java - 模式匹配奇怪的行为

java - NetBeans - 如何将面板移动到新文件(代码太大)

java - 如何从类中调用 JFrame?

flutter - 如何在 Row 小部件中定位 CustomPaint?

java - Activiti - 如何获取自定义表单类型来保存多个值?