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

在Java中使用super.paintComponent(g)或getGraphics()

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

在Java中使用super.paintComponent(g)或getGraphics()

这样做是一种好习惯吗

不,这实际上非常可怕且容易出错。假设这是

Component#getGraphics
方法。问题是Swing使用被动渲染算法,也就是说,Swing决定何时以及应重新绘画的对象,并且出于优化原因进行此操作。

这意味着更新不是定期的,这在制作动画时确实有帮助,并且可能由于多种原因随时发生,其中许多原因您根本无法控制。

由于这些原因,应该在一种绘画方法(最好

paintComponent
JComponent
基于基础的绘画方法)内进行绘画。这样,当Swing决定进行重新绘制时,一个就知道并且可以相应地更新输出,而第二个就不会清除以前使用
getGraphics
它绘制的内容,这可能导致闪烁…

您还遇到了潜在的线程问题,因为您试图在

Graphics
上下文中绘制,所以事件调度线程可能不会结束,所有绘制都应在EDT上下文中完成。
(用于基于组件的绘画)

您可以尝试使用

BufferedStrategy
,这样可以直接控制绘画过程,但这将您限制在AWT库中。不知道这对您而言是好是坏。

另一件事,graphic.dispose()如何正常工作?,因为尝试删除此行代码,因此没有任何反应。

dispose
基本上释放
Graphics
上下文可能拥有的任何本机资源。一般的经验法则,如果没有创建,就不要丢弃它。

因此,如果使用

Graphics#create
BufferedImage#createGraphics
获取
Graphics
上下文,则
dispose
在完成操作后应调用。

在某些系统

dispose
上,调用
Grpahics
用于执行组件绘制(例如传递给
paintComponent
或从中获得的组件)的上下文
getGraphcis
可能会阻止进一步的内容被绘制。

同样,不处理

Graphics
您创建的上下文会导致内存泄漏,因为它们不会收集垃圾。



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

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

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