为什么不直接在JFrame中绘制

任何人都可以解释我为什么不应该使用paint方法直接在JFrame窗口内绘制,我应该使用paintComponent方法与JFrame内的JFrame

提前致谢。

三个主要原因……

  1. 顶级容器不是双缓冲的,当重新绘制框架时会导致闪烁,是的,你可以实现你自己的双缓冲,但……
  2. 在框架内绘画不考虑框架边框,这意味着可以在框架下绘画。 框架边框也是平台/外观特定的,这意味着尺寸会发生变化
  3. 在Swing窗口的情况下,窗口上已经存在组件,这意味着它们在大多数情况下都会绘制(或被绘制)(由于Swing中优化的绘制引擎),因此难以生成一个合理的结果

对于点#2,框架装饰在“窗口”边界内绘制,而不是在它们之外

看一眼…

  • 即使在重新resize时,如何获得屏幕的中间位置
  • Java AWT drawString()不会显示在窗口上
  • 我怎么能在中间设置?

更多细节

花时间阅读AWT和Swing中的 绘画以及执行自定义绘画以获取更多详细信息