java - 动画 Gif 触发 paintComponent (Java)?

标签 java swing jpanel animated-gif imageicon

在虔诚地阅读 SO 时,我看到了许多通过经典在 Java 中使用动画 gif 的示例:

  JLabel mylabel=new JLabel(new ImageIcon("animated.gif"));

效果很好,但是当我将 mylabel 添加到 JPanel 时,我注意到每次 gif 时都会调用 JPanel 的 paintComponent 方法改变框架。

真的有必要吗?
gif 不是与 JLabel 隔离的吗?

每次 gif 循环帧时重新绘制整个面板(以及添加到其中的任何其他组件)似乎是一种昂贵的时间浪费。

如果您想知道我为什么关心:从网页设计 (js/css) 中,我学会了如何几乎完全避免重排并将重绘隔离到仅被更改的元素。为性能创造奇迹。

最佳答案

Is that really necessary?

是的:默认情况下,JLabel 不是不透明的,这就是为什么它的父级必须在标签发生变化时重新绘制自身的原因。如果您进行了更深入的探索:父级 重新绘制标签后面的区域(见剪辑)

关于java - 动画 Gif 触发 paintComponent (Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12776969/

相关文章:

java - 在 Java 方面使用 lambda 时出错

java - 使用 google_checks 时,Checkstyle Maven 插件执行不会因错误而失败

java - JOptionPane 标题栏图标

java - 从 Windows XP 中的 JFileChooser 获取路径值

java - 接口(interface)类java中的静态工厂方法

java - model.refresh 在 playframework(1.2.4) 中做什么

java - 如何在Java中使用GridLayout?

java - 计算器:仅当鼠标悬停在测试 JFrame 类中的按钮上时才会显示按钮

java - JPanel & 组件自动改变位置

java - JButtons 在 MouseOver 之前不会出现