程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

摆动刷新周期

发布于2021-04-16 14:31     阅读(1037)     评论(0)     点赞(24)     收藏(1)


我试图了解何时使用revalidate / repaint / pack。

令人惊讶的是,我还没有找到很多详细的后台文件(可以随意链接)。

到目前为止,我已经了解到这是RepaintManager的全部责任。

  • 油漆/重涂指的是看似脏/干净的东西
  • 打包/验证/重新验证是指有效的内容

关于Oracle的这篇文章解释说,调用重绘会使事件分派器线程上的作业排队,该任务将依次在组件上调用paintImmediately()(这将重画组件)。

此跟踪指示有效或无效与LayoutManager相关联。而且这全都与组件的大小有关,而不是内容。

  1. 确实,在移动/调整组件大小时应调用revalidate,在更改其内容时应重新绘制吗?
  2. pack()方法真的是您不应调用的不赞成使用的东西吗?
  3. 以上任何说法有误吗?

解决方案


这里有一些需要调用这些方法的基本情况(我介绍了基础知识,但是我可能错过了一些需要调用这些方法的其他情况)。

  1. 你应该叫revalidate()一个容器上,当你可以:添加一个或多个组件,删除一个或多个组件,改变一个的约束或更多包含的组件(限制或XXXSize(),尽管后者不推荐),改变了LayoutManager的容器。
  2. repaint()每当需要重绘该组件(及其后代)时,都应调用最终,这将调用paintComponent()(对于基本的小部件,它将委托给XXXUI.paint())paintBorder()paintChildren()(至少在Swing中)
  3. pack()实际上将窗口的大小设置为其首选大小。通常,应该在使窗口可见之前立即调用此功能。您可以稍后再调用它,但这会给用户带来奇怪的体验(我不知道许多应用程序一旦显示就会调整窗口大小)

使用revalidate()的主要优点repaint()是它们可以合并在一起。这意味着,如果您多次调用repaint(),则绘画将仅执行一次。



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.javaheidong.com/blog/article/156481/0502f5175a80bbc80624/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

24 0
收藏该文
已收藏

评论内容:(最多支持255个字符)