1

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

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

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

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

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

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

4

1 回答 1

4

这真的有必要吗?

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

于 2012-10-08T08:19:39.110 回答