Swing/AnimatedTreeNode のバックアップ差分(No.2)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/AnimatedTreeNode へ行く。
- 1 (2017-09-24 (日) 15:10:03)
- 2 (2019-04-03 (水) 19:28:35)
- 3 (2021-01-15 (金) 11:50:44)
- 4 (2023-08-25 (金) 13:55:00)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: AnimatedTreeNode title: JTreeのTreeNodeにAnimated GIFを表示する tags: [JTree, ImageIcon, ImageObserver, Animation] author: aterai pubdate: 2016-06-27T01:54:58+09:00 description: JTreeのノードに設定したAnimated GIFのImageIconがアニメーションを行えるようにImageObserverを設定します。 image: https://lh3.googleusercontent.com/-U9WtOD4nOug/V3AE4msfadI/AAAAAAAAOcY/VDwIROM5Ju4gNFBm47FDBJTOtIazp7iyACCo/s800/AnimatedTreeNode.png --- * 概要 [#summary] `JTree`のノードに設定した`Animated GIF`の`ImageIcon`がアニメーションを行えるように`ImageObserver`を設定します。 #download(https://lh3.googleusercontent.com/-U9WtOD4nOug/V3AE4msfadI/AAAAAAAAOcY/VDwIROM5Ju4gNFBm47FDBJTOtIazp7iyACCo/s800/AnimatedTreeNode.png) * サンプルコード [#sourcecode] #code(link){{ TreePath path = new TreePath(s1.getPath()); //Wastefulness: icon.setImageObserver((ImageObserver) tree); icon.setImageObserver(new ImageObserver() { @Override public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int 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; } }); }} * 解説 [#explanation] - `Default` -- `DefaultMutableTreeNode`の`UserObject`として`Animated GIF`画像から生成した`ImageIcon`を設定し、これを`DefaultTreeCellRenderer#setIcon(...)`でノードに表示 -- このままでは、アニメーションが正常に行われない -- 自動的に再描画されないため、アニメーションが正常に行われない - `setImageObserver` -- 同様に設定した`ImageIcon`に`setImageObserver(ImageObserver)`メソッドで`ImageObserver`を追加し、正常にアニメーションが行えるように画像の更新に合わせて`JTree#repaint(Rectangle)`でノードを再描画 -- 再描画は対象のノードのみになるよう、`JTree.getPathBounds(TreePath)`で取得される領域に制限 -- 再描画する領域は対象のノードのみになるよう、`JTree.getPathBounds(TreePath)`で取得される領域に制限 * 参考リンク [#reference] - [[JTableのセルにAnimated GIFを表示する>Swing/AnimatedIconInTableCell]] * コメント [#comment] #comment #comment