的Bonjour,
我正在尝试动画,并且发现自己在连续的单个图像上发现了一条爆炸。我希望他们按顺序依次显示爆炸动画。当然,我在ImageIcon
上考虑JLabel
,但当我查看JLabel
规范时,我发现了这一行:
JLabel(Icon icon)
- 使用指定的图像创建JLabel
实例。标签在其显示区域中垂直和水平居中。
我希望能够仅在标签中显示完整图像的一部分,然后加载其中的一部分:基本上在一张图像上加载不同的阶段。
有没有办法在不切割图像并单独加载图像的情况下执行此操作?
答案 0 :(得分:4)
您可load the image initially using a BufferedImage
,您可以致电getSubimage
获取Image
的裁剪副本,同时保留原Image
答案 1 :(得分:2)
你也可以使用这个 drawImage
方法从Graphics
类到裁剪绘制图像
public abstract boolean drawImage(Image img,
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
ImageObserver observer)
绘制与当前可用的指定图像一样多的指定区域,即时缩放它以适合目标可绘制表面的指定区域。透明像素不会影响已存在的任何像素。
<强>参数:强>
- img - 要绘制的指定图像。如果img为null,则此方法不执行任何操作。
- dx1 - 目标矩形第一个角的x坐标。
- dy1 - 目标矩形第一个角的y坐标。
- dx2 - 目标矩形的第二个角的x坐标。
- dy2 - 目标矩形的第二个角的y坐标。
- sx1 - 源矩形第一个角的x坐标。
- sy1 - 源矩形第一个角的y坐标。
- sx2 - 源矩形第二个角的x坐标。
- sy2 - 源矩形第二个角的y坐标。
- 观察者 - 当更多图像被缩放和转换时要通知的对象。
查看使用单个动画精灵的示例here,以选择要绘制的图像的不同位置。
在20JAN15之前,示例程序指向了这个答案(用于创建上面爆炸的动画显示)有逻辑错误,只显示了2行图像。 (请注意,该示例未显示爆炸的最后一行...)
请参阅pointed to-page的其他答案,其中包含对该计划的修复程序。干杯。沃伦K。
答案 2 :(得分:1)
将标签添加到JScrollPane,并将滚动窗格的大小设置为单个图像的宽度。您可能还想删除滚动窗格的boder并确保滚动窗格不显示滚动条。
使用Swing Timer来安排动画。
每次定时器触发时,您都可以使用视口的setViewPosition方法更改滚动窗格的视口位置。