发布于2021-04-16 14:31 阅读(1037) 评论(0) 点赞(24) 收藏(1)
我试图了解何时使用revalidate / repaint / pack。
令人惊讶的是,我还没有找到很多详细的后台文件(可以随意链接)。
到目前为止,我已经了解到这是RepaintManager的全部责任。
关于Oracle的这篇文章解释说,调用重绘会使事件分派器线程上的作业排队,该任务将依次在组件上调用paintImmediately()(这将重画组件)。
此跟踪指示有效或无效与LayoutManager相关联。而且这全都与组件的大小有关,而不是内容。
这里有一些需要调用这些方法的基本情况(我介绍了基础知识,但是我可能错过了一些需要调用这些方法的其他情况)。
revalidate()
一个容器上,当你可以:添加一个或多个组件,删除一个或多个组件,改变一个的约束或更多包含的组件(限制或XXXSize(),尽管后者不推荐),改变了LayoutManager
的容器。repaint()
每当需要重绘该组件(及其后代)时,都应调用。最终,这将调用paintComponent()
(对于基本的小部件,它将委托给XXXUI.paint())paintBorder()
和paintChildren()
(至少在Swing中)pack()
实际上将窗口的大小设置为其首选大小。通常,应该在使窗口可见之前立即调用此功能。您可以稍后再调用它,但这会给用户带来奇怪的体验(我不知道许多应用程序一旦显示就会调整窗口大小)使用revalidate()
和的主要优点repaint()
是它们可以合并在一起。这意味着,如果您多次调用repaint()
,则绘画将仅执行一次。
作者:黑洞官方问答小能手
链接:http://www.javaheidong.com/blog/article/156481/0502f5175a80bbc80624/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!