某些动画(例如某些gif文件)仅在每个帧中存储从前一帧更改的像素。要正确绘制这些动画,您必须绘制第一帧,然后在它们之上绘制后续帧而不删除前一帧。但是,当你调用repaint()时,JPanels总是重绘背景,删除前面的帧。有没有办法阻止JPanel重绘背景?我被告知在JPanels super.paintComponent(g)
方法中调用paintComponent(Graphics g)
是重绘背景的,但我尝试将其评论出来并导致一些奇怪的行为,所以我假设它不仅仅是只是重绘背景。
答案 0 :(得分:3)
我建议您根据API提供的已存在代码构建代码,而不是弄乱它。只需将图像存储为BufferedImage
即可。这允许您使用ImageIcon
显示它,因此这是一个额外的简化。这允许您使用API更新单个像素而不会有任何麻烦。如果您绝对坚持将JPanel
排除在重绘例程之外,this question可能会有所帮助。
一般来说:
遵循API的传统使用。如果您想永久存储图片数据,请{1 {1}}。每次更新帧时都应该完全覆盖BufferedImage
。
答案 1 :(得分:1)
根据您的具体要求,有两种常用方法:
查看Custom Painting Approaches以获取有关每种方法的更多信息和工作示例。