JTreeのTreeNodeにAnimated GIFを表示する
Total: 3517, Today: 1, Yesterday: 1
Posted by aterai at 
Last-modified: 
Summary
JTreeのノードに設定したAnimated GIFのImageIconがアニメーションを行えるようにImageObserverを設定します。
Screenshot

Advertisement
Source Code Examples
TreePath path = new TreePath(s1.getPath());
icon.setImageObserver((img, infoflags, x, y, w, h) -> {
  if (!tree.isShowing()) {
    return false;
  }
  Rectangle cellRect = tree.getPathBounds(path);
  if ((infoflags & (FRAMEBITS | ALLBITS)) != 0 && Objects.nonNull(cellRect)) {
    tree.repaint(cellRect);
  }
  return (infoflags & (ALLBITS | ABORT)) == 0;
});
Description
- Default- DefaultMutableTreeNodeの- UserObjectとして- Animated GIF画像から生成した- ImageIconを設定し、これを- DefaultTreeCellRenderer#setIcon(...)でノードに表示
- 自動的に再描画されないためアニメーションが開始されない
 
- setImageObserver- 同様に設定したImageIconにsetImageObserver(ImageObserver)メソッドでImageObserverを追加し、正常にアニメーションが行えるように画像の更新に合わせてJTree#repaint(Rectangle)でノードを再描画
- 再描画する領域は対象のノードのみになるようJTree.getPathBounds(TreePath)で取得される領域に制限
 
- 同様に設定した