Swing/AnimatedIconInTableCell のバックアップの現在との差分(No.1)
TITLE:JTableのセルにAnimated GIFを表示する
Posted by aterai at 2012-03-05
JTableのセルにAnimated GIFを表示する
ImageIcon にImageObserverを設定して、JTableのセル中でAnimated GIFのアニメーションを行います。- 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
のアニメーションを行います。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
ImageIcon icon = new ImageIcon(url);
#spandel
//Wastefulness: icon.setImageObserver((ImageObserver)table);
#spanend
#spanadd
// Wastefulness: icon.setImageObserver((ImageObserver) table);
#spanend
icon.setImageObserver(new ImageObserver() {
//@see http://www2.gol.com/users/tame/swing/examples/SwingExamples.html
// @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
// @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;
return (infoflags & (ALLBITS | ABORT)) == 0;
};
});
解説
上記のサンプルでは、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を参考にして、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を表示する