Swing/AnimatedIconInComboBox の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/AnimatedIconInComboBox へ行く。
- Swing/AnimatedIconInComboBox の差分を削除
---
category: swing
folder: AnimatedIconInComboBox
title: JComboBoxにAnimated GIFを表示する
tags: [JComboBox, ImageIcon, ImageObserver, BasicComboPopup, JList]
author: aterai
pubdate: 2012-03-12T17:23:26+09:00
description: JComboBoxと、そのドロップダウンリストにAnimated GIFを表示します。
image: https://lh3.googleusercontent.com/-kS7gIhaebeM/T12ukNN94JI/AAAAAAAABJ8/wM8SvLNzWEE/s800/AnimatedIconInComboBox.png
---
* 概要 [#summary]
`JComboBox`と、そのドロップダウンリストに`Animated GIF`を表示します。
#download(https://lh3.googleusercontent.com/-kS7gIhaebeM/T12ukNN94JI/AAAAAAAABJ8/wM8SvLNzWEE/s800/AnimatedIconInComboBox.png)
* サンプルコード [#sourcecode]
#code(link){{
private static ImageIcon makeImageIcon(URL url, final JComboBox combo, final int row) {
ImageIcon icon = new ImageIcon(url);
// Wastefulness: icon.setImageObserver(combo);
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) {
if (combo.isShowing() && (infoflags & (FRAMEBITS | ALLBITS)) != 0) {
if (combo.getSelectedIndex() == row) {
combo.repaint();
}
BasicComboPopup p = (BasicComboPopup) combo.getAccessibleContext()
.getAccessibleChild(0);
JList list = p.getList();
if (list.isShowing()) {
list.repaint(list.getCellBounds(row, row));
}
}
return (infoflags & (ALLBITS|ABORT)) == 0;
};
});
return icon;
}
}}
* 解説 [#explanation]
- セルの再描画`repaint()`でアニメーションを実行
- `JComboBox`自体が非表示(`JComboBox#isShowing(...)==false`)の場合は再描画しない
- `Animated GIF`が選択されている(`JComboBox#getSelectedIndex()==row`)場合のみ`JComboBox#repaint()`で再描画する
- ドロップダウンリストが表示されている場合、`Animated GIF`の表示されている領域(`JList#getCellBounds(row, row)`で取得)だけ再描画
* 参考リンク [#reference]
- [[JTableのセルにAnimated GIFを表示する>Swing/AnimatedIconInTableCell]]
* コメント [#comment]
#comment
#comment