Swing/AnimatedIconInTableCell のバックアップ(No.9)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/AnimatedIconInTableCell へ行く。
- category: swing folder: AnimatedIconInTableCell title: JTableのセルにAnimated GIFを表示する tags: [JTable, ImageIcon, ImageObserver, Animation] author: aterai pubdate: 2012-03-05T01:22:05+09:00 description: ImageIconにImageObserverを設定して、JTableのセル中でAnimated GIFのアニメーションを行います。 image:
概要
ImageIcon
にImageObserver
を設定して、JTable
のセル中でAnimated GIF
のアニメーションを行います。
Screenshot
Advertisement
サンプルコード
ImageIcon icon = new ImageIcon(url);
// Wastefulness: icon.setImageObserver((ImageObserver) table);
icon.setImageObserver(new ImageObserver() {
// @see http://www2.gol.com/users/tame/swing/examples/SwingExamples.html
@Override public boolean imageUpdate(
Image img, int infoflags, int x, int y, int w, int h) {
//@see javax.swing.JLabel#imageUpdate(...)
if (!table.isShowing()) {
return false;
}
// @see java.awt.Component#imageUpdate(...)
if ((infoflags & (FRAMEBITS|ALLBITS)) != 0) {
int vr = table.convertRowIndexToView(row); // JDK 1.6.0
int vc = table.convertColumnIndexToView(col);
table.repaint(table.getCellRect(vr, vc, false));
}
return (infoflags & (ALLBITS | ABORT)) == 0;
};
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、AnimatedIconTableExample.javaを参考にして、Animated GIF
ファイルから作成したImageIcon
に、setImageObserver(ImageObserver)
を設定しています。直接JTable
をImageObserver
として設定するとすべてのセルが再描画されて無駄なので、JTable#getCellRect(row, col, false)
で対象セルのみrepaint
するようにしています。
AnimatedIconTableExample.javaからの変更点JTable#isShowing(...)==false
で、非表示の場合はJTable#repaint(...)
しないJDK 1.6.0
以降に導入されたJTable#convertRowIndexToView(row)メソッドを使用し、行がソートされていても正しいセルのみを再描画する- JTable#convertColumnIndexToView(col)メソッドを使って、列の入れ替えがあっても正しいセルのみを再描画する
参考リンク
AnimatedIconTableExample.java- 元サイトには繋がらないので、animatedicontableexample.java - Google 検索などのミラーを参考
- JTreeのTreeNodeにAnimated GIFを表示する