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 [#summary] `JComboBox`と、そのドロップダウンリストに`Animated GIF`を表示します。 #download(https://lh3.googleusercontent.com/-kS7gIhaebeM/T12ukNN94JI/AAAAAAAABJ8/wM8SvLNzWEE/s800/AnimatedIconInComboBox.png) * Source Code Examples [#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 [#explanation] - セルの再描画`repaint()`でアニメーションを実行 - `JComboBox`自体が非表示(`JComboBox#isShowing(...)==false`)の場合は再描画しない - `Animated GIF`が選択されている(`JComboBox#getSelectedIndex()==row`)場合のみ`JComboBox#repaint()`で再描画する - ドロップダウンリストが表示されている場合、`Animated GIF`の表示されている領域(`JList#getCellBounds(row, row)`で取得)だけ再描画 * Reference [#reference] - [[JTableのセルにAnimated GIFを表示する>Swing/AnimatedIconInTableCell]] * コメント [#comment] * Comment [#comment] #comment #comment