为什么在JFrame上绘制的速度比在JPanel上慢得多?

cor*_*ttk 8 java swing custom-painting

我的问题是,与直接在JFrame上绘制相比,绘制JPanel时,相同的swing-custom-painting例程快16倍?它只是双缓冲吗?它肯定不是吗?

背景:当JFrame未被遮挡时(特别是仅被部分遮挡),我遇到了自定义绘画未被刷新的问题.搜索完SO后,我决定咬一口,弄清楚如何将JPanel的子类连接成一个bluddy-NetBeans-form-designer形式.

对于处于相同情况的任何人:在NetBeans中,您需要创建一个新的标准类(不是JPanel表单),恰好可以扩展JPanel,并手动编写其中的所有内容(没有GUI设计器,就像好日子一样,叹).然后在表单中添加标准JPanel,设置它的大小; 然后右键单击并选择"自定义代码"并在组合框中选择"自定义创建"...在其中创建新的javax.swing.JPanel替换其子类.

所以...这使我能够"正确地"并在组件上绘画,而不是直接在表格上绘画.此外,面板 - 键 - 听众是一个更加整洁的解决方案,而不是高举框架键事件调度员.

无论如何,现在分析器说完全相同的自定义绘图代码在JPanel的paintComponent()中执行的速度比JFrame的paint()快了近16倍......我想知道是否有人可以解释原因.

先感谢您.基思.


编辑:这个问题是基于MISINTERPRETED METRICS.探查器不包含/报告AWT-EventQueue线程中的JPanel的paintComponent()方法,其中 - 我的基线配置文件确实包含JFrame的paint().在问一个愚蠢的问题之前我应该​​仔细看一下.我的错.

mes*_*lds 0

“Swing 使用 Java2D API 进行绘图,根据 Java SE 7 故障排除指南,Java2D 使用一组渲染管道,“可以粗略地定义为渲染基元的不同方式”。更具体地说,Java2D 渲染管道似乎将跨平台 Java 代码连接到可能支持硬件加速的本机图形库(OpenGL、X11、D3D、DirectDraw、GDI)。

在 Java 1.6.0_10(又名 6u10)中,基于 Direct3D 的“完全硬件加速图形管道”被添加到 Java2D for Windows 中,以提高 Swing 和 Java2D 应用程序中的渲染性能(默认启用)。

默认情况下,当在 Windows 系统上使用 Java2D 时,默认情况下会启用此 Direct3D 管道和 DirectDraw/GDI 管道(我假设它们各自用于不同的用途)。

继续阅读:在 Swing 应用程序启动期间首次调用 JFrame 构造函数需要很长时间(因为 java.awt.Window())