Swing/ListCellAnimation のバックアップソース(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/ListCellAnimation へ行く。
TITLE:JListのセルのアニメーション #navi(../) *JListのセルのアニメーション [#gfab1816] Posted by [[terai]] at 2006-11-27 #contents **概要 [#db3c3494] JListの選択されたセルをアニメーションさせます。 -&jnlp; -&jar; -&zip; #screenshot **サンプルコード [#dddb9e20] #code{{ class AnimeListCellRenderer extends JPanel implements ListCellRenderer { private static final Color selectedColor = new Color(230,230,255); private final AnimeIcon icon = new AnimeIcon(); private final MarqueeLabel label = new MarqueeLabel(); private final javax.swing.Timer animator; private final JList list; private boolean isRunning = false; public AnimeListCellRenderer(final JList l) { super(new BorderLayout()); this.list = l; animator = new javax.swing.Timer(80, new ActionListener() { public void actionPerformed(ActionEvent e) { int i = l.getSelectedIndex(); if(isRunning=(i>=0)) l.repaint(l.getCellBounds(i,i)); } }); setOpaque(true); add(icon, BorderLayout.WEST); add(label, BorderLayout.CENTER); animator.start(); } public Component getListCellRendererComponent(JList list, Object object, int index, boolean isSelected, boolean cellHasFocus) { setBackground(isSelected ? selectedColor : list.getBackground()); label.setText((object==null) ? "" : object.toString()); animate_index = index; return this; } private boolean isAnimatingCell() { return isRunning && animate_index==list.getSelectedIndex(); } int animate_index = -1; private class MarqueeLabel extends JLabel { //... }} **解説 [#u20e47f0] 上記のサンプルでは、セルが選択されると左のアイコンがアニメーションし、文字列がクリップされている場合は、スクロールするようになっています。 %%選択されたセルだけ再描画しているのではなく、ActionListener を実装したセルレンダラーを作成してJList全体をrepaintしています。%% 選択されたセルだけ再描画してアニメーションを行っています。 **参考リンク [#e65685cf] -[[Timerでアニメーションするアイコンを作成>Swing/AnimeIcon]] -[[GlyphVectorで文字列を電光掲示板風にスクロール>Swing/ScrollingMessage]] **コメント [#x428be3b] - 選択されたセルのみ再描画、JScrollPaneに対応、スクリーンショット更新。 -- [[terai]] &new{2008-05-13 (火) 14:53:51}; #comment