显示ImageIcon的一部分

Bonjour,我正在尝试动画,并且发现自己在连续的单个图像上发现了一条爆炸。 我希望他们按顺序依次显示爆炸动画。 当然,我在JLabel上思考ImageIcon ,但是当我查看JLabel规范时,我发现了这一行:

JLabel(Icon icon) – 使用指定的图像创建JLabel实例。 标签在其显示区域中垂直和水平居中。

我希望能够在标签中仅显示完整图像的一部分,然后加载其中的另一部分:基本上在一个图像上加载不同的阶段。

有没有办法在不切割图像和单独加载图像的情况下执行此操作?

您最初可以使用BufferedImage加载图像 ,您可以调用getSubimage来获取图像的裁剪副本,同时保留原始Image

您还可以使用Graphics类中的drawImage方法绘制图像以裁剪正在绘制的图像

 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坐标。
  • observer – 在缩放和转换更多图像时要通知的对象。

请参阅此处的示例,该示例使用单个动画精灵来选择要绘制的图像的不同位置。

在此处输入图像描述

在此处输入图像描述

在20JAN15之前,从这个答案中指出的示例程序 (用于创建上面爆炸的动画显示) 具有逻辑错误并且仅显示2行图像。 (注意,该示例未显示爆炸的最后一行…)

请参阅指向该页面的附加答案,其中包含该程序的修复程序。 干杯。 沃伦K.

  1. 将标签添加到JScrollPane并将滚动窗格的大小设置为单个图像的宽度。 您可能还想删除滚动窗格的boder并确保滚动窗格不显示滚动条。

  2. 使用Swing Timer来安排动画。

  3. 每次Timer触发时,您都可以使用视口的setViewPosition方法更改滚动窗格的视口位置。