【问题标题】:Why not to draw directly inside JFrame [duplicate]为什么不直接在 JFrame 内绘制 [重复]
【发布时间】:2014-07-24 11:19:57
【问题描述】:

谁能解释我为什么不应该使用paint 方法直接在JFrame 窗口内绘制,我应该使用paintComponent 方法和JPanelJFrame 内?

提前致谢。

【问题讨论】:

  • @ChristopheD 不太好,建议进一步阅读。在那种情况下,他们询问的是 Swing 组件的绘制方法与在 Swing 组件上使用窗口/顶级容器之间的区别 - 只是说;)
  • @MadProgrammer:糟糕,这次重复搜索有点太快了。感谢您指出这一点。
  • -1,您在上一个问题中获得了 Swing 教程的链接。你读过教程吗?它还包含一个关于 Custom Painting 的部分,它对 Swing 中的绘画进行了高级概述。本教程还包含一个链接,指向更深入的绘画讨论。阅读这两个教程,如果有不明白的地方,请提出具体问题。
  • @NarutoBijuMode “如果我们所有人都有时间阅读所有这些 oracle 教程,我永远不会在这里提问” 这不是真的。你的第一名是教程,第二名是论坛,你用它来要求澄清你不明白的地方。如果您不愿意投入时间或精力自学,为什么其他人也愿意,我们都有时间限制
  • @NarutoBijuMode Camickr 只是想向您指出,通过首先进行一些研究可以在某些部分回答的问题污染论坛并不是 SO 的目的,如果您发现这个,请见谅烦人或冒犯,这不是我们的意图,我们的目的是让你成为一个更好的、自给自足的开发者。当你得到的答案不合适时,询问答案不会教你(这种情况经常发生在这里)。在要求对某个主题进行澄清之前,有能力研究一个主题,即使是一点点,也会让你更容易看到好的答案

标签: java swing paint paintcomponent


【解决方案1】:

三个主要原因...

  1. 顶级容器没有双缓冲,这会在重新绘制帧时导致闪烁,是的,您可以实现自己的双缓冲,但是...
  2. 在框架内绘制不会考虑框架边界,这意味着可以在它们下绘制。框架边框也因平台/外观而异,这意味着尺寸会发生变化
  3. 在 Swing 窗口的情况下,窗口上已经存在一些组件,这意味着它们在大多数情况下都进行了绘制(或被绘制)(由于 Swing 中优化的绘制引擎),使得它难以产生合理的结果

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

看看……

更多详情

花时间阅读Painting in AWT and SwingPerforming Custom Painting了解更多详情

【讨论】:

  • 我是java和swing的初学者,我不明白第一个原因,第二个是有什么方法可以证明draw是在框架边框下,因为对我来说这似乎是不可能的windows,对于第三个,你能给我举一些例子来做更多的说明。谢谢。
  • @NarutoBijuMode 框架装饰画在窗口的范围内,而不是在它们之外,这意味着窗口的位置和大小总是正确的(并且不需要修改以适应装饰品尺寸)。双缓冲是一种用于提高绘制性能的技术,而不是尝试直接绘制到具有自己开销的屏幕设备上,而是绘制一个离屏缓冲区并通过将缓冲区绘制到屏幕来进行单次更新。更新屏幕时减少闪烁
  • 我认为第二个是不要在框架内绘制的最佳理由。感谢您的示例:)
猜你喜欢
  • 2017-03-21
  • 2011-01-17
  • 2012-05-05
  • 2013-01-27
  • 2018-07-29
  • 2015-10-07
  • 1970-01-01
  • 2013-07-21
  • 2016-05-25
相关资源
最近更新 更多