概要

JLabelに表示したAnimated GIFのアニメーションを停止します。

サンプルコード

JLabel label2 = new JLabel() {
  @Override public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h) {
    if (!isEnabled()) {
      infoflags &= ~FRAMEBITS;
    }
    return super.imageUpdate(img, infoflags, x, y, w, h);
  }
};
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、JLabel#isEnabled()falseの場合はsetIcon()メソッドで設定したAnimated Gifのアニメーションを停止するなどのテストを行っています。

  • Default
    • デフォルトのJLabelではJLabel#setEnabled(false)を設定してもアニメーションは停止しない
  • Override imageUpdate(...)
    • JLabel#imageUpdate(...)infoflagsからFRAMEBITSフラグを落とすことでアニメーションを停止
    • JLabelがリサイズされると?コマが進んでしまう
  • setDisabledIcon
    • 別途用意した静止画像を使ってJLabel#setDisabledIcon(...)を設定
    • GrayFilter.createDisabledImage(Image)でアイコンをグレースケール化

参考リンク

コメント