我的问题是:为什么在JPanel上绘制相同的自定义绘画例程比直接在JFrame上绘制快近16倍?这只是双缓冲吗?这肯定不可能吧?
背景:当JFrame未被遮挡时(尤其是部分遮挡时),我遇到了自定义绘图不刷新的问题。在搜索了SO之后,我决定咬紧牙关,弄清楚如何将JPanel的子类连接到一个NetBeans表单设计器中。
对于处于相同情况的任何人:在NetBeans中,您需要创建一个新的标准类(而不是JPanel表单),该类恰好扩展JPanel,并在其中手动编写所有内容(没有GUI设计器,就像好老的日子一样)。然后,您向表单添加一个标准的JPanel,设置其大小;然后右键单击并选择“自定义代码”,并在组合框中选择“自定义创建”...它会创建一个新的javax.swing.JPanel替代您的子类。
所以...这使我能够“正确地”在组件上绘制,而不是直接在表单上绘制。此外,面板的键监听器比劫持帧键事件调度程序更加简洁。
无论如何,现在分析器说,在JPanel的paintComponent()中执行的完全相同的自定义绘画代码与JFrame的paint()相比快近16倍...我想知道是否有人可以解释一下为什么。
提前感谢。Keith。
编辑:这个问题是基于错误的度量标准。分析器没有包括/报告JPanel的paintComponent()方法在AWT-EventQueue线程中,而我的基准配置文件确实包括了JFrame的paint()。在问一个傻问题之前,我应该仔细看看。我的错。
背景:当JFrame未被遮挡时(尤其是部分遮挡时),我遇到了自定义绘图不刷新的问题。在搜索了SO之后,我决定咬紧牙关,弄清楚如何将JPanel的子类连接到一个NetBeans表单设计器中。
对于处于相同情况的任何人:在NetBeans中,您需要创建一个新的标准类(而不是JPanel表单),该类恰好扩展JPanel,并在其中手动编写所有内容(没有GUI设计器,就像好老的日子一样)。然后,您向表单添加一个标准的JPanel,设置其大小;然后右键单击并选择“自定义代码”,并在组合框中选择“自定义创建”...它会创建一个新的javax.swing.JPanel替代您的子类。
所以...这使我能够“正确地”在组件上绘制,而不是直接在表单上绘制。此外,面板的键监听器比劫持帧键事件调度程序更加简洁。
无论如何,现在分析器说,在JPanel的paintComponent()中执行的完全相同的自定义绘画代码与JFrame的paint()相比快近16倍...我想知道是否有人可以解释一下为什么。
提前感谢。Keith。
编辑:这个问题是基于错误的度量标准。分析器没有包括/报告JPanel的paintComponent()方法在AWT-EventQueue线程中,而我的基准配置文件确实包括了JFrame的paint()。在问一个傻问题之前,我应该仔细看看。我的错。