JTreeのTreeNodeにAnimated GIFを表示する
Total: 3134
, Today: 1
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JTree
のノードに設定したAnimated GIF
のImageIcon
がアニメーションを行えるようにImageObserver
を設定します。
Screenshot
Advertisement
サンプルコード
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;
});
View in GitHub: Java, Kotlin解説
Default
DefaultMutableTreeNode
のUserObject
としてAnimated GIF
画像から生成したImageIcon
を設定し、これをDefaultTreeCellRenderer#setIcon(...)
でノードに表示- 自動的に再描画されないためアニメーションが開始されない
setImageObserver
- 同様に設定した
ImageIcon
にsetImageObserver(ImageObserver)
メソッドでImageObserver
を追加し、正常にアニメーションが行えるように画像の更新に合わせてJTree#repaint(Rectangle)
でノードを再描画 - 再描画する領域は対象のノードのみになるよう
JTree.getPathBounds(TreePath)
で取得される領域に制限
- 同様に設定した