Swing/AnimatedIconInComboBox のバックアップ差分(No.1)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/AnimatedIconInComboBox へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JComboBoxにAnimated GIFを表示する #navi(../) RIGHT:Posted by &author(aterai); at 2012-03-12 *JComboBoxにAnimated GIFを表示する [#tf47b649] JComboBoxと、そのドロップダウンリストにAnimated GIFを表示します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(https://lh3.googleusercontent.com/-kS7gIhaebeM/T12ukNN94JI/AAAAAAAABJ8/wM8SvLNzWEE/s800/AnimatedIconInComboBox.png) **サンプルコード [#ra30b4ca] #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; } }} **解説 [#ff36f816] - JComboBox自体が非表示(JComboBox#isShowing(...)==false)の場合は、再描画しない - Animated GIFが選択されている(JComboBox#getSelectedIndex()==row)場合のみ、JComboBox#repaint()で再描画する - ドロップダウンリストが表示されている場合、Animated GIFの表示されている領域(JList#getCellBounds(row, row)で取得)だけ再描画 **参考リンク [#s0602434] - [[JTableのセルにAnimated GIFを表示する>Swing/AnimatedIconInTableCell]] **コメント [#oef480dc] #comment