栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么必须使用paintComponent方法在Java中进行绘制?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么必须使用paintComponent方法在Java中进行绘制?

那是因为这就是它的工作方式。它是以此方式设计的。但是我想你的问题是关于“为什么”

请记住,Swing大约在15年前问世。批评之一是该API太慢(事实是,它之所以缓慢是因为人们并不真正了解如何使用它,但这是另一回事了),因此在设计API时必须考虑性能。

涉及许多因素…

Swing使用被动绘画过程,这意味着将绘画请求发送到绘画子系统并计划(返回EDT)进行处理。绘画子系统决定应绘画的内容,时间和量。这是在亵渎油漆子系统时完成的。

这意味着您永远不会真正知道何时可以执行绘制循环,因此我们需要某种方式来响应这些请求。

多功能性是另一个因素。API足够抽象,以至于与组件的绘制位置无关(很多)。也就是说,您可能被涂到屏幕,打印机甚至图像上。这意味着您无需重复很多绘画代码即可使其在不同的设备上运行。

您也永远不知道组件何时可以显示(即何时将其附加到本机对等端)。这意味着图形上下文可能是

null
,因此拥有“
helper”方法实际上可能会引起更多问题。当
paintComponent
被调用时,你(大部分)保证有一个有效的图形上下文要绘制的。

可扩展性将是另一个因素。不仅很容易重写

paintComponent
来更改某些组件绘制的方式,而且绘制系统也可以像当前情况一样提供扩展的Graphics上下文。当
paintComponent
(至少由paint子系统)调用时,它保证
Graphics
上下文将是的实例
Graphics2D
,它是的扩展
Graphics
,为API提供了许多重要的增强。

无需更改人们正在使用的基类就可以完成所有操作,因此,如果他们不想使用这些功能,则不受其影响。

您可能需要通读…

  • 在AWT和Swing中绘画
  • 被动渲染与主动渲染

更多细节

并记住“绘画很有趣”;)

其他想法

要考虑的其他考虑因素之一是,

Graphics
API是绘画的核心,不仅考虑UI,而且考虑打印和图像处理。API与目标断开连接,从而具有更大的灵活性,但也具有通用性。

这意味着,如果您需要打印到打印机或渲染为图像,则可以使用与在屏幕上绘画相同的API。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431053.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号